Witam serdecznie, próbuję stworzyć program umożliwiający wczytanie do bazy postgesql danych z pliku csv. poniżej zamieszczam fragment kodu:
procedure TForm1.Button4Click(Sender: TObject);
var
txt: TextFile;
tekst: TStringList;
arg: string;
begin
if application.messagebox('Czy na pewno wczytać ten plik?', 'Uwaga!', mb_yesno + mb_iconquestion + mb_defbutton2) = IDYES then
begin
tekst := TStringList.Create;
AssignFile(txt, labelededit1.text);
Reset(txt);
ProgressBar1.Position := 0;
ProgressBar1.Max := filesize(txt);
while not Eoln(txt) do
begin
tekst.Clear;
Readln(txt, arg);
ExtractStrings([';'], [], PChar(arg), tekst);
with ZQuery1 do
begin
SQL.Clear;
SQL.Add('insert into pasazer(imie, nazwisko, ulica, kod_pocztowy, miasto,pesel, id_zakladu, id_wydzialu) values (:imie,:nazwisko,:ulica,:kod_pocztowy,:miasto,:pesel,:id_zakladu,:id_wydzialu)');
ParamByName('IMIE').AsString := (tekst.Strings[0]);
ParamByName('nazwisko').AsString := (tekst.Strings[1]);
ParamByName('ulica').AsString := (tekst.Strings[2]);
ParamByName('kod_pocztowy').AsString := (tekst.Strings[3]);
ParamByName('miasto').AsString := (tekst.Strings[4]);
ParamByName('pesel').AsString := (tekst.Strings[5]);
ParamByName('id_zakladu').ASinteger := StrToInt(LabeledEdit2.Text);
ParamByName('id_wydzialu').ASinteger := StrToInt(LabeledEdit3.Text);
ExecSQL;
end;
ProgressBar1.Position := ProgressBar1.Position + 1;
end;
end;
CloseFile(txt);
ProgressBar1.Position := 0;
tekst.Free;
ShowMessage('!! wczytano dane z pliku !!');
ZConnection1.Connected := True;
ZQuery1.active := True;
ZQuery1.SortedFields := 'id_wydzialu,nazwisko,imie';
Label7.Caption := IntToStr(DataSource1.DataSet.RecordCount)
praktycznie działa: ale mam dwie sprawy:
- po zakończeniu procedury wczytywania danych wyskakuje błąd jak z załączniku i nie wyświetla mi wczytanych danych,
- pgadmin pokazuje, ze dane zostały wczytane i zapisane.
proszę o pomoc w rozwiązaniu tego "mojego" problemu.