GARANTIR DESCONTO

Fórum delphi usando query copiar tabela #453171

26/08/2013

0

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;
Tiago Silva

Tiago Silva

Responder

Posts

26/08/2013

Kelson Palharini

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;
Responder

Gostei + 0

26/08/2013

Tiago Silva

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
Responder

Gostei + 0

26/08/2013

Kelson Palharini

É 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;
Responder

Gostei + 0

26/08/2013

Kelson Palharini

É 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;
Responder

Gostei + 0

26/08/2013

Tiago Silva

parabéns meu amigo,
show de bola, obrigado por inserir também os comentarios, pois vai me ajudar a entender.

grande abraço.
Responder

Gostei + 0

26/08/2013

Tiago Silva

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;
Responder

Gostei + 0

27/08/2013

Tiago Silva

alguem me ajuda galera? alguma solução?
abraço
Responder

Gostei + 0

27/08/2013

Kelson Palharini

Nessa tabela c000048 não deve ter o campo código.
Responder

Gostei + 0

27/08/2013

Kelson Palharini

Nessa tabela c000048 não deve ter o campo código.



Ou provavelmente está vazia.
Responder

Gostei + 0

27/08/2013

Tiago Silva

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

Gostei + 0

27/08/2013

Kelson Palharini

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;




Responder

Gostei + 0

27/08/2013

Tiago Silva

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
Responder

Gostei + 0

27/08/2013

Tiago Silva

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


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
Responder

Gostei + 0

27/08/2013

Kelson Palharini

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

Gostei + 0

27/08/2013

Tiago Silva

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
Responder

Gostei + 0

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

Aceitar