Atulizando BD com (ClientDataSet Dbgrid) e 3 Camadas.
Pessoal sou iniciante em componentes Data e gostaria da ajuda de vcs !
Meu cenário é o sequinte. Tenho uma aplicação 3 camadas onde no meu servidor tenho um SqlConnection apontando para um banco Oracle. Depois tenho um sqlDataSet(dbExpress) com o sequinte comandText:
´SELECT COD_SEG_RESU,
DATA_INI_VIGEN,
DATA_FIN_VIGEN,
VLR_MIN,
VLR_MAX,
VLR_TOLERANCIA,
IES_APROV_TOLERANCIA
FROM STC_FT_DETALHE
WHERE COD_ANALISE = :V_COD_ANALISE
AND COD_SEQ_FT = :V_COD_SEQ_FT
AND COD_FT = :V_COD_FT
ORDER BY COD_SEG_RESU´
Este ClientDataSet esta ligado em um DataSetProviding.
Na aplicação cliente tenho um ClientDataSet que aponta para o DataSetProvindig acima. Depois tenho um dataSource que aponta para esse ClientDataSet.
Ai coloquei um DbGrid apontando para este data source. Trago os registros normalmente.
O problema é que quando eu altero o dbgrid ela não atualiza o meu banco de dados. faço da sequinte forma no botão gravar
procedure TCAQ_MAN014.actOkExecute(Sender: TObject);
begin
ClientDataSet.Post;
ClientDataSet.ApplyUpdates(0);
end;
Alguém poderia me ajudar pro favor ?
Meu cenário é o sequinte. Tenho uma aplicação 3 camadas onde no meu servidor tenho um SqlConnection apontando para um banco Oracle. Depois tenho um sqlDataSet(dbExpress) com o sequinte comandText:
´SELECT COD_SEG_RESU,
DATA_INI_VIGEN,
DATA_FIN_VIGEN,
VLR_MIN,
VLR_MAX,
VLR_TOLERANCIA,
IES_APROV_TOLERANCIA
FROM STC_FT_DETALHE
WHERE COD_ANALISE = :V_COD_ANALISE
AND COD_SEQ_FT = :V_COD_SEQ_FT
AND COD_FT = :V_COD_FT
ORDER BY COD_SEG_RESU´
Este ClientDataSet esta ligado em um DataSetProviding.
Na aplicação cliente tenho um ClientDataSet que aponta para o DataSetProvindig acima. Depois tenho um dataSource que aponta para esse ClientDataSet.
Ai coloquei um DbGrid apontando para este data source. Trago os registros normalmente.
O problema é que quando eu altero o dbgrid ela não atualiza o meu banco de dados. faço da sequinte forma no botão gravar
procedure TCAQ_MAN014.actOkExecute(Sender: TObject);
begin
ClientDataSet.Post;
ClientDataSet.ApplyUpdates(0);
end;
Alguém poderia me ajudar pro favor ?
Mascotepc
Curtidas 0
Respostas
Titanius
18/07/2005
Amigo,
Ele não grava
1- no banco depois que você clica no OK?
ou
2- Depois que você muda no Grid?
No caso:
2- Não mudará, pois ainda não foi no banco de dados e deu o Commit
1- Se não tiver gravando, com certeza está ocorrendo erro, faz o seguinte: Insere um ReconcileError e aponta ele pro CDS, que se tiver algum erro ele exibirá pra você.
[]s
Ele não grava
1- no banco depois que você clica no OK?
ou
2- Depois que você muda no Grid?
No caso:
2- Não mudará, pois ainda não foi no banco de dados e deu o Commit
1- Se não tiver gravando, com certeza está ocorrendo erro, faz o seguinte: Insere um ReconcileError e aponta ele pro CDS, que se tiver algum erro ele exibirá pra você.
[]s
GOSTEI 0
Mascotepc
18/07/2005
Consequi resolver aqui mais não gostei do que vi !
O banco não estava atualizando porque no sql do commandText eu não tava colocando na clausula Select os campos chaves da tables, eu estava utilizando eles somente na clausaula where.
Será que não tem como fazer sem selecionar os campos chaves da tabela ?
O banco não estava atualizando porque no sql do commandText eu não tava colocando na clausula Select os campos chaves da tables, eu estava utilizando eles somente na clausaula where.
Será que não tem como fazer sem selecionar os campos chaves da tabela ?
GOSTEI 0
Titanius
18/07/2005
Em 3 camadas, vc deve informar as Chaves da tabela, no proprio editor de campos do CDS, caso vc nao queira desmarque Key nos campos chaves, porem eh certeza de erro..
[]s
[]s
GOSTEI 0
Mascotepc
18/07/2005
Agora fiz um Join desta tabela que estava atualizando com outra tabela para trazer a descrição de um código. Resultado : Parou de atualizar !
Segunda feria é bom né !
Segunda feria é bom né !
GOSTEI 0
Titanius
18/07/2005
hehe, segunda-feira é braba mesmo :D
Seguinte, se você está trazendo algum campo de qualquer tipo de join, você deverá ir no editor de Campos do CDS, e selecionar os campos que você está trazendo, e no UpdateFlags, deixar [b:8445a84007]tudo desmarcado[/b:8445a84007].
[]s
Seguinte, se você está trazendo algum campo de qualquer tipo de join, você deverá ir no editor de Campos do CDS, e selecionar os campos que você está trazendo, e no UpdateFlags, deixar [b:8445a84007]tudo desmarcado[/b:8445a84007].
[]s
GOSTEI 0
Mascotepc
18/07/2005
Quando você diz UpdateFlags você quer dizer nos ProvideFlags ? Pesrgunto isso porque não achei essa propriedade UpdateFlags no editor de Campos do CDS. Desmarquei tudo no ProvidersFlags e ainda não funcionou !
O que será ?
O que será ?
GOSTEI 0
Titanius
18/07/2005
Realmente era o ProviderFlags.. :d sorry..
Você inseriu o REconcileErrorDialog ? Se não, faça-o, pois assim ele lhe dará o erro, e fica mais fácil descobrirmos :D
[]s
Você inseriu o REconcileErrorDialog ? Se não, faça-o, pois assim ele lhe dará o erro, e fica mais fácil descobrirmos :D
[]s
GOSTEI 0
Mascotepc
18/07/2005
Desculpe a minha ignorância, mais onde fica esse Componente REconcileErrorDialog ? Procurei aqui nas palhetas da minha IDE e não achei !
GOSTEI 0
Titanius
18/07/2005
beleza..
1- Vá ao menu File, New, Other
2- Na aba Dialog, selecione Reconcile Error Dialog, lá em baixo, deixe marcado o Radio COPY..
3- Feito, isso salve a unit do reconcile.. vá ao Form que tem o CDS, e adicione a unit ao uses do Form..
4- Vá no CDS, e no OI, vá em Event, e lá em baixo tem o Evento OnReconcileError... clique nele e insira o código abaixo:
Pronto, compile e tente executar sua função normalmente, e ele lhe dará o erro..
[]s
1- Vá ao menu File, New, Other
2- Na aba Dialog, selecione Reconcile Error Dialog, lá em baixo, deixe marcado o Radio COPY..
3- Feito, isso salve a unit do reconcile.. vá ao Form que tem o CDS, e adicione a unit ao uses do Form..
4- Vá no CDS, e no OI, vá em Event, e lá em baixo tem o Evento OnReconcileError... clique nele e insira o código abaixo:
Action := HandleReconcileError(DataSet, UpdateKind, E);
Pronto, compile e tente executar sua função normalmente, e ele lhe dará o erro..
[]s
GOSTEI 0
Mascotepc
18/07/2005
Amigo, muito obrigado pelas dicas. Você me ajudou muito. Ulitilizei o REConcileErrorDialog e ele me deu o seguinte erro : ´Invalid Column Name´. Para resolver, além de ir no do Fields Editor do CDS, fui também no Fields Editor do sqlDataSet desmarcando tudo no ProviderFlags deste componente também. Ai funcionou !
Muito obrigado mais uma vez !
Marcelo.
Muito obrigado mais uma vez !
Marcelo.
GOSTEI 0
Titanius
18/07/2005
Flow, no que precisa estamos aí!
[]s
[]s
GOSTEI 0