delphi usando query copiar tabela
bom dia galera, estou tendo um problema, e creio que nao seja dificil de resolver, tenho 2 bancos de dados, 1 pdv e outro servidor, quero copiar a venda do pdv para o servidor, e estou usando esse código aqui em baixo, ele está funcionando, ele copia certo, mas ele só copia a primeira linha, as demais vendas ele nao copia, ele copia a mesma varias vezes, dependendo de quantas vezes eu chamo o bottao responsavel, me ajudem. abraço
procedure TfrmPrincipal.Button4Click(Sender: TObject);
begin
qrpdv_Tabela.Close;
qrpdv_Tabela.sql.clear;
qrpdv_Tabela.sql.add('select *from c000032');
qrpdv_tabela.open;
if qrpdv_tabela.RecordCount > 0 then
begin
try
qrservidor_tabela.close;
qrservidor_tabela.sql.clear;
qrservidor_tabela.sql.add('insert into C000032 (');
qrservidor_tabela.sql.add('CODIGO,');
qrservidor_tabela.sql.add('CODNOTA,');
qrservidor_tabela.sql.add('CODPRODUTO,');
qrservidor_tabela.sql.add('UNITARIO,');
qrservidor_tabela.sql.add('TOTAL,');
//qrservidor.sql.add('PRECO_PROMOCAO,');
qrservidor_tabela.sql.add('DATA,');
//qrservidor.sql.add('FIM_PROMOCAO,');
qrservidor_tabela.sql.add('CST,');
qrservidor_tabela.sql.add('ALIQUOTA,');
qrservidor_tabela.sql.add('SERIAL,');
qrservidor_tabela.sql.add('UNIDADE,');
qrservidor_tabela.sql.add('QTDE,');
qrservidor_tabela.sql.add('ECF_CAIXA,');
qrservidor_tabela.sql.add('CUPOM_ITEM,');
qrservidor_tabela.sql.add('MOVIMENTO_ESTOQUE');
qrservidor_tabela.sql.add(') values (');
qrservidor_tabela.sql.add(':CODIGO,');
qrservidor_tabela.sql.add(':CODNOTA,');
qrservidor_tabela.sql.add(':CODPRODUTO,');
qrservidor_tabela.sql.add(':UNITARIO,');
qrservidor_tabela.sql.add(':TOTAL,');
//qrservidor.sql.add(':PRECO_PROMOCAO,');
qrservidor_tabela.sql.add(':DATA,');
//qrservidor.sql.add(':FIM_PROMOCAO,');
qrservidor_tabela.sql.add(':CST,');
qrservidor_tabela.sql.add(':ALIQUOTA,');
qrservidor_tabela.sql.add(':SERIAL,');
qrservidor_tabela.sql.add(':UNIDADE,');
qrservidor_tabela.sql.add(':QTDE,');
qrservidor_tabela.sql.add(':ECF_CAIXA,');
qrservidor_tabela.sql.add(':CUPOM_ITEM,');
qrservidor_tabela.sql.add(':MOVIMENTO_ESTOQUE');
qrservidor_tabela.sql.add(')');
qrservidor_tabela.parambyname('CODIGO').asstring := qrpdv_tabela.fieldbyname('codigo').asstring;
qrservidor_tabela.parambyname('CODNOTA').asstring := copy(qrpdv_tabela.fieldbyname('codNOTA').asstring,1,15);
qrservidor_tabela.parambyname('CODPRODUTO').asstring := copy(qrpdv_tabela.fieldbyname('CODproduto').asstring,1,6);
qrservidor_tabela.parambyname('UNITARIO').Asfloat := qrpdv_tabela.fieldbyname('uniTARIO').asfloat;
qrservidor_tabela.parambyname('TOTAL').asfloat := qrpdv_tabela.fieldbyname('TOTAL').asfloat;
//qrservidor.parambyname('PRECO_PROMOCAO').asfloat := qrpdv_tabela.fieldbyname('preco_promocao').asfloat;
qrservidor_tabela.parambyname('DATA').asdatetime := qrpdv_tabela.fieldbyname('DATA').asdatetime;
//qrservidor.parambyname('FIM_PROMOCAO').asdatetime := qrpdv_tabela.fieldbyname('fim_promocao').asdatetime;
qrservidor_tabela.parambyname('CST').asstring := qrpdv_tabela.fieldbyname('cst').asstring;
qrservidor_tabela.parambyname('ALIQUOTA').asfloat := qrpdv_tabela.fieldbyname('aliquota').asfloat;
qrservidor_tabela.parambyname('SERIAL').asfloat := 0;
qrservidor_tabela.parambyname('UNIDADE').AsInteger := 0;
//scst := qrservidor_tabela.fieldbyname('cst').asstring;
{if (scst = '060') or
(scst = '010') or
(scst = '070') then qrpdv.Params.ParamByName('st').asSTRING := 'F'
else
if (scst = '040') or
(scst = '030') then qrpdv.Params.ParamByName('st').asSTRING := 'I'
else
if (scst = '041') or
(scst = '050') or
(scst = '051') or
(scst = '090') then qrpdv.Params.ParamByName('st').asSTRING := 'N'
else
qrpdv.ParamByName('st').asSTRING := 'T';}
qrservidor_tabela.parambyname('QTDE').asfloat := qrpdv_tabela.fieldbyname('QTDE').asfloat;
qrservidor_tabela.parambyname('ECF_CAIXA').asstring := qrpdv_tabela.fieldbyname('ECF_CAIXA').AsString;
qrservidor_tabela.parambyname('CUPOM_ITEM').asstring := qrpdv_tabela.fieldbyname('CUPOM_ITEM').AsString;
qrservidor_tabela.parambyname('MOVIMENTO_ESTOQUE').asfloat := qrpdv_tabela.fieldbyname('MOVIMENTO_ESTOQUE').Asfloat;
qrservidor_tabela.ExecSQL;
except
on E:Exception do
begin
//memo1.lines.add('PDV'+grid.CELL[0,I].ASSTRING+' ERRO - INC - PRODUTO - '+qrservidor.fieldbyname('codproduto').asstring);
qrservidor_tabela.close;
qrservidor_tabela.sql.clear;
qrservidor_tabela.sql.Add('select codigo from C000032');
qrservidor.sql.Add('where codigo = '+inttostr(StrToInt(qrpdv.fieldbyname('codproduto').asstring)));
qrservidor_tabela.open;
if qrservidor_tabela.RecordCount = 0 then bflag :=false;
end;
procedure TfrmPrincipal.Button4Click(Sender: TObject);
begin
qrpdv_Tabela.Close;
qrpdv_Tabela.sql.clear;
qrpdv_Tabela.sql.add('select *from c000032');
qrpdv_tabela.open;
if qrpdv_tabela.RecordCount > 0 then
begin
try
qrservidor_tabela.close;
qrservidor_tabela.sql.clear;
qrservidor_tabela.sql.add('insert into C000032 (');
qrservidor_tabela.sql.add('CODIGO,');
qrservidor_tabela.sql.add('CODNOTA,');
qrservidor_tabela.sql.add('CODPRODUTO,');
qrservidor_tabela.sql.add('UNITARIO,');
qrservidor_tabela.sql.add('TOTAL,');
//qrservidor.sql.add('PRECO_PROMOCAO,');
qrservidor_tabela.sql.add('DATA,');
//qrservidor.sql.add('FIM_PROMOCAO,');
qrservidor_tabela.sql.add('CST,');
qrservidor_tabela.sql.add('ALIQUOTA,');
qrservidor_tabela.sql.add('SERIAL,');
qrservidor_tabela.sql.add('UNIDADE,');
qrservidor_tabela.sql.add('QTDE,');
qrservidor_tabela.sql.add('ECF_CAIXA,');
qrservidor_tabela.sql.add('CUPOM_ITEM,');
qrservidor_tabela.sql.add('MOVIMENTO_ESTOQUE');
qrservidor_tabela.sql.add(') values (');
qrservidor_tabela.sql.add(':CODIGO,');
qrservidor_tabela.sql.add(':CODNOTA,');
qrservidor_tabela.sql.add(':CODPRODUTO,');
qrservidor_tabela.sql.add(':UNITARIO,');
qrservidor_tabela.sql.add(':TOTAL,');
//qrservidor.sql.add(':PRECO_PROMOCAO,');
qrservidor_tabela.sql.add(':DATA,');
//qrservidor.sql.add(':FIM_PROMOCAO,');
qrservidor_tabela.sql.add(':CST,');
qrservidor_tabela.sql.add(':ALIQUOTA,');
qrservidor_tabela.sql.add(':SERIAL,');
qrservidor_tabela.sql.add(':UNIDADE,');
qrservidor_tabela.sql.add(':QTDE,');
qrservidor_tabela.sql.add(':ECF_CAIXA,');
qrservidor_tabela.sql.add(':CUPOM_ITEM,');
qrservidor_tabela.sql.add(':MOVIMENTO_ESTOQUE');
qrservidor_tabela.sql.add(')');
qrservidor_tabela.parambyname('CODIGO').asstring := qrpdv_tabela.fieldbyname('codigo').asstring;
qrservidor_tabela.parambyname('CODNOTA').asstring := copy(qrpdv_tabela.fieldbyname('codNOTA').asstring,1,15);
qrservidor_tabela.parambyname('CODPRODUTO').asstring := copy(qrpdv_tabela.fieldbyname('CODproduto').asstring,1,6);
qrservidor_tabela.parambyname('UNITARIO').Asfloat := qrpdv_tabela.fieldbyname('uniTARIO').asfloat;
qrservidor_tabela.parambyname('TOTAL').asfloat := qrpdv_tabela.fieldbyname('TOTAL').asfloat;
//qrservidor.parambyname('PRECO_PROMOCAO').asfloat := qrpdv_tabela.fieldbyname('preco_promocao').asfloat;
qrservidor_tabela.parambyname('DATA').asdatetime := qrpdv_tabela.fieldbyname('DATA').asdatetime;
//qrservidor.parambyname('FIM_PROMOCAO').asdatetime := qrpdv_tabela.fieldbyname('fim_promocao').asdatetime;
qrservidor_tabela.parambyname('CST').asstring := qrpdv_tabela.fieldbyname('cst').asstring;
qrservidor_tabela.parambyname('ALIQUOTA').asfloat := qrpdv_tabela.fieldbyname('aliquota').asfloat;
qrservidor_tabela.parambyname('SERIAL').asfloat := 0;
qrservidor_tabela.parambyname('UNIDADE').AsInteger := 0;
//scst := qrservidor_tabela.fieldbyname('cst').asstring;
{if (scst = '060') or
(scst = '010') or
(scst = '070') then qrpdv.Params.ParamByName('st').asSTRING := 'F'
else
if (scst = '040') or
(scst = '030') then qrpdv.Params.ParamByName('st').asSTRING := 'I'
else
if (scst = '041') or
(scst = '050') or
(scst = '051') or
(scst = '090') then qrpdv.Params.ParamByName('st').asSTRING := 'N'
else
qrpdv.ParamByName('st').asSTRING := 'T';}
qrservidor_tabela.parambyname('QTDE').asfloat := qrpdv_tabela.fieldbyname('QTDE').asfloat;
qrservidor_tabela.parambyname('ECF_CAIXA').asstring := qrpdv_tabela.fieldbyname('ECF_CAIXA').AsString;
qrservidor_tabela.parambyname('CUPOM_ITEM').asstring := qrpdv_tabela.fieldbyname('CUPOM_ITEM').AsString;
qrservidor_tabela.parambyname('MOVIMENTO_ESTOQUE').asfloat := qrpdv_tabela.fieldbyname('MOVIMENTO_ESTOQUE').Asfloat;
qrservidor_tabela.ExecSQL;
except
on E:Exception do
begin
//memo1.lines.add('PDV'+grid.CELL[0,I].ASSTRING+' ERRO - INC - PRODUTO - '+qrservidor.fieldbyname('codproduto').asstring);
qrservidor_tabela.close;
qrservidor_tabela.sql.clear;
qrservidor_tabela.sql.Add('select codigo from C000032');
qrservidor.sql.Add('where codigo = '+inttostr(StrToInt(qrpdv.fieldbyname('codproduto').asstring)));
qrservidor_tabela.open;
if qrservidor_tabela.RecordCount = 0 then bflag :=false;
end;
Tiago Silva
Curtidas 0
Respostas
Kelson Palharini
26/08/2013
Isso está acontecendo por que você não colocou uma estrutura de repetição para ler todos os registros da sua qrpdv_tabela. Esse comando if qrpdv_tabela.RecordCount > 0 é somente pra saber se existe algum registro, ai ele vai pegar esse registro e vai dar insert na sua outra query e acabou. Vou fazer umas alterações e comentar pra você o que pode ser melhorado e qualquer coisa pode perguntar
procedure TfrmPrincipal.Button4Click(Sender: TObject);
begin
qrpdv_Tabela.Close;
qrpdv_Tabela.sql.clear;
qrpdv_Tabela.sql.add('select *from c000032');
qrpdv_tabela.open;
qrpdv_tabela.first;//Coloca o cursor no primeiro registro
while not qrpdv_tabela.eof do // Vai ler todos os registros até chegar no fim da query, se a query estiver vazia ele nem vai fazer nada
begin
try
qrservidor_tabela.close;
qrservidor_tabela.sql.clear;
qrservidor_tabela.sql.add('insert into C000032 (');
qrservidor_tabela.sql.add('CODIGO,');
qrservidor_tabela.sql.add('CODNOTA,');
qrservidor_tabela.sql.add('CODPRODUTO,');
qrservidor_tabela.sql.add('UNITARIO,');
qrservidor_tabela.sql.add('TOTAL,');
//qrservidor.sql.add('PRECO_PROMOCAO,');
qrservidor_tabela.sql.add('DATA,');
//qrservidor.sql.add('FIM_PROMOCAO,');
qrservidor_tabela.sql.add('CST,');
qrservidor_tabela.sql.add('ALIQUOTA,');
qrservidor_tabela.sql.add('SERIAL,');
qrservidor_tabela.sql.add('UNIDADE,');
qrservidor_tabela.sql.add('QTDE,');
qrservidor_tabela.sql.add('ECF_CAIXA,');
qrservidor_tabela.sql.add('CUPOM_ITEM,');
qrservidor_tabela.sql.add('MOVIMENTO_ESTOQUE');
qrservidor_tabela.sql.add(') values (');
qrservidor_tabela.sql.add(':CODIGO,');
qrservidor_tabela.sql.add(':CODNOTA,');
qrservidor_tabela.sql.add(':CODPRODUTO,');
qrservidor_tabela.sql.add(':UNITARIO,');
qrservidor_tabela.sql.add(':TOTAL,');
//qrservidor.sql.add(':PRECO_PROMOCAO,');
qrservidor_tabela.sql.add(':DATA,');
//qrservidor.sql.add(':FIM_PROMOCAO,');
qrservidor_tabela.sql.add(':CST,');
qrservidor_tabela.sql.add(':ALIQUOTA,');
qrservidor_tabela.sql.add(':SERIAL,');
qrservidor_tabela.sql.add(':UNIDADE,');
qrservidor_tabela.sql.add(':QTDE,');
qrservidor_tabela.sql.add(':ECF_CAIXA,');
qrservidor_tabela.sql.add(':CUPOM_ITEM,');
qrservidor_tabela.sql.add(':MOVIMENTO_ESTOQUE');
qrservidor_tabela.sql.add(')');
qrservidor_tabela.parambyname('CODIGO').asstring := qrpdv_tabela.fieldbyname('codigo').asstring;
qrservidor_tabela.parambyname('CODNOTA').asstring := copy(qrpdv_tabela.fieldbyname('codNOTA').asstring,1,15);
qrservidor_tabela.parambyname('CODPRODUTO').asstring := copy(qrpdv_tabela.fieldbyname('CODproduto').asstring,1,6);
qrservidor_tabela.parambyname('UNITARIO').Asfloat := qrpdv_tabela.fieldbyname('uniTARIO').asfloat;
qrservidor_tabela.parambyname('TOTAL').asfloat := qrpdv_tabela.fieldbyname('TOTAL').asfloat;
qrservidor_tabela.parambyname('DATA').asdatetime := qrpdv_tabela.fieldbyname('DATA').asdatetime;
qrservidor_tabela.parambyname('CST').asstring := qrpdv_tabela.fieldbyname('cst').asstring;
qrservidor_tabela.parambyname('ALIQUOTA').asfloat := qrpdv_tabela.fieldbyname('aliquota').asfloat;
qrservidor_tabela.parambyname('SERIAL').asfloat := 0;
qrservidor_tabela.parambyname('UNIDADE').AsInteger := 0;
//qrservidor.parambyname('PRECO_PROMOCAO').asfloat := qrpdv_tabela.fieldbyname('preco_promocao').asfloat;
//qrservidor.parambyname('FIM_PROMOCAO').asdatetime := qrpdv_tabela.fieldbyname('fim_promocao').asdatetime;
//scst := qrservidor_tabela.fieldbyname('cst').asstring;
{if (scst = '060') or
(scst = '010') or
(scst = '070') then qrpdv.Params.ParamByName('st').asSTRING := 'F'
else
if (scst = '040') or
(scst = '030') then qrpdv.Params.ParamByName('st').asSTRING := 'I'
else
if (scst = '041') or
(scst = '050') or
(scst = '051') or
(scst = '090') then qrpdv.Params.ParamByName('st').asSTRING := 'N'
else
qrpdv.ParamByName('st').asSTRING := 'T';}
qrservidor_tabela.parambyname('QTDE').asfloat := qrpdv_tabela.fieldbyname('QTDE').asfloat;
qrservidor_tabela.parambyname('ECF_CAIXA').asstring := qrpdv_tabela.fieldbyname('ECF_CAIXA').AsString;
qrservidor_tabela.parambyname('CUPOM_ITEM').asstring:= qrpdv_tabela.fieldbyname('CUPOM_ITEM').AsString;
qrservidor_tabela.parambyname('MOVIMENTO_ESTOQUE').asfloat := qrpdv_tabela.fieldbyname('MOVIMENTO_ESTOQUE').Asfloat;
qrservidor_tabela.ExecSQL;
qrpdv_tabela.Next; //Passa para o próximo registro
except
on E:Exception do
begin
//memo1.lines.add('PDV'+grid.CELL[0,I].ASSTRING+' ERRO - INC - PRODUTO - '+qrservidor.fieldbyname('codproduto').asstring);
qrservidor_tabela.close;
qrservidor_tabela.sql.clear;
qrservidor_tabela.sql.Add('select codigo from C000032');
qrservidor.sql.Add('where codigo = '+inttostr(StrToInt(qrpdv.fieldbyname('codproduto').asstring)));
qrservidor_tabela.open;
if qrservidor_tabela.RecordCount = 0 then bflag :=false;
end;
end;
end;
end;GOSTEI 0
Tiago Silva
26/08/2013
vlw mesmo meu amigao, funcionou, agora está vindo tudo, só que tem outra coisa, esse botao que criei, quando eu clicou nele mais de uma vez, ele repete os campos e a venda está duplicando, como faço para ele ler o que está la, e depois apagar ou somente deixar la mas nao repetir?
abraço
abraço
GOSTEI 0
Kelson Palharini
26/08/2013
É só você verificar se o código da venda do pdv já existe no servidor através de um select , se não existir você da o insert se existir você pula para o próximo registro. Fiz mais uma adaptação no código ficou mais ou menos, então de uma analisada e deixe ele mais adequado a sua necessidade.
procedure TfrmPrincipal.Button4Click(Sender: TObject);
begin
qrpdv_Tabela.Close;
qrpdv_Tabela.sql.clear;
qrpdv_Tabela.sql.add('select *from c000032');
qrpdv_tabela.open;
qrpdv_tabela.first;//Coloca o cursor no primeiro registro
while not qrpdv_tabela.eof do // Vai ler todos os registros até chegar no fim da query, se a query estiver vazia ele nem vai fazer nada
begin
qrservidor_tabela.close;
qrservidor_tabela.sql.clear;
//Aqui você faz um select para verificar se a nota já existe no banco, se a query estiver vazia significa que o registro não existe ai sim ele faz o insert
qrservidor_tabela.slq.text := 'Select codnota from C000032 where codigo = ' + qrpdv_Tabela.FieldByName('Codigo').AsString;
if qrservidor_tabela.isEmpty then
begin
try
qrservidor_tabela.close;
qrservidor_tabela.sql.clear;
qrservidor_tabela.sql.add('insert into C000032 (');
qrservidor_tabela.sql.add('CODIGO,');
qrservidor_tabela.sql.add('CODNOTA,');
qrservidor_tabela.sql.add('CODPRODUTO,');
qrservidor_tabela.sql.add('UNITARIO,');
qrservidor_tabela.sql.add('TOTAL,');
//qrservidor.sql.add('PRECO_PROMOCAO,');
qrservidor_tabela.sql.add('DATA,');
//qrservidor.sql.add('FIM_PROMOCAO,');
qrservidor_tabela.sql.add('CST,');
qrservidor_tabela.sql.add('ALIQUOTA,');
qrservidor_tabela.sql.add('SERIAL,');
qrservidor_tabela.sql.add('UNIDADE,');
qrservidor_tabela.sql.add('QTDE,');
qrservidor_tabela.sql.add('ECF_CAIXA,');
qrservidor_tabela.sql.add('CUPOM_ITEM,');
qrservidor_tabela.sql.add('MOVIMENTO_ESTOQUE');
qrservidor_tabela.sql.add(') values (');
qrservidor_tabela.sql.add(':CODIGO,');
qrservidor_tabela.sql.add(':CODNOTA,');
qrservidor_tabela.sql.add(':CODPRODUTO,');
qrservidor_tabela.sql.add(':UNITARIO,');
qrservidor_tabela.sql.add(':TOTAL,');
//qrservidor.sql.add(':PRECO_PROMOCAO,');
qrservidor_tabela.sql.add(':DATA,');
//qrservidor.sql.add(':FIM_PROMOCAO,');
qrservidor_tabela.sql.add(':CST,');
qrservidor_tabela.sql.add(':ALIQUOTA,');
qrservidor_tabela.sql.add(':SERIAL,');
qrservidor_tabela.sql.add(':UNIDADE,');
qrservidor_tabela.sql.add(':QTDE,');
qrservidor_tabela.sql.add(':ECF_CAIXA,');
qrservidor_tabela.sql.add(':CUPOM_ITEM,');
qrservidor_tabela.sql.add(':MOVIMENTO_ESTOQUE');
qrservidor_tabela.sql.add(')');
qrservidor_tabela.parambyname('CODIGO').asstring := qrpdv_tabela.fieldbyname('codigo').asstring;
qrservidor_tabela.parambyname('CODNOTA').asstring := copy(qrpdv_tabela.fieldbyname('codNOTA').asstring,1,15);
qrservidor_tabela.parambyname('CODPRODUTO').asstring := copy(qrpdv_tabela.fieldbyname('CODproduto').asstring,1,6);
qrservidor_tabela.parambyname('UNITARIO').Asfloat := qrpdv_tabela.fieldbyname('uniTARIO').asfloat;
qrservidor_tabela.parambyname('TOTAL').asfloat := qrpdv_tabela.fieldbyname('TOTAL').asfloat;
qrservidor_tabela.parambyname('DATA').asdatetime := qrpdv_tabela.fieldbyname('DATA').asdatetime;
qrservidor_tabela.parambyname('CST').asstring := qrpdv_tabela.fieldbyname('cst').asstring;
qrservidor_tabela.parambyname('ALIQUOTA').asfloat := qrpdv_tabela.fieldbyname('aliquota').asfloat;
qrservidor_tabela.parambyname('SERIAL').asfloat := 0;
qrservidor_tabela.parambyname('UNIDADE').AsInteger := 0;
//qrservidor.parambyname('PRECO_PROMOCAO').asfloat := qrpdv_tabela.fieldbyname('preco_promocao').asfloat;
//qrservidor.parambyname('FIM_PROMOCAO').asdatetime := qrpdv_tabela.fieldbyname('fim_promocao').asdatetime;
//scst := qrservidor_tabela.fieldbyname('cst').asstring;
{if (scst = '060') or
(scst = '010') or
(scst = '070') then qrpdv.Params.ParamByName('st').asSTRING := 'F'
else
if (scst = '040') or
(scst = '030') then qrpdv.Params.ParamByName('st').asSTRING := 'I'
else
if (scst = '041') or
(scst = '050') or
(scst = '051') or
(scst = '090') then qrpdv.Params.ParamByName('st').asSTRING := 'N'
else
qrpdv.ParamByName('st').asSTRING := 'T';}
qrservidor_tabela.parambyname('QTDE').asfloat := qrpdv_tabela.fieldbyname('QTDE').asfloat;
qrservidor_tabela.parambyname('ECF_CAIXA').asstring := qrpdv_tabela.fieldbyname('ECF_CAIXA').AsString;
qrservidor_tabela.parambyname('CUPOM_ITEM').asstring:= qrpdv_tabela.fieldbyname('CUPOM_ITEM').AsString;
qrservidor_tabela.parambyname('MOVIMENTO_ESTOQUE').asfloat := qrpdv_tabela.fieldbyname('MOVIMENTO_ESTOQUE').Asfloat;
qrservidor_tabela.ExecSQL;
except
on E:Exception do
begin
//memo1.lines.add('PDV'+grid.CELL[0,I].ASSTRING+' ERRO - INC - PRODUTO - '+qrservidor.fieldbyname('codproduto').asstring);
qrservidor_tabela.close;
qrservidor_tabela.sql.clear;
qrservidor_tabela.sql.Add('select codigo from C000032');
qrservidor.sql.Add('where codigo = '+inttostr(StrToInt(qrpdv.fieldbyname('codproduto').asstring)));
qrservidor_tabela.open;
if qrservidor_tabela.RecordCount = 0 then bflag :=false;
end;
end;
end;
qrpdv_tabela.Next; //Passa para o próximo registro
end;
end;
GOSTEI 0
Kelson Palharini
26/08/2013
É só você verificar se o código da venda do pdv já existe no servidor através de um select , se não existir você da o insert se existir você pula para o próximo registro. Fiz mais uma adaptação no código ficou mais ou menos, então de uma analisada e deixe ele mais adequado a sua necessidade.
procedure TfrmPrincipal.Button4Click(Sender: TObject);
begin
qrpdv_Tabela.Close;
qrpdv_Tabela.sql.clear;
qrpdv_Tabela.sql.add('select *from c000032');
qrpdv_tabela.open;
qrpdv_tabela.first;//Coloca o cursor no primeiro registro
while not qrpdv_tabela.eof do // Vai ler todos os registros até chegar no fim da query, se a query estiver vazia ele nem vai fazer nada
begin
qrservidor_tabela.close;
qrservidor_tabela.sql.clear;
//Aqui você faz um select para verificar se a nota já existe no banco, se a query estiver vazia significa que o registro não existe ai sim ele faz o insert
qrservidor_tabela.slq.text := 'Select codnota from C000032 where codigo = ' + qrpdv_Tabela.FieldByName('Codigo').AsString;
qrservidor_tabela.Open; // Esqueci de abrir a tabela
if qrservidor_tabela.isEmpty then
begin
try
qrservidor_tabela.close;
qrservidor_tabela.sql.clear;
qrservidor_tabela.sql.add('insert into C000032 (');
qrservidor_tabela.sql.add('CODIGO,');
qrservidor_tabela.sql.add('CODNOTA,');
qrservidor_tabela.sql.add('CODPRODUTO,');
qrservidor_tabela.sql.add('UNITARIO,');
qrservidor_tabela.sql.add('TOTAL,');
//qrservidor.sql.add('PRECO_PROMOCAO,');
qrservidor_tabela.sql.add('DATA,');
//qrservidor.sql.add('FIM_PROMOCAO,');
qrservidor_tabela.sql.add('CST,');
qrservidor_tabela.sql.add('ALIQUOTA,');
qrservidor_tabela.sql.add('SERIAL,');
qrservidor_tabela.sql.add('UNIDADE,');
qrservidor_tabela.sql.add('QTDE,');
qrservidor_tabela.sql.add('ECF_CAIXA,');
qrservidor_tabela.sql.add('CUPOM_ITEM,');
qrservidor_tabela.sql.add('MOVIMENTO_ESTOQUE');
qrservidor_tabela.sql.add(') values (');
qrservidor_tabela.sql.add(':CODIGO,');
qrservidor_tabela.sql.add(':CODNOTA,');
qrservidor_tabela.sql.add(':CODPRODUTO,');
qrservidor_tabela.sql.add(':UNITARIO,');
qrservidor_tabela.sql.add(':TOTAL,');
//qrservidor.sql.add(':PRECO_PROMOCAO,');
qrservidor_tabela.sql.add(':DATA,');
//qrservidor.sql.add(':FIM_PROMOCAO,');
qrservidor_tabela.sql.add(':CST,');
qrservidor_tabela.sql.add(':ALIQUOTA,');
qrservidor_tabela.sql.add(':SERIAL,');
qrservidor_tabela.sql.add(':UNIDADE,');
qrservidor_tabela.sql.add(':QTDE,');
qrservidor_tabela.sql.add(':ECF_CAIXA,');
qrservidor_tabela.sql.add(':CUPOM_ITEM,');
qrservidor_tabela.sql.add(':MOVIMENTO_ESTOQUE');
qrservidor_tabela.sql.add(')');
qrservidor_tabela.parambyname('CODIGO').asstring := qrpdv_tabela.fieldbyname('codigo').asstring;
qrservidor_tabela.parambyname('CODNOTA').asstring := copy(qrpdv_tabela.fieldbyname('codNOTA').asstring,1,15);
qrservidor_tabela.parambyname('CODPRODUTO').asstring := copy(qrpdv_tabela.fieldbyname('CODproduto').asstring,1,6);
qrservidor_tabela.parambyname('UNITARIO').Asfloat := qrpdv_tabela.fieldbyname('uniTARIO').asfloat;
qrservidor_tabela.parambyname('TOTAL').asfloat := qrpdv_tabela.fieldbyname('TOTAL').asfloat;
qrservidor_tabela.parambyname('DATA').asdatetime := qrpdv_tabela.fieldbyname('DATA').asdatetime;
qrservidor_tabela.parambyname('CST').asstring := qrpdv_tabela.fieldbyname('cst').asstring;
qrservidor_tabela.parambyname('ALIQUOTA').asfloat := qrpdv_tabela.fieldbyname('aliquota').asfloat;
qrservidor_tabela.parambyname('SERIAL').asfloat := 0;
qrservidor_tabela.parambyname('UNIDADE').AsInteger := 0;
//qrservidor.parambyname('PRECO_PROMOCAO').asfloat := qrpdv_tabela.fieldbyname('preco_promocao').asfloat;
//qrservidor.parambyname('FIM_PROMOCAO').asdatetime := qrpdv_tabela.fieldbyname('fim_promocao').asdatetime;
//scst := qrservidor_tabela.fieldbyname('cst').asstring;
{if (scst = '060') or
(scst = '010') or
(scst = '070') then qrpdv.Params.ParamByName('st').asSTRING := 'F'
else
if (scst = '040') or
(scst = '030') then qrpdv.Params.ParamByName('st').asSTRING := 'I'
else
if (scst = '041') or
(scst = '050') or
(scst = '051') or
(scst = '090') then qrpdv.Params.ParamByName('st').asSTRING := 'N'
else
qrpdv.ParamByName('st').asSTRING := 'T';}
qrservidor_tabela.parambyname('QTDE').asfloat := qrpdv_tabela.fieldbyname('QTDE').asfloat;
qrservidor_tabela.parambyname('ECF_CAIXA').asstring := qrpdv_tabela.fieldbyname('ECF_CAIXA').AsString;
qrservidor_tabela.parambyname('CUPOM_ITEM').asstring:= qrpdv_tabela.fieldbyname('CUPOM_ITEM').AsString;
qrservidor_tabela.parambyname('MOVIMENTO_ESTOQUE').asfloat := qrpdv_tabela.fieldbyname('MOVIMENTO_ESTOQUE').Asfloat;
qrservidor_tabela.ExecSQL;
except
on E:Exception do
begin
//memo1.lines.add('PDV'+grid.CELL[0,I].ASSTRING+' ERRO - INC - PRODUTO - '+qrservidor.fieldbyname('codproduto').asstring);
qrservidor_tabela.close;
qrservidor_tabela.sql.clear;
qrservidor_tabela.sql.Add('select codigo from C000032');
qrservidor.sql.Add('where codigo = '+inttostr(StrToInt(qrpdv.fieldbyname('codproduto').asstring)));
qrservidor_tabela.open;
if qrservidor_tabela.RecordCount = 0 then bflag :=false;
end;
end;
end;
qrpdv_tabela.Next; //Passa para o próximo registro
end;
end;
GOSTEI 0
Tiago Silva
26/08/2013
parabéns meu amigo,
show de bola, obrigado por inserir também os comentarios, pois vai me ajudar a entender.
grande abraço.
show de bola, obrigado por inserir também os comentarios, pois vai me ajudar a entender.
grande abraço.
GOSTEI 0
Tiago Silva
26/08/2013
estou com outro problema, em outra tabela, preciso fazer a mesma coisa só que com campos diferentes. estou fazendo assim
nao sei se está certo, estou acompanhado a sua linha de raciocinio, e está dando essa mensagem aqui quando clico no botao ~~>> qrpdv : field 'codigo' not found.
sabe o que pode ser?
segue a query abaixo.
procedure TfrmPrincipal.Button5Click(Sender: TObject);
begin
qrpdv_Tabela.Close;
qrpdv_Tabela.sql.clear;
qrpdv_Tabela.sql.add('select *from c000048');
qrpdv_tabela.open;
qrpdv_tabela.first;//Coloca o cursor no primeiro registro
while not qrpdv_tabela.eof do // Vai ler todos os registros até chegar no fim da query, se a query estiver vazia ele nem vai fazer nada
begin
qrservidor_tabela.close;
qrservidor_tabela.sql.clear;
//Aqui você faz um select para verificar se a nota já existe no banco, se a query estiver vazia significa que o registro não existe ai sim ele faz o insert
qrservidor_tabela.sql.text := 'Select codcaixa from C000048 where codigo = ' + qrpdv_Tabela.FieldByName('Codigo').AsString;
qrservidor_tabela.Open;
if qrservidor_tabela.isEmpty then
begin
try
qrservidor_tabela.close;
qrservidor_tabela.sql.clear;
qrservidor_tabela.sql.add('insert into C000048 (');
qrservidor_tabela.sql.add('CODIGO,');
qrservidor_tabela.sql.add('CODCAIXA,');
qrservidor_tabela.sql.add('MEIO_DINHEIRO,');
qrservidor_tabela.sql.add('MEIO_CHEQUEAV,');
qrservidor_tabela.sql.add('MEIO_CHEQUEAP,');
//qrservidor.sql.add('PRECO_PROMOCAO,');
qrservidor_tabela.sql.add('DATA,');
//qrservidor.sql.add('FIM_PROMOCAO,');
qrservidor_tabela.sql.add('MEIO_CARTAOCRED,');
qrservidor_tabela.sql.add('MEIO_CARTAODEB,');
qrservidor_tabela.sql.add('MEIO_CREDIARIO,');
qrservidor_tabela.sql.add('SUBTOTAL,');
qrservidor_tabela.sql.add('DESCONTO,');
qrservidor_tabela.sql.add('ACRESCIMO,');
qrservidor_tabela.sql.add('TOTAL,');
qrservidor_tabela.sql.add('CUPOM_FISCAL');
qrservidor_tabela.sql.add('numero_cupom_fiscal');
qrservidor_tabela.sql.add('SITUACAO');
qrservidor_tabela.sql.add('atacado_varejo');
qrservidor_tabela.sql.add(') values (');
qrservidor_tabela.sql.add('CODIGO,');
qrservidor_tabela.sql.add('CODCAIXA,');
qrservidor_tabela.sql.add('MEIO_DINHEIRO,');
qrservidor_tabela.sql.add('MEIO_CHEQUEAV,');
qrservidor_tabela.sql.add('MEIO_CHEQUEAP,');
//qrservidor.sql.add('PRECO_PROMOCAO,');
qrservidor_tabela.sql.add('DATA,');
//qrservidor.sql.add('FIM_PROMOCAO,');
qrservidor_tabela.sql.add('MEIO_CARTAOCRED,');
qrservidor_tabela.sql.add('MEIO_CARTAODEB,');
qrservidor_tabela.sql.add('MEIO_CREDIARIO,');
qrservidor_tabela.sql.add('SUBTOTAL,');
qrservidor_tabela.sql.add('DESCONTO,');
qrservidor_tabela.sql.add('ACRESCIMO,');
qrservidor_tabela.sql.add('TOTAL,');
qrservidor_tabela.sql.add('CUPOM_FISCAL');
qrservidor_tabela.sql.add('numero_cupom_fiscal');
qrservidor_tabela.sql.add('SITUACAO');
qrservidor_tabela.sql.add('atacado_varejo');
qrservidor_tabela.sql.add(')');
qrservidor_tabela.parambyname('CODIGO').asstring := qrpdv_tabela.fieldbyname('codigo').asstring;
qrservidor_tabela.parambyname('CODCAIXA').asstring := copy(qrpdv_tabela.fieldbyname('codCAIXA').asstring,1,6);
qrservidor_tabela.parambyname('MEIO_DINHEIRO').asfloat := qrpdv_tabela.fieldbyname('MEIO_DINHEIRO').asfloat;
qrservidor_tabela.parambyname('MEIO_CHEQUEAV').Asfloat := qrpdv_tabela.fieldbyname('MEIO_CHEQUEAV').asfloat;
qrservidor_tabela.parambyname('MEIO_CHEQUEAP').asfloat := qrpdv_tabela.fieldbyname('MEIO_CHEQUEAP').asfloat;
qrservidor_tabela.parambyname('DATA').asdatetime := qrpdv_tabela.fieldbyname('DATA').asdatetime;
qrservidor_tabela.parambyname('MEIO_CARTAOCRED').asfloat := qrpdv_tabela.fieldbyname('MEIO_CARTAOCRED').asfloat;
qrservidor_tabela.parambyname('MEIO_CARTAODEB').asfloat := qrpdv_tabela.fieldbyname('MEIO_CARTAODEB').asfloat;
qrservidor_tabela.parambyname('MEIO_CREDIARIO').asfloat := qrpdv_tabela.fieldbyname('MEIO_CREDIARIO').asfloat;
qrservidor_tabela.parambyname('SUBTOTAL').asfloat := qrpdv_tabela.fieldbyname('SUBTOTAL').asfloat;
qrservidor_tabela.parambyname('DESCONTO').asfloat := qrpdv_tabela.fieldbyname('DESCONTO').asfloat;
qrservidor_tabela.parambyname('ACRESCIMO').asfloat := qrpdv_tabela.fieldbyname('ACRESCIMO').asfloat;
qrservidor_tabela.parambyname('TOTAL').asfloat := qrpdv_tabela.fieldbyname('TOTAL').asfloat;
qrservidor_tabela.parambyname('CUPOM_FISCAL').asInteger := qrpdv_tabela.fieldbyname('CUPOM_FISCAL').AsInteger ;
qrservidor_tabela.parambyname('NUMERO_CUPOM_FISCAL').asstring := qrpdv_tabela.fieldbyname('NUMERO_CUPOM_FISCAL').asstring;
qrservidor_tabela.parambyname('SITUACAO').asinteger := qrpdv_tabela.fieldbyname('SITUACAO').asinteger;
qrservidor_tabela.parambyname('atacado_varejo').asinteger := qrpdv_tabela.fieldbyname('atacado_varejo').asinteger;
//qrservidor.parambyname('PRECO_PROMOCAO').asfloat := qrpdv_tabela.fieldbyname('preco_promocao').asfloat;
//qrservidor.parambyname('FIM_PROMOCAO').asdatetime := qrpdv_tabela.fieldbyname('fim_promocao').asdatetime;
//scst := qrservidor_tabela.fieldbyname('cst').asstring;
{if (scst = '060') or
(scst = '010') or
(scst = '070') then qrpdv.Params.ParamByName('st').asSTRING := 'F'
else
if (scst = '040') or
(scst = '030') then qrpdv.Params.ParamByName('st').asSTRING := 'I'
else
if (scst = '041') or
(scst = '050') or
(scst = '051') or
(scst = '090') then qrpdv.Params.ParamByName('st').asSTRING := 'N'
else
qrpdv.ParamByName('st').asSTRING := 'T';}
//qrservidor_tabela.parambyname('QTDE').asfloat := qrpdv_tabela.fieldbyname('QTDE').asfloat;
//qrservidor_tabela.parambyname('ECF_CAIXA').asstring := qrpdv_tabela.fieldbyname('ECF_CAIXA').AsString;
//qrservidor_tabela.parambyname('CUPOM_ITEM').asstring:= qrpdv_tabela.fieldbyname('CUPOM_ITEM').AsString;
//qrservidor_tabela.parambyname('MOVIMENTO_ESTOQUE').asfloat := qrpdv_tabela.fieldbyname('MOVIMENTO_ESTOQUE').Asfloat;
qrservidor_tabela.ExecSQL;
except
on E:Exception do
begin
//memo1.lines.add('PDV'+grid.CELL[0,I].ASSTRING+' ERRO - INC - PRODUTO - '+qrservidor.fieldbyname('codvendedor').asstring);
qrservidor_tabela.close;
qrservidor_tabela.sql.clear;
qrservidor_tabela.sql.Add('select codigo from C000048');
qrservidor.sql.Add('where codigo = '+inttostr(StrToInt(qrpdv.fieldbyname('codigo').asstring)));
qrservidor_tabela.open;
if qrservidor_tabela.RecordCount = 0 then bflag :=false;
end;
end;
end;
qrpdv_tabela.Next; //Passa para o próximo registro
end;
end;
nao sei se está certo, estou acompanhado a sua linha de raciocinio, e está dando essa mensagem aqui quando clico no botao ~~>> qrpdv : field 'codigo' not found.
sabe o que pode ser?
segue a query abaixo.
procedure TfrmPrincipal.Button5Click(Sender: TObject);
begin
qrpdv_Tabela.Close;
qrpdv_Tabela.sql.clear;
qrpdv_Tabela.sql.add('select *from c000048');
qrpdv_tabela.open;
qrpdv_tabela.first;//Coloca o cursor no primeiro registro
while not qrpdv_tabela.eof do // Vai ler todos os registros até chegar no fim da query, se a query estiver vazia ele nem vai fazer nada
begin
qrservidor_tabela.close;
qrservidor_tabela.sql.clear;
//Aqui você faz um select para verificar se a nota já existe no banco, se a query estiver vazia significa que o registro não existe ai sim ele faz o insert
qrservidor_tabela.sql.text := 'Select codcaixa from C000048 where codigo = ' + qrpdv_Tabela.FieldByName('Codigo').AsString;
qrservidor_tabela.Open;
if qrservidor_tabela.isEmpty then
begin
try
qrservidor_tabela.close;
qrservidor_tabela.sql.clear;
qrservidor_tabela.sql.add('insert into C000048 (');
qrservidor_tabela.sql.add('CODIGO,');
qrservidor_tabela.sql.add('CODCAIXA,');
qrservidor_tabela.sql.add('MEIO_DINHEIRO,');
qrservidor_tabela.sql.add('MEIO_CHEQUEAV,');
qrservidor_tabela.sql.add('MEIO_CHEQUEAP,');
//qrservidor.sql.add('PRECO_PROMOCAO,');
qrservidor_tabela.sql.add('DATA,');
//qrservidor.sql.add('FIM_PROMOCAO,');
qrservidor_tabela.sql.add('MEIO_CARTAOCRED,');
qrservidor_tabela.sql.add('MEIO_CARTAODEB,');
qrservidor_tabela.sql.add('MEIO_CREDIARIO,');
qrservidor_tabela.sql.add('SUBTOTAL,');
qrservidor_tabela.sql.add('DESCONTO,');
qrservidor_tabela.sql.add('ACRESCIMO,');
qrservidor_tabela.sql.add('TOTAL,');
qrservidor_tabela.sql.add('CUPOM_FISCAL');
qrservidor_tabela.sql.add('numero_cupom_fiscal');
qrservidor_tabela.sql.add('SITUACAO');
qrservidor_tabela.sql.add('atacado_varejo');
qrservidor_tabela.sql.add(') values (');
qrservidor_tabela.sql.add('CODIGO,');
qrservidor_tabela.sql.add('CODCAIXA,');
qrservidor_tabela.sql.add('MEIO_DINHEIRO,');
qrservidor_tabela.sql.add('MEIO_CHEQUEAV,');
qrservidor_tabela.sql.add('MEIO_CHEQUEAP,');
//qrservidor.sql.add('PRECO_PROMOCAO,');
qrservidor_tabela.sql.add('DATA,');
//qrservidor.sql.add('FIM_PROMOCAO,');
qrservidor_tabela.sql.add('MEIO_CARTAOCRED,');
qrservidor_tabela.sql.add('MEIO_CARTAODEB,');
qrservidor_tabela.sql.add('MEIO_CREDIARIO,');
qrservidor_tabela.sql.add('SUBTOTAL,');
qrservidor_tabela.sql.add('DESCONTO,');
qrservidor_tabela.sql.add('ACRESCIMO,');
qrservidor_tabela.sql.add('TOTAL,');
qrservidor_tabela.sql.add('CUPOM_FISCAL');
qrservidor_tabela.sql.add('numero_cupom_fiscal');
qrservidor_tabela.sql.add('SITUACAO');
qrservidor_tabela.sql.add('atacado_varejo');
qrservidor_tabela.sql.add(')');
qrservidor_tabela.parambyname('CODIGO').asstring := qrpdv_tabela.fieldbyname('codigo').asstring;
qrservidor_tabela.parambyname('CODCAIXA').asstring := copy(qrpdv_tabela.fieldbyname('codCAIXA').asstring,1,6);
qrservidor_tabela.parambyname('MEIO_DINHEIRO').asfloat := qrpdv_tabela.fieldbyname('MEIO_DINHEIRO').asfloat;
qrservidor_tabela.parambyname('MEIO_CHEQUEAV').Asfloat := qrpdv_tabela.fieldbyname('MEIO_CHEQUEAV').asfloat;
qrservidor_tabela.parambyname('MEIO_CHEQUEAP').asfloat := qrpdv_tabela.fieldbyname('MEIO_CHEQUEAP').asfloat;
qrservidor_tabela.parambyname('DATA').asdatetime := qrpdv_tabela.fieldbyname('DATA').asdatetime;
qrservidor_tabela.parambyname('MEIO_CARTAOCRED').asfloat := qrpdv_tabela.fieldbyname('MEIO_CARTAOCRED').asfloat;
qrservidor_tabela.parambyname('MEIO_CARTAODEB').asfloat := qrpdv_tabela.fieldbyname('MEIO_CARTAODEB').asfloat;
qrservidor_tabela.parambyname('MEIO_CREDIARIO').asfloat := qrpdv_tabela.fieldbyname('MEIO_CREDIARIO').asfloat;
qrservidor_tabela.parambyname('SUBTOTAL').asfloat := qrpdv_tabela.fieldbyname('SUBTOTAL').asfloat;
qrservidor_tabela.parambyname('DESCONTO').asfloat := qrpdv_tabela.fieldbyname('DESCONTO').asfloat;
qrservidor_tabela.parambyname('ACRESCIMO').asfloat := qrpdv_tabela.fieldbyname('ACRESCIMO').asfloat;
qrservidor_tabela.parambyname('TOTAL').asfloat := qrpdv_tabela.fieldbyname('TOTAL').asfloat;
qrservidor_tabela.parambyname('CUPOM_FISCAL').asInteger := qrpdv_tabela.fieldbyname('CUPOM_FISCAL').AsInteger ;
qrservidor_tabela.parambyname('NUMERO_CUPOM_FISCAL').asstring := qrpdv_tabela.fieldbyname('NUMERO_CUPOM_FISCAL').asstring;
qrservidor_tabela.parambyname('SITUACAO').asinteger := qrpdv_tabela.fieldbyname('SITUACAO').asinteger;
qrservidor_tabela.parambyname('atacado_varejo').asinteger := qrpdv_tabela.fieldbyname('atacado_varejo').asinteger;
//qrservidor.parambyname('PRECO_PROMOCAO').asfloat := qrpdv_tabela.fieldbyname('preco_promocao').asfloat;
//qrservidor.parambyname('FIM_PROMOCAO').asdatetime := qrpdv_tabela.fieldbyname('fim_promocao').asdatetime;
//scst := qrservidor_tabela.fieldbyname('cst').asstring;
{if (scst = '060') or
(scst = '010') or
(scst = '070') then qrpdv.Params.ParamByName('st').asSTRING := 'F'
else
if (scst = '040') or
(scst = '030') then qrpdv.Params.ParamByName('st').asSTRING := 'I'
else
if (scst = '041') or
(scst = '050') or
(scst = '051') or
(scst = '090') then qrpdv.Params.ParamByName('st').asSTRING := 'N'
else
qrpdv.ParamByName('st').asSTRING := 'T';}
//qrservidor_tabela.parambyname('QTDE').asfloat := qrpdv_tabela.fieldbyname('QTDE').asfloat;
//qrservidor_tabela.parambyname('ECF_CAIXA').asstring := qrpdv_tabela.fieldbyname('ECF_CAIXA').AsString;
//qrservidor_tabela.parambyname('CUPOM_ITEM').asstring:= qrpdv_tabela.fieldbyname('CUPOM_ITEM').AsString;
//qrservidor_tabela.parambyname('MOVIMENTO_ESTOQUE').asfloat := qrpdv_tabela.fieldbyname('MOVIMENTO_ESTOQUE').Asfloat;
qrservidor_tabela.ExecSQL;
except
on E:Exception do
begin
//memo1.lines.add('PDV'+grid.CELL[0,I].ASSTRING+' ERRO - INC - PRODUTO - '+qrservidor.fieldbyname('codvendedor').asstring);
qrservidor_tabela.close;
qrservidor_tabela.sql.clear;
qrservidor_tabela.sql.Add('select codigo from C000048');
qrservidor.sql.Add('where codigo = '+inttostr(StrToInt(qrpdv.fieldbyname('codigo').asstring)));
qrservidor_tabela.open;
if qrservidor_tabela.RecordCount = 0 then bflag :=false;
end;
end;
end;
qrpdv_tabela.Next; //Passa para o próximo registro
end;
end;
GOSTEI 0
Tiago Silva
26/08/2013
alguem me ajuda galera? alguma solução?
abraço
abraço
GOSTEI 0
Kelson Palharini
26/08/2013
Nessa tabela c000048 não deve ter o campo código.
GOSTEI 0
Kelson Palharini
26/08/2013
Nessa tabela c000048 não deve ter o campo código.
Ou provavelmente está vazia.
GOSTEI 0
Tiago Silva
26/08/2013
pior que tem o campo codigo sim,
tem esses campos aqui no bd
qrservidor_tabela.close;
qrservidor_tabela.sql.clear;
qrservidor_tabela.sql.add('insert into C000048 (');
qrservidor_tabela.sql.add('CODIGO,');
qrservidor_tabela.sql.add('CODCAIXA,');
qrservidor_tabela.sql.add('MEIO_DINHEIRO,');
qrservidor_tabela.sql.add('MEIO_CHEQUEAV,');
qrservidor_tabela.sql.add('MEIO_CHEQUEAP,');
//qrservidor.sql.add('PRECO_PROMOCAO,');
qrservidor_tabela.sql.add('DATA,');
//qrservidor.sql.add('FIM_PROMOCAO,');
qrservidor_tabela.sql.add('MEIO_CARTAOCRED,');
qrservidor_tabela.sql.add('MEIO_CARTAODEB,');
qrservidor_tabela.sql.add('MEIO_CREDIARIO,');
qrservidor_tabela.sql.add('SUBTOTAL,');
qrservidor_tabela.sql.add('DESCONTO,');
qrservidor_tabela.sql.add('ACRESCIMO,');
qrservidor_tabela.sql.add('TOTAL,');
qrservidor_tabela.sql.add('CUPOM_FISCAL');
qrservidor_tabela.sql.add('numero_cupom_fiscal');
qrservidor_tabela.sql.add('SITUACAO');
qrservidor_tabela.sql.add('atacado_varejo');
nas duas tabelas, tem esse campo com a mesma estrura, e na tabela do pdv tem venda, ou seja está cheia todos os campos, agora na tabela servidor está vazia, pois vai ser o primeiro insert.
tem esses campos aqui no bd
qrservidor_tabela.close;
qrservidor_tabela.sql.clear;
qrservidor_tabela.sql.add('insert into C000048 (');
qrservidor_tabela.sql.add('CODIGO,');
qrservidor_tabela.sql.add('CODCAIXA,');
qrservidor_tabela.sql.add('MEIO_DINHEIRO,');
qrservidor_tabela.sql.add('MEIO_CHEQUEAV,');
qrservidor_tabela.sql.add('MEIO_CHEQUEAP,');
//qrservidor.sql.add('PRECO_PROMOCAO,');
qrservidor_tabela.sql.add('DATA,');
//qrservidor.sql.add('FIM_PROMOCAO,');
qrservidor_tabela.sql.add('MEIO_CARTAOCRED,');
qrservidor_tabela.sql.add('MEIO_CARTAODEB,');
qrservidor_tabela.sql.add('MEIO_CREDIARIO,');
qrservidor_tabela.sql.add('SUBTOTAL,');
qrservidor_tabela.sql.add('DESCONTO,');
qrservidor_tabela.sql.add('ACRESCIMO,');
qrservidor_tabela.sql.add('TOTAL,');
qrservidor_tabela.sql.add('CUPOM_FISCAL');
qrservidor_tabela.sql.add('numero_cupom_fiscal');
qrservidor_tabela.sql.add('SITUACAO');
qrservidor_tabela.sql.add('atacado_varejo');
nas duas tabelas, tem esse campo com a mesma estrura, e na tabela do pdv tem venda, ou seja está cheia todos os campos, agora na tabela servidor está vazia, pois vai ser o primeiro insert.
GOSTEI 0
Kelson Palharini
26/08/2013
Acompanha comigo depois você vai debugar ai e vai ver com mais clareza o que está acontecendo.
Você abre a qrpdv_Tabela com o seguinte comando:
qrpdv_Tabela.sql.add('select *from c000048');
qrpdv_Tabela.open;
Entendendo que você ao usar * em uma consulta seleciona todos os campos da tabela, se existir o campo código ele vai aparecer na query. Depois você vem verificar se o registro já consta na qrservidor_tabela usando o seguinte comando:
qrservidor_tabela.sql.text := 'Select codcaixa from C000048 where codigo = ' + qrpdv_Tabela.FieldByName('Codigo').AsString;
Sendo que nesse comando você já utiliza a leitura do primeiro registro que vem na qrpdv_Tabela no campo Codigo nessa parte qrpdv_Tabela.FieldByName('Codigo').AsString; . Com certeza ao chegar nessa linha que o compilador gera esse erro que você nos passou qrpdv : field 'codigo' not found.
Ai chega o que te falei nesse momento ele vai te dar essa mensagem somente quando:
1º O select está direcionado para a tabela errada e não existe esse campo nessa tabela;
2º Não houver retorno de dados ao executar o comando SQL;
3º Ou o campo chave Codigo está com outro nome na tabela, ou não existir;
Agora algumas perguntas essa tabela C000048 é fixa ou temporária? Se for fixa você tentou executar esse sql 'select *from c000048' direto do seu SGDB ?
Senão for fixa já tentou despejar esse sql em um DBGrid e ver quais as informações que o Select lhe retorna pra ver se esse campo realmente existe?
O banco que você está trabalhando é o correto? Você as vezes criou o campo em um banco de dados e está usando outro ao debugar no delphi;
Você abre a qrpdv_Tabela com o seguinte comando:
qrpdv_Tabela.sql.add('select *from c000048');
qrpdv_Tabela.open;
Entendendo que você ao usar * em uma consulta seleciona todos os campos da tabela, se existir o campo código ele vai aparecer na query. Depois você vem verificar se o registro já consta na qrservidor_tabela usando o seguinte comando:
qrservidor_tabela.sql.text := 'Select codcaixa from C000048 where codigo = ' + qrpdv_Tabela.FieldByName('Codigo').AsString;
Sendo que nesse comando você já utiliza a leitura do primeiro registro que vem na qrpdv_Tabela no campo Codigo nessa parte qrpdv_Tabela.FieldByName('Codigo').AsString; . Com certeza ao chegar nessa linha que o compilador gera esse erro que você nos passou qrpdv : field 'codigo' not found.
Ai chega o que te falei nesse momento ele vai te dar essa mensagem somente quando:
1º O select está direcionado para a tabela errada e não existe esse campo nessa tabela;
2º Não houver retorno de dados ao executar o comando SQL;
3º Ou o campo chave Codigo está com outro nome na tabela, ou não existir;
Agora algumas perguntas essa tabela C000048 é fixa ou temporária? Se for fixa você tentou executar esse sql 'select *from c000048' direto do seu SGDB ?
Senão for fixa já tentou despejar esse sql em um DBGrid e ver quais as informações que o Select lhe retorna pra ver se esse campo realmente existe?
O banco que você está trabalhando é o correto? Você as vezes criou o campo em um banco de dados e está usando outro ao debugar no delphi;
GOSTEI 0
Tiago Silva
26/08/2013
no meu sgbd coloquei assim
show table c000048;
ai ele me deu os campos da tabela, e la possui o campo 'codigo'
ai depois dei um select *from c00048;
e ele me retornou com os valores da venda,
obs: isso na tabela do pdv = qrpdv
show table c000048;
ai ele me deu os campos da tabela, e la possui o campo 'codigo'
ai depois dei um select *from c00048;
e ele me retornou com os valores da venda,
obs: isso na tabela do pdv = qrpdv
GOSTEI 0
Tiago Silva
26/08/2013
no meu sgbd coloquei assim
show table c000048;
ai ele me deu os campos da tabela, e la possui o campo 'codigo'
ai depois dei um select *from c00048;
e ele me retornou com os valores da venda,
obs: isso na tabela do pdv = qrpdv
show table c000048;
ai ele me deu os campos da tabela, e la possui o campo 'codigo'
ai depois dei um select *from c00048;
e ele me retornou com os valores da venda,
obs: isso na tabela do pdv = qrpdv
agora no meu banco do servidor = qrservidor
pelo firebird sql tool
fiz um show table c000048;
e ele retornou com os campos e la tem o campo 'codigo'
porem quando dei um select *from c000048 ou select codigo from c000048; nao mostrou nada,
sendo que eu fiz um insert pelo ibexpert , o que pode ser? abraço
GOSTEI 0
Kelson Palharini
26/08/2013
Eu nunca trabalhei com bancos da linha interbase/firebird, mas pode ser que tenha faltado alguma confirmação ao inserir informações no banco de dados. Então é por isso que está dando essa mensagem de erro por que o banco está vazio, tente inserir novos registros e faça novamente.
Qualquer coisa dê um toque.
Qualquer coisa dê um toque.
GOSTEI 0
Tiago Silva
26/08/2013
to ligado, fiz um insert pelo ibexpert e consegui,
vou fazer campo a campo
ex: vou dar um select co campo código e só vou inserir o campo codigo, ai se funcionar, vou fazendo os demais campos, passo a passo...
vou fazer aqui e posto o resultado , abraço
vou fazer campo a campo
ex: vou dar um select co campo código e só vou inserir o campo codigo, ai se funcionar, vou fazendo os demais campos, passo a passo...
vou fazer aqui e posto o resultado , abraço
GOSTEI 0
Deivison Melo
26/08/2013
Ok por favor, sinaliza para que possa (ou algum outro colaborador) dar o post como concluído!
Abração e bons códigos!!
Abração e bons códigos!!
GOSTEI 0