Salvar dados no Firebird
Olá, gente.Estou utilizando Delphi 7, Firebird 2.1 e o componente Zeos para conexão com o banco. Para salvar os registros estou utilizando o método Post, mas não grava nada, mesmo assim o campo código está autoincrementando, isto é, quando tento salvar um registro com código 2, por exemplo, ele não salva mas o registro seguinte ele mostra o código 3.Já tentei com ApplyUpdates mas dá no mesmo.Alguém pode me dar uma ajuda?Valeu.
Walder
Curtidas 0
Respostas
Pietro Braga
07/08/2010
Olá amigo, tente fazer com Append
Exemplo:
Se estiver usando uma ZQuery pode fazer assim:
ou
Exemplo:
ZTable.insert; ... ... ZTable.Append;
Se estiver usando uma ZQuery pode fazer assim:
With ZQuery do Active:= False; SQL.Clear; SQL.Text:= '**********'; SQL.Active:= True;
ou
With ZQuery do close; SQL.Clear; SQL.Text:= '**********'; open;
GOSTEI 0
Walder
07/08/2010
Olá amigo, tente fazer com Append
Exemplo:
Se estiver usando uma ZQuery pode fazer assim:
ou
Exemplo:
ZTable.insert; ... ... ZTable.Append;
Se estiver usando uma ZQuery pode fazer assim:
With ZQuery do Active:= False; SQL.Clear; SQL.Text:= '**********'; SQL.Active:= True;
ou
With ZQuery do close; SQL.Clear; SQL.Text:= '**********'; open;
Olá, Pietro.estou fazendo assim: Tenho alguns botões no form. No botão Incluir tem o seguinte código:dmDados.T_Funcionario.Append;...onde T_Funcionario é ZTable.No botão Gravar tem o seguinte código:dmDados.T_Funcionario.Post;Após dar Post, enquanto a aplicação estiver sendo executada, os registros aparecem. Mas se eu fechar a aplicação e abrir novamente os registros não aparecem, e se eu for incluir outro registro o código é incrementado, isto é, se no registro anterior o código era 2, no próximo aparece 3.Valeu.
GOSTEI 0
Pietro Braga
07/08/2010
Bom, acho que agora eu entendi.
O botão incluir prepara o formulário para a inserção de dados não é?
E o botão gravar faz o commit...
Se for isso faça assim.
O que está acontecendo é que o comando Append grava os dados no banco.
Como vc não tem nada ainda no formulario, ele está gravando todos os campos em branco (nulo).
Espero que tenha ajudado.
O botão incluir prepara o formulário para a inserção de dados não é?
E o botão gravar faz o commit...
Se for isso faça assim.
No botão incluir bote o seguinte código: dmDados.T_Funciionario.Insert; E no botão gravar coloque este: dmDados.T_Funcionario.Append;
O que está acontecendo é que o comando Append grava os dados no banco.
Como vc não tem nada ainda no formulario, ele está gravando todos os campos em branco (nulo).
Espero que tenha ajudado.
GOSTEI 0
Walder
07/08/2010
Valeu mesmo, Pietro, mas não grava ainda.Tenho um outro aplicativo em Interbase e utilizo os mesmo comandos para inserção (Append) e gravação (ApplyUpdates(-1)). Só que neste aplicativo utilizo SQLConnection e SimpleDataSet, ambos da paleta dbExpress para conexão ao banco. Estou tentando migrar para o Firebird usando o Zeos para conexão, mas estou com este problema de gravação de dados.Vou tentar reconstruir a base de dados e refazer o código.Valeu pela ajuda.
GOSTEI 0
Emerson Nascimento
07/08/2010
não uso o simpledataset, somente o clientdataset, mas sei que eles têm as mesmas características.
procure pelo método OnReconcileError do seu simpledataset implemente-o com a linha:
ShowMessage(e.message);
esse método será disparado quando algum erro for retornado pelo banco de dados (sqlconnection).
volte a usar o método ApplyUpdates ao gravar. se houver algum erro, o método OnReconcileError irá exibi-lo e você poderá tomar as medidas necessárias para corrigi-lo.
procure pelo método OnReconcileError do seu simpledataset implemente-o com a linha:
ShowMessage(e.message);
esse método será disparado quando algum erro for retornado pelo banco de dados (sqlconnection).
volte a usar o método ApplyUpdates ao gravar. se houver algum erro, o método OnReconcileError irá exibi-lo e você poderá tomar as medidas necessárias para corrigi-lo.
GOSTEI 0
Walder
07/08/2010
Obrigado, Emerson.Vou tentar dessa forma.
GOSTEI 0