Fórum Gravar registros em banco de dados Firebird com DbExpress #40702

08/12/2003

0

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

Responder

Posts

08/12/2003

Afarias

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+


Responder

Gostei + 0

09/12/2003

Adriano Nunes

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 ?


Responder

Gostei + 0

09/12/2003

Duarteol

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...


Responder

Gostei + 0

09/12/2003

Afarias

|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+


Responder

Gostei + 0

10/12/2003

Adriano Nunes

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 ???


Responder

Gostei + 0

10/12/2003

Afarias

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+


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar