Fórum IBDataset e Interbase. Parecia ser fácil!!! #38387
28/08/2003
0
No meu sistema uso o IBDataset para fazer Insert, Modify, Update e Delete. Tenho um form com vários DBEdits que estão ligados a um Datasource que por sua vez está ligado ao IBDataset.
Bom, quando eu incluo um novo registro ele faz tudo certinho e registra no Banco, mas quando eu tento alterar ou deletar, no meu form ele realiza as operações, mas no banco não. Quando reinicio o software minhas alterações perdem efeito.
Alguém poderia me dar uma luz?
Anarchybra
Curtir tópico
+ 0Posts
28/08/2003
Afarias
Como está seu código ModifySQL e DeleteSQL??
T+
Gostei + 0
29/08/2003
Anarchybra
vou lhe passar toda minha codificação.
No meu Data Module tenho:
[b:556fec06de]Procedure TDMGeral.DataModuleCreate(Sender: TObject);
Begin
DBGeral.DatabaseName := ´192.168.0.2:d:\db\Clientes.fdb´;
End;
Procedure TDMGeral.DataModuleDestroy(Sender: TObject);
Begin
DBGeral.Connected := False;
TransGeral.Active := False;
End;
Procedure TDMGeral.QryGeralAfterPost(DataSet: TDataSet);
Begin
DMGeral.QryGeral.ApplyUpdates;
End;[/b:556fec06de]
No Form tenho:
[b:556fec06de]Procedure TFrmGeral.FormCreate(Sender: TObject);
Begin
DMGeral.QryGeral.Close;
DMGeral.QryGeral.Open;
End;
Procedure TFrmCliente.FormClose(Sender: TObject; var Action: TCloseAction);
Begin
DMGeral.QryGeral.Close;
Action := caFree;
FrmGeral := Nil;[/b:556fec06de]
O código ModifySQL do IBDataset está assim:
[b:556fec06de]update TRANSP
set
CODIGO = :CODIGO,
NOME = :NOME,
ABREV = :ABREV,
ENDERECO = :ENDERECO,
BAIRRO = :BAIRRO,
CIDADE = :CIDADE,
ESTADO = :ESTADO,
CEP = :CEP,
TEL = :TEL,
TEL2 = :TEL2,
DDD = :DDD,
CONTATO = :CONTATO
where
CODIGO = :OLD_CODIGO and
NOME = :OLD_NOME and
ABREV = :OLD_ABREV and
ENDERECO = :OLD_ENDERECO and
BAIRRO = :OLD_BAIRRO and
CIDADE = :OLD_CIDADE and
ESTADO = :OLD_ESTADO and
CEP = :OLD_CEP and
TEL = :OLD_TEL and
TEL2 = :OLD_TEL2 and
DDD = :OLD_DDD and
CONTATO = :OLD_CONTATO[/b:556fec06de]
e o DeleteSQL:
[b:556fec06de]delete from TRANSP
where
CODIGO = :OLD_CODIGO and
NOME = :OLD_NOME and
ABREV = :OLD_ABREV and
ENDERECO = :OLD_ENDERECO and
BAIRRO = :OLD_BAIRRO and
CIDADE = :OLD_CIDADE and
ESTADO = :OLD_ESTADO and
CEP = :OLD_CEP and
TEL = :OLD_TEL and
TEL2 = :OLD_TEL2 and
DDD = :OLD_DDD and
CONTATO = :OLD_CONTATO[/b:556fec06de]
e por fim estes são os meus botões:
[b:556fec06de]Procedure TFrmGeral.BtnIncluirClick(Sender: TObject);
Begin
DMGeral.QryGeral.Append;
DBECodigo.SetFocus;
End;
Procedure TFrmGeral.BtnAlterarClick(Sender: TObject);
Begin
DMGeral.QryGeral.Edit;
End;
Procedure TFrmGeral.BtnExcluirClick(Sender: TObject);
Begin
DMGeral.QryGeral.Delete;
DMGeral.QryGeral.ApplyUpdates;
DMGeral.TransGeral.CommitRetaining;
End;
Procedure TFrmGeral.BtnGravarClick(Sender: TObject);
Begin
If Not(DMGeral.TransGeral.InTransaction) Then
Begin
DMGeral.TransGeral.StartTransaction;
DMGeral.QryGeral.Post;
DMGeral.QryGeral.ApplyUpdates;
DMGeral.TransGeral.CommitRetaining;
End;
End;
Procedure TFrmGeral.BtnCancelarClick(Sender: TObject);
Begin
DMGeral.QryGeral.Cancel;
DMGeral.QryGeral.CancelUpdates;
DMGeral.TransGeral.RollbackRetaining;
End;[/b:556fec06de]
Muito obrigado!
Gostei + 0
29/08/2003
Anarchybra
eu já solucionei o problema.
Era na minha SP.
Brigadão.
Gostei + 0
29/08/2003
Afarias
Note tb q seu problema *pode ser* seus códigos no MODIFYSQL e DELETESQL... (a não ser q vc saiba exatamente o q está fazendo)
Vc está usando o WHERE com todos os campos -- tudo bem se vc quer manter uma atualização/exclusão mais ´consistente´ -- más tenha em mente q em geral, será mais prático fazer o WHERE apenas no campo chave (CODIGO)
T+
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)