GRAVAÇÃO DE REGISTRO NO MYSQL 5 COM DBEXPRESS

Delphi

17/07/2012

Galera, estou com o seguinte problema, quando peço para a aplicação gravar no banco de dados (mysql 5 ) não apresenta nemhum erro, porém não grava na tabela os registros..

DETALHE: Estou tentando gravar varios registros em um comando só, ou seja, tento gravar varios pedidos em um loop.

segue codigo para avaliação , se alguem consegir enchegar meu erro, por favor me ajudem, desde já agradeço.


********************** CODIGO A SER ANALISADO **********************

procedure TFormPEDIDOS.BitBtn1Click(Sender: TObject);
var proxNum:integer;
begin

w_qtped:= strtoint(edit5.text);

ProxNum :=0;
DMACI.CDSmovimento.IndexName:=;
DMACI.CDSmovimento.First;
DMACI.QR_maxped.CLOSE;
DMACI.QR_maxped.OPEN;
ProxNum :=DMACI.qr_maxpedMAXPEDIDO.ASINTEGER + 1;

while w_qtped <> 0 do

TRY
Transacao.IsolationLevel := xilREADCOMMITTED;
DMACI.CONEXAO.StartTransaction(Transacao);

DMACI.CDSmovimento.Append;
DMACI.CDSmovimento.fieldbyname(pedido).asinteger:=Proxnum;
Editcodcli.Text:=inttostr(proxnum);

DMACI.CDSmovimento.fieldbyname(dt_ped).AsDatetime :=(date);
DMACI.CDSmovimento.fieldbyname(hr_ped).AsDatetime :=(Time);
DMACI.CDSmovimento.fieldbyname(cod_cli).AsInteger := strtoint(EditCODCLI.Text);
DMACI.CDSmovimento.fieldbyname(cliente).AsString := label15.Caption;
DMACI.CDSmovimento.fieldbyname(litros).Asstring := Edit6.text;
DMACI.CDSmovimento.fieldbyname(preco).ASCURRENCY :=strtofloat(Editnum11.text);
DMACI.CDSmovimento.fieldbyname(descto).ASCURRENCY :=strtofloat(Editnum12.text);
DMACI.CDSmovimento.fieldbyname(liq).ASCURRENCY :=(strtofloat(Editnum11.text)-strtofloat(Editnum12.text));
DMACI.CDSmovimento.fieldbyname(contato).AsString := Edit3.text;

if w_prog =AGENDPEDthen
begin
DMACI.CDSmovimento.fieldbyname(sit).AsString := A;
end;

DMACI.CDSmovimento.fieldbyname(op_ped).AsInteger :=Formsenha.w_codusu;
DMACI.CDSmovimento.fieldbyname(dt_prev).AsDateTime:= DateTimePicker1.Date;
DMACI.CDSmovimento.fieldbyname(hr_prev).AsDateTime:= DateTimePicker1.Time;
DMACI.CDSmovimento.fieldbyname(cod_vend).AsInteger:= w_vend;
DMACI.CDSmovimento.fieldbyname(lembrete).asString := Edit4.Text;
DMACI.CDSmovimento.post;

DMACI.CONEXAO.Commit(transacao);

w_qtped := (w_qtped - 1);

if w_qtped <> 0 then
begin
ProxNum :=(ProxNum + 1);
end;

except
DMACI.CONEXAO.Rollback(transacao);
DMACI.CDSmovimento.Refresh;
Atencao(Ocorreur algum ERRO durante a gravação do registro,Tente novamente! );
end;
Groupbox4.Visible:=false;
tratabotoes;

end;


*********************** FIM *******************

OBRIGADO PELA FORÇA -luizinfor@ig.com.br
Luiz Junior

Luiz Junior

Curtidas 0

Melhor post

Eliel Martins

Eliel Martins

19/07/2012

Olá Luiz !

Primeira coisa que estou vendo no seu código que o seu While está faltando o begin - end da forma que está ele não vai percorrer o bloco de código, deveria ficar assim :
  while w_qtped <> 0 do begin 
  {Aqui dentro coloca o bloco de código que deseja que seja executado.} 
  end;
  

Outro ponto que verifiquei, em vez de você utilizar o Post, eu utilizaria o ApplyUpdates(0), porque o Post fica somente em memória, ta certo que você utiliza o commit da conexão, mas acho mais seguro fazer da forma que citei acima.

Espero ter ajudado, caso esse comentário que fiz não resolver o seu problema, por gentileza só postar abaixo o que ocorreu que vou tentar te ajudar.

Atenciosamente,

Eliel G. Martins
GOSTEI 1

Mais Respostas

Luiz Junior

Luiz Junior

17/07/2012

Querido Eliel,

Em primeiro lugar obrigado por ter respondido minha duvida, apesar de sua boa vontade, mesmo assim não funcionou.
Tenho o dbgrid ligado ao Dataset da tabela, e como você citou, o dbgrid até exibe os registros, porem na saida da rotina, os registros não são gravados na tabela, não entendo o que esta acontecendo.

quanto ao begin-end;já corrigí

estou escrevendo dessa forma:

NOTA: quando uso o DMACI.CDSmovimento.ApplyUpdates(0);

DA O ERRO:

CDSmovimento: Must Apply updates before refreshing data.

e nem manda pra o Dbgrid, já com o POST, ele manda para o DBgrid, mas não grava na tabela.



*********************** FONTE ********************

procedure TFormPEDIDOS.BitBtn1Click(Sender: TObject);
var proxNum:integer;
begin
w_qtped:= strtoint(edit5.text);

ProxNum :=0;
DMACI.CDSmovimento.IndexName:=;
DMACI.CDSmovimento.First;
DMACI.QR_maxped.CLOSE;
DMACI.QR_maxped.OPEN;
ProxNum :=DMACI.qr_maxpedMAXPEDIDO.ASINTEGER + 1;

while w_qtped <> 0 do begin

TRY
Transacao.IsolationLevel := xilREADCOMMITTED;
DMACI.CONEXAO.StartTransaction(Transacao);

DMACI.CDSmovimento.Append;
DMACI.CDSmovimento.fieldbyname(pedido).asinteger:=Proxnum;
Editcodcli.Text:=inttostr(proxnum);

DMACI.CDSmovimento.fieldbyname(dt_ped).AsDatetime :=(date);
DMACI.CDSmovimento.fieldbyname(hr_ped).AsDatetime :=(Time);
DMACI.CDSmovimento.fieldbyname(cod_cli).AsInteger := strtoint(EditCODCLI.Text);
DMACI.CDSmovimento.fieldbyname(cliente).AsString := label15.Caption;
DMACI.CDSmovimento.fieldbyname(litros).Asstring := Edit6.text;
DMACI.CDSmovimento.fieldbyname(preco).ASCURRENCY :=strtofloat(Editnum11.text);
DMACI.CDSmovimento.fieldbyname(descto).ASCURRENCY :=strtofloat(Editnum12.text);
DMACI.CDSmovimento.fieldbyname(liq).ASCURRENCY :=(strtofloat(Editnum11.text)-strtofloat(Editnum12.text));
DMACI.CDSmovimento.fieldbyname(contato).AsString := Edit3.text;

if w_prog =AGENDPEDthen
begin
DMACI.CDSmovimento.fieldbyname(sit).AsString := A;
end;

DMACI.CDSmovimento.fieldbyname(op_ped).AsInteger :=Formsenha.w_codusu;
DMACI.CDSmovimento.fieldbyname(dt_prev).AsDateTime:= DateTimePicker1.Date;
DMACI.CDSmovimento.fieldbyname(hr_prev).AsDateTime:= DateTimePicker1.Time;
DMACI.CDSmovimento.fieldbyname(cod_vend).AsInteger:= w_vend;
DMACI.CDSmovimento.fieldbyname(lembrete).asString := Edit4.Text;
DMACI.CDSmovimento.post;

// DMACI.CDSmovimento.ApplyUpdates(0); NOTA: quando uso o DMACI.CDSmovimento.ApplyUpdates(0); DA ERRO.
// CDSmovimento: Must Apply updates before refreshing data.

DMACI.CONEXAO.Commit(Transacao);

w_qtped := (w_qtped - 1);

if w_qtped <> 0 then
begin
ProxNum :=(ProxNum + 1);
end;

except
DMACI.CONEXAO.Rollback(Transacao);
DMACI.CDSmovimento.Refresh;
Atencao(Ocorreur algum ERRO durante a gravação do registro,Tente novamente! );
end;
end;
Groupbox4.Visible:=false;
tratabotoes;
end;

GOSTEI 0
Luiz Junior

Luiz Junior

17/07/2012

Querido Eliel,

Em primeiro lugar obrigado por ter respondido minha duvida, apesar de sua boa vontade, mesmo assim não funcionou.
Tenho o dbgrid ligado ao Dataset da tabela, e como você citou, o dbgrid até exibe os registros, porem na saida da rotina, os registros não são gravados na tabela, não entendo o que esta acontecendo.

quanto ao begin-end;já corrigí

estou escrevendo dessa forma:

NOTA: quando uso o DMACI.CDSmovimento.ApplyUpdates(0);

DA O ERRO:

CDSmovimento: Must Apply updates before refreshing data.

e nem manda pra o Dbgrid, já com o POST, ele manda para o DBgrid, mas não grava na tabela.



*********************** FONTE ********************

procedure TFormPEDIDOS.BitBtn1Click(Sender: TObject);
var proxNum:integer;
begin
w_qtped:= strtoint(edit5.text);

ProxNum :=0;
DMACI.CDSmovimento.IndexName:=;
DMACI.CDSmovimento.First;
DMACI.QR_maxped.CLOSE;
DMACI.QR_maxped.OPEN;
ProxNum :=DMACI.qr_maxpedMAXPEDIDO.ASINTEGER + 1;

while w_qtped <> 0 do begin

TRY
Transacao.IsolationLevel := xilREADCOMMITTED;
DMACI.CONEXAO.StartTransaction(Transacao);

DMACI.CDSmovimento.Append;
DMACI.CDSmovimento.fieldbyname(pedido).asinteger:=Proxnum;
Editcodcli.Text:=inttostr(proxnum);

DMACI.CDSmovimento.fieldbyname(dt_ped).AsDatetime :=(date);
DMACI.CDSmovimento.fieldbyname(hr_ped).AsDatetime :=(Time);
DMACI.CDSmovimento.fieldbyname(cod_cli).AsInteger := strtoint(EditCODCLI.Text);
DMACI.CDSmovimento.fieldbyname(cliente).AsString := label15.Caption;
DMACI.CDSmovimento.fieldbyname(litros).Asstring := Edit6.text;
DMACI.CDSmovimento.fieldbyname(preco).ASCURRENCY :=strtofloat(Editnum11.text);
DMACI.CDSmovimento.fieldbyname(descto).ASCURRENCY :=strtofloat(Editnum12.text);
DMACI.CDSmovimento.fieldbyname(liq).ASCURRENCY :=(strtofloat(Editnum11.text)-strtofloat(Editnum12.text));
DMACI.CDSmovimento.fieldbyname(contato).AsString := Edit3.text;

if w_prog =AGENDPEDthen
begin
DMACI.CDSmovimento.fieldbyname(sit).AsString := A;
end;

DMACI.CDSmovimento.fieldbyname(op_ped).AsInteger :=Formsenha.w_codusu;
DMACI.CDSmovimento.fieldbyname(dt_prev).AsDateTime:= DateTimePicker1.Date;
DMACI.CDSmovimento.fieldbyname(hr_prev).AsDateTime:= DateTimePicker1.Time;
DMACI.CDSmovimento.fieldbyname(cod_vend).AsInteger:= w_vend;
DMACI.CDSmovimento.fieldbyname(lembrete).asString := Edit4.Text;
DMACI.CDSmovimento.post;

// DMACI.CDSmovimento.ApplyUpdates(0); NOTA: quando uso o DMACI.CDSmovimento.ApplyUpdates(0); DA ERRO.
// CDSmovimento: Must Apply updates before refreshing data.

DMACI.CONEXAO.Commit(Transacao);

w_qtped := (w_qtped - 1);

if w_qtped <> 0 then
begin
ProxNum :=(ProxNum + 1);
end;

except
DMACI.CONEXAO.Rollback(Transacao);
DMACI.CDSmovimento.Refresh;
Atencao(Ocorreur algum ERRO durante a gravação do registro,Tente novamente! );
end;
end;
Groupbox4.Visible:=false;
tratabotoes;
end;

GOSTEI 0
Rodrigo Souza

Rodrigo Souza

17/07/2012

Depois do post voce dá um

cds.ApplyUpdates(-1);

ao inves de (0)
GOSTEI 1
Alex Oliveira

Alex Oliveira

17/07/2012

qual versao do delphi vc usa?
GOSTEI 0
Deivison Melo

Deivison Melo

17/07/2012

Você já tentou utilizar apenas como teste o ApplyUpdates(-1) ao invés de ApplyUpdates(0), pois quando usamos o -1 estamos dizendo a rotina que poderá haver erros e esses erros não serão criticados e quando usamos o 0 o delphi não irá adimitir nem um erro. Já tentou rodar o seu comando via banco mesmo e ver se vai rodar (apenas por desencargo, assim vc terá certeza que as informações estão todas corretas e anula a possibilidade das informações estarem erradas).

Qualquer coisa posta ai que o que poder fazer para ajudar estou à disposição!
GOSTEI 1
Luiz Junior

Luiz Junior

17/07/2012

Estou usando DELPHI 7
GOSTEI 0
Luiz Junior

Luiz Junior

17/07/2012

qual versao do delphi vc usa?

USO DELPHI 7
GOSTEI 0
Luiz Junior

Luiz Junior

17/07/2012

Galera,

Desculpem a demora para resolver, me afastei um pouco da área e estou retomando, mas consegui resolver, obrigado a todos
GOSTEI 0
POSTAR