Parâmetro sumindo em rotina de importação
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.;..
Alguém tem uma idéia do que pode ser, ou o q eu posso fazer??
Agradeço imensamente desde já
Té mais...
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
Curtidas 0
Respostas
Gilvanj
03/11/2004
Antes da linha
Query.SQL.Clear;
Verifique se Query.Active está True e se tiver, execute Query.Close.
Query.SQL.Clear;
Verifique se Query.Active está True e se tiver, execute Query.Close.
GOSTEI 0
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
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
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
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
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