Hallo zusammen,
nachdem ich es jetzt geschaft habe eine
CSV-Datei in einem StringGrid darzustellen (hier mal der Code)
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
Var f: TextFile;
Zeile, I: Integer;
ZeileS: String;
ZeileA: TStringDynArray;
Begin
OpenDialog1.Execute;
Zeile := 0;
//StringGrid1.RowCount := StringGrid1.FixedRows +1 ;
//StringGrid1.ColCount := StringGrid1.FixedCols +1;
StringGrid1.Cells[StringGrid1.FixedCols, StringGrid1.FixedRows] := '';
AssignFile(f, OpenDialog1.FileName);
Reset(f);
While not EoF(f) do Begin
ReadLn(f, ZeileS);
ZeileA := Explode(';', ZeileS);
Inc(Zeile);
StringGrid1.RowCount := StringGrid1.FixedRows + Zeile;
If StringGrid1.ColCount < StringGrid1.FixedCols + Length(ZeileA) Then
StringGrid1.ColCount := StringGrid1.FixedCols + Length(ZeileA);
For I := 0 to Length(ZeileA) - 1 do
StringGrid1.Cells[StringGrid1.FixedCols + I, StringGrid1.FixedRows + Zeile - 1] := ZeileA[I];
End;
CloseFile(f);
label1.Caption:= inttostr(stringgrid1.RowCount);
label2.caption:= inttostr(stringgrid1.ColCount);
End;
Möchte ich anschließend diese Felder in einer
DB speichern. Hierzu habe ich folgenden Code gefunden und benutzt.
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var sqry:String;
y:Integer;
begin
sqry:='INSERT INTO PLZ (PLZ, ORT, Tour) VALUES(:v1, :v2, :v3)';
for y:=1 to StringGrid1.RowCount do
begin
qrmain.SQL.text:=sqry;
with qrmain.params do
begin
ParamValues['v1']:=StringGrid1.Cells[0, y];
ParamValues['v2']:=StringGrid1.Cells[1, y];
ParamValues['v3']:=StringGrid1.Cells[2, y];
end; // with
qrmain.ExecSQL;
end; // for y
end;
Wenn ich diesen Code nun ausführe bekomme ich eine "EGridException" und es wird folgende Codezeile angemeckert.
Delphi-Quellcode:
if (Col<0) or (Row<0) or (Col>=ColCount) or (Row>=RowCount) then
raise EGridException.CreateFmt(rsIndexOutOfRange, [Col, Row]);
Irgendwas mache ich wohl mit den FixedCols und Fixedrows Angaben falsch. Zum Einlesen der
CSV-Datei waren diese beiden um 1 erhöht. Damit kam die andere Prozedur beim Speichern in die Tabelle nicht zu recht. Also habe ich das mal weggelassen und trotzdem klappt es nicht. Bestimmt wieder so ein Schwachsinnsfehler von mir.
Ati