Fórum GRAVAÇÃO DE REGISTRO NO MYSQL 5 COM DBEXPRESS #420044
17/07/2012
0
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
Curtir tópico
+ 0Post mais votado
19/07/2012
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
Eliel Martins
Gostei + 1
Mais Posts
19/07/2012
Luiz Junior
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
19/07/2012
Luiz Junior
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
19/07/2012
Rodrigo Souza
cds.ApplyUpdates(-1);
ao inves de (0)
Gostei + 1
20/07/2012
Alex Oliveira
Gostei + 0
20/07/2012
Deivison Melo
Qualquer coisa posta ai que o que poder fazer para ajudar estou à disposição!
Gostei + 1
20/07/2012
Luiz Junior
Gostei + 0
20/07/2012
Luiz Junior
USO DELPHI 7
Gostei + 0
23/05/2015
Luiz Junior
Desculpem a demora para resolver, me afastei um pouco da área e estou retomando, mas consegui resolver, obrigado a todos
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)