Gravar registros em banco de dados Firebird com DbExpress

Firebird

08/12/2003

Ola pessoal !!!

Estou tentando gravar registros em um banco de dados usando componentes do DBExpress, mas os registros não estão sendo gravados no banco.
Utilizo ClientDataSet.Post e ClientDataSet.applyUpdates(0) para gravar. Quando fecho e abro novamente o registro não está lá !!!

Alguém tem alguma idéia ?

Obrigado !


Adriano Nunes

Adriano Nunes

Curtidas 0

Respostas

Afarias

Afarias

08/12/2003

1 - Sua transação não pode estar aberta antes do ApplyUpdates para q seja gerado um COMMIT automático

2 - Certifíque-se de configurar corretamente as propriedades ProviderFlags dos TFields do seu dataset (não o clientDataSet) e a propriedade UpdateMode do DataSetProvider.


3 - Use algum SQLMonitor para verificar se os SQL gerados pelo Provider estão corretos.



T+


GOSTEI 0
Adriano Nunes

Adriano Nunes

08/12/2003

As coisas agora estão piores, criei uma segunda aplicação que consegue incluir registros normalmente na tabela do banco, mas criei um novo form na aplicação que eu já possuia, exatamente igual a este da segunda aplicação que está funcionando e o novo form não inclui registros !

Caso eu queira desistir do DbExpress, o que você recomenda ? que não sejam componentes de 3º, componentes que estejam no Delphi 7 !!

O IBQuery da palheta Interbase seria uma boa opção ?

Neste caso as inclusões e alterações tem que ser feitas via comando de SQL ? como insert e update ?

O que você recomenda ?


GOSTEI 0
Duarteol

Duarteol

08/12/2003

Uma maneira de como eu faço a inclusão:

procedure TForm_Deputados_I.BitBtn1Click(Sender: TObject);
var
Trs : Ttransactiondesc;
begin
If MessageDlg(´Confirma, Inclusão dos Dados?´,
mtConfirmation,[mbYes , mbNo],0)=mrYes then
begin
//define a transação chamada Trs
Trs.TransactionID:=1;
Trs.IsolationLevel:=xilReadCommitted;
dmdados.Con_Parlamento.StartTransaction(Trs);
try
//
if not (dmdados.ClientDeputados.State=dsEdit) then
begin
dmdados.ClientDeputadosCOD_DEPUT.Value:=0;
end;
dmdados.ClientDeputadosTITULAR.Value:=EditDescricao.Text;
dmdados.ClientDeputadosSUPLENTE.Value:=Editpartido.Text;
dmdados.ClientDeputadosSIGLA.Value:=Editsigla.Text;
//
dmdados.ClientDeputados.ApplyUpdates(-1);
dmdados.Con_Parlamento.Commit(Trs);
except
dmdados.Con_Parlamento.Rollback(Trs);
ShowMessage(´Não Foi Possível Realizar a Gravação Com Sucesso ´);
end;
dmdados.ClientDeputados.Active:=False;
dmdados.ClientDeputados.Active:=True;
dmdados.ClientDeputados.Insert;
EditDescricao.Text:=´´;
Editpartido.Text:=´´;
Editsigla.Text:=´´;
end
else
begin
dmdados.ClientDeputados.Cancel;
EditDescricao.Text:=´´;
Editpartido.Text:=´´;
Editsigla.Text:=´´;
end;
dmdados.ClientDeputados.ApplyUpdates(-1);
ModalResult := -1;
end;


:roll: Não sei se vai ajudar, mas...


GOSTEI 0
Afarias

Afarias

08/12/2003

|criei uma segunda aplicação que consegue incluir registros normalmente
|na tabela do banco, mas criei um novo form na aplicação que eu já {...}

Algum detalhe q vc está deixando de lado.


|Caso eu queira desistir do DbExpress, o que você recomenda ? que não
|sejam componentes de 3º, componentes que estejam no Delphi 7 !!

IBX é muito fácil e simples


|O IBQuery da palheta Interbase seria uma boa opção ?

ou IBDataSet para as consultas ´editáveis´


|Neste caso as inclusões e alterações tem que ser feitas via comando de
|SQL ? como insert e update ?

Não (pelo menos explicitamente) -- vc usa Append,Edit,Post,Delete -- os componente mandam os comandos SQL para vc.


T+


GOSTEI 0
Adriano Nunes

Adriano Nunes

08/12/2003

Já comecei a usar o Ibdataset e estou achando bem interessante, mas percebi que eu preciso informar os comandos para inclusão e alteração nas propriedades InsertSQL e ModifySQL. Já coloquei a instrução mas ele está dando erro !!
A instrução que eu utilizo é:

insert into clientes (codigo,nome) values (:xcodigo,:xnome)

No caso o conteúdo de xcodigo é ´000035´ e xnome ´Adriano´

quando tento inserir o registro ele diz que:

field ´000035´ not found

o conteúdo do botão de gravar é o seguinte:

var
xcodigo,xnome: string;
begin
ibdataset1.Append;
xcodigo:=edit1.Text;
xnome:=edit2.text;
Ibdataset1.ParamByName(xcodigo);
Ibdataset1.ParamByName(xnome);
ibdataset1.Post;
end;

O que estou fazendo de errado ???


GOSTEI 0
Afarias

Afarias

08/12/2003

Os parâmetros dos SQL destas propriedades devem ter o mesmo nome dos campos. Vc NUNCA preenche estes parâmentros, o próprio componente faz isso implicitamente para vc, ex::


InsertSQL = insert into clientes (codigo,nome) values (:codigo,:nome)


código::

var 
  xcodigo, xnome: string; 

begin 

  xcodigo := edit1.Text; 
  xnome := edit2.text; 

  Ibdataset1.Append; 
  Ibdataset1.FieldByName(´codigo´).AsString := xcodigo;
  Ibdataset1.FieldByName(´nome´).AsString := xnome;
  Ibdataset1.Post; 

end; 



T+


GOSTEI 0
POSTAR