Parâmetro sumindo em rotina de importação

Delphi

03/11/2004

Ae, galera, eu to como um problemão aqui e preciso muito de uma ajuda...
Eu tenho uma rotina de importação, logo abaixo, que pega dados de um arquivo txt e passa para o banco (Firebird 1.5).
O grande problema é: quando eu importo uma lista nova, tb bem, mas c eu ir até a lista, alterar um preço e mandar importar novamente o programa pára neste produto me falando que o parametro PARAM não foi encontrado.;..

procedure TForm12.Button1Click(Sender: TObject);
var
txt:TextFile;
prod,texto,cod,preco,path,precook:string;
DataSet: TSQLDataSet;
Query: TSQLQuery;
begin
DecimalSeparator := ´.´;
Dataset := TSQLDataSet.Create(nil);
Query := TSQLQuery.Create(nil);
  with DataSet do
    begin
      SQLConnection := DMM.SQLConnection1;
    end;
  with Query do
    begin
      SQLConnection := DMM.SQLConnection1;
    end;
ProgressBar1.MaxValue := 0;
  if OpenDialog1.Execute then
    begin
      try
        path := OpenDialog1.FileName;
        AssignFile(txt,path);
        Reset(txt);
        BitBtn1.Enabled := False;
        BitBtn5.Enabled := False;
        if not eof(txt) then
        Label2.Caption := ´Contando linhas do arquivo...´;
          repeat
            screen.Cursor := crHourGlass;
            Readln(txt);
            ProgressBar1.MaxValue := ProgressBar1.MaxValue +1;
            Application.ProcessMessages;
          until eof(txt);
        Reset(txt);
      try
        Trans.TransactionID := 7;
        Trans.IsolationLevel := xilREADCOMMITTED;
        DMM.SQLConnection1.StartTransaction(Trans);
          if not Eof(txt) then
            Label2.Caption := ´Importando dados...´;
          repeat
            screen.Cursor := crHourGlass;
            Readln(txt,texto);
            cod := copy(texto,5,6);
            prod := copy(texto,14,57);
            preco :=  copy(texto,72,11);
            while pos(´,´,preco)>0 do Delete (preco,pos(´,´,preco),1);
            while pos(´.´,preco)>0 do Delete (preco,pos(´.´,preco),1);
            precook := FloatToStr(StrToFloat(preco)/100);
            Query.SQL.Clear;
            Query.SQL.Add(´SELECT * FROM PRODUTOS WHERE ID_PRODUTO=´+QuotedStr(cod));
            Query.Open;
              if Query.RecordCount = 0 then
                begin
                  DataSet.CommandText := ´INSERT INTO PRODUTOS (ID_PRODUTO,NOME_PRODUTO,PRECO,ID_GRUPO) VALUES (´ + QuotedStr(cod) + ´,´ + QuotedStr(prod) + ´,´ + QuotedStr(precook) + ´,´  + #39 + ´1´ + 39 + ´)´;
                  Dataset.ExecSQL;
                end
              else
                begin
                  Dataset.CommandText := ´UPDATE PRODUTOS SET NOME_PRODUTO =´ + QuotedStr(prod) + ´,´ + ´ PRECO=´ + QuotedStr(precook) + ´,´ + ´DATA_IMP = :PARAM WHERE ID_PRODUTO=´+QuotedStr(cod);
                  Dataset.ParamByName(´PARAM´).AsDate := DMM.DataAtual;
                  Dataset.Prepared := True;
                  DataSet.ExecSQL;
                end;
            ProgressBar1.AddProgress(1);
            Application.ProcessMessages;
          until eof(txt);
        DMM.SQLConnection1.Commit(Trans);
        CloseFile(txt);
        DecimalSeparator := ´,´;
          try
            Trans.TransactionID := 4;
            Trans.IsolationLevel := xilREADCOMMITTED;
            DMM.SQLConnection1.StartTransaction(Trans);
            Label2.Caption := ´Calculando preços...´;
            Application.ProcessMessages;
            DMM.SQLStoredProc1.ExecProc;
            DMM.SQLConnection1.Commit(Trans);
            Label2.Caption := ´Concluído´;
            Application.ProcessMessages;
            Sleep(1000);
          except
            on E:Exception do
              begin
                DMM.SQLConnection1.Rollback(Trans);
                MessageDlg(´Erro ao atualizar os preços dos produtos!´+#13+E.Message,mtError,[mbOK],1);
              end;
          end;
      except
        on e:Exception do
          begin
            DMM.SQLConnection1.Rollback(Trans);
            MessageDlg(´Ocorreu um erro durante a importação dos dados!´+13+E.Message,mtError,[mbOK],1);
          end;
      end;
      Screen.Cursor := crDefault;
    except
      MessageDlg(´Parâmetros de importação incorretos ou arquivo de texto inválido!´, mtError, [mbOK],1);
      Screen.Cursor := crDefault;
      Close;
    end;
    Close;
  end;
  Query.Free;
  Dataset.Free;
end;


Alguém tem uma idéia do que pode ser, ou o q eu posso fazer??
Agradeço imensamente desde já
Té mais...


Wart

Wart

Curtidas 0

Respostas

Gilvanj

Gilvanj

03/11/2004

Antes da linha
Query.SQL.Clear;

Verifique se Query.Active está True e se tiver, execute Query.Close.


GOSTEI 0
Wart

Wart

03/11/2004

[b:e7f59e1a11]GilvanJ[/b:e7f59e1a11]

Tente aki e num adianto naum kra..
msm assim vlw pela ajuda...

mais alguma sugestão? (por favor, digam q sim!! :wink: :wink: )
té mais


GOSTEI 0
Gilvanj

Gilvanj

03/11/2004

E se vc executar um Query := TSQLQuery.Create(nil) e Query.Free a cada execução do laço ?


GOSTEI 0
Wart

Wart

03/11/2004

GilvaJ

Intaum cara, eu acabei parando de passar os valores que eu queria como parametros e usei o QuotedStr() msm.. assim o problema cessou...

Muito obrigado pela ajuda...
Té mais


GOSTEI 0
POSTAR