Memo2StringGrid

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.

Memo2StringGrid

Beitragvon drache999 » 4. Mär 2018, 12:03 Memo2StringGrid

Hallo Leute,
ich habe ein Problem mit meiner StringGrid.

Ich habe ein Edit und ein Memo. (Später sollen auch weitere Edits im Programm vorhanden sein). Jetzt aber nur das Minimale. :)

Ich möchte die Einträge des Edits und des Memos in mein StringGrid rein bringen. Das macht es auch.
Ich speichere es in eine Datei. Das macht es.
Wenn ich in meinem Memo mehr als eine Zeile habe, so wird es auch in mein StringGrid gespeichert.
Solange ich das Programm nicht schließe und in meine erste Spalte im StringGrid klicke, kann ich meine Daten zurück holen und anzeigen lassen.

Doch jetzt kommt mein Problem:
Wenn ich das Programm schließe und meine Daten lade, so werden die Einträge meiner Memo in mehrere Zeilen des StringGrid aufgeteilt.
Sie werden gesplittet.

Was mache ich falsch?


anbei der Code:

// ###################################
// # SaveStringGrid2File speichern #
// ###################################
// Anfang
procedure SaveStringGridToFile(StringGrid: TStringGrid; const FileName: String);
var
F: TStringList;
i: Integer;
begin
F := TStringList.Create;
try
F.Add(IntToStr(StringGrid.RowCount));
F.Add(IntToStr(StringGrid.ColCount));
for i := 0 to (StringGrid.RowCount - 1) do
F.Add(StringGrid.Rows[i].CommaText);
F.SaveToFile(FileName);
finally
F.Free;
end;
end;
// ###################################
// # SaveStringGrid2File speichern #
// ###################################
// Ende

procedure TForm1.Button2Click(Sender: TObject);
begin
SaveStringGridToFile(StringGrid1, '.\daten.dat');
end;


// ###############################
// # SaveStringGrid2File laden #
// ###############################
// Anfang
procedure LoadStringGridFromFile(StringGrid: TStringGrid; const FileName: String);
var
F: TStringList;
i: Integer;
begin
F := TStringList.Create;
try
F.LoadFromFile(FileName);
StringGrid.RowCount := StrToInt(F[0]);
StringGrid.ColCount := StrToInt(F[1]);
for i := 0 to (StringGrid.RowCount - 1) do
StringGrid.Rows[i].CommaText := F[i + 2];
finally
F.Free;
end;
end;
// ###############################
// # SaveStringGrid2File laden #
// ###############################
// Ende

procedure TForm1.Button3Click(Sender: TObject);
begin
if FileExists('.\daten.dat') then LoadStringGridFromFile(StringGrid1, '.\daten.dat');
end;


procedure TForm1.FormCreate(Sender: TObject);
begin
Edit1.Clear;
Memo1.Clear;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
StringGrid1.RowCount := StringGrid1.RowCount + 1;
StringGrid1.Cols[0].Add(Trim(Edit1.Text)).Size;
StringGrid1.Cols[1].Add(Trim(Memo1.Lines.Text));
Edit1.Clear;
Memo1.Clear;
Edit1.SetFocus;
end;

procedure TForm1.StringGrid1Click(Sender: TObject);
var
s: string;
begin
// Text der Zelle holen
s := StringGrid1.Cells[StringGrid1.Col, StringGrid1.Row];
if Length(s) > 0 then //Länge des Text übeprüfen
begin
Edit1.Text:= s; // Text ausgeben
Memo1.Text:= StringGrid1.Cells[StringGrid1.Col+1, StringGrid1.Row];
end;
end;
drache999
 
Beiträge: 2
Registriert: 4. Mär 2018, 11:48

Beitragvon wp_xyz » 4. Mär 2018, 13:23 Re: Memo2StringGrid

Einen offensichtlichen Fehler sehe ich nicht. Es sei denn, deine Memo-Texte enthalten irgendwo ein Komma, dann funktioniert das mit dem CommaText natürlich nicht. Welche Lazarus-Version hast du denn? Ich meine es gab da vor einiger Zeit Änderungen mit CommaText o.ä.

Übrigens, das StringGrid hat schon eingebaute Methoden, um den Inhalt in einer CSV-Datei zu speichern bzw. daraus zu lesen:

Code: Alles auswählen
procedure SaveToCSVFile(AFileName: string; ADelimiter: Char=','; WriteTitles: boolean=true; 
  VisibleColumnsOnly: boolean=false);
 
procedure LoadFromCSVFile(AFilename: string; ADelimiter: Char=',';
  UseTitles: boolean=true; FromLine: Integer=0; SkipEmptyLines: Boolean=true);
wp_xyz
 
Beiträge: 2643
Registriert: 8. Apr 2011, 08:01

Beitragvon charlytango » 4. Mär 2018, 13:25 Re: Memo2StringGrid

drache999 hat geschrieben:Wenn ich das Programm schließe und meine Daten lade, so werden die Einträge meiner Memo in mehrere Zeilen des StringGrid aufgeteilt.


Dein Memotext enthält nicht zufällig die gleichen Trennzeichen (Komma) die du als Trenner beim Speichern des Grids verwendest ?
Vor dem Speichern prüfen ob die Zeichen die als Trenner beim Speichern verwendet werden nicht doch im Inhalt eingegeben wurden.

BTW: der Grid kennt eigene Prozeduren zum Speichern und Laden
http://wiki.freepascal.org/Grids_Reference_Page#Differences_between_Lazarus_and_Delphi_grids
z.B. unter "procedure SaveToCSVFile"

Edit: da war ich wohl zu langsam ;)
charlytango
 
Beiträge: 123
Registriert: 12. Sep 2015, 11:10
Wohnort: Wien
OS, Lazarus, FPC: Laz 1.8 | 
CPU-Target: Win 32Bit, 64bit
Nach oben

Beitragvon drache999 » 4. Mär 2018, 16:10 Re: Memo2StringGrid

ich arbeite mit Delphi XE4
drache999
 
Beiträge: 2
Registriert: 4. Mär 2018, 11:48

Beitragvon theo » 4. Mär 2018, 17:19 Re: Memo2StringGrid

drache999 hat geschrieben:ich arbeite mit Delphi XE4

Hier ist nicht Delphi.
Falsches Forum?
theo
 
Beiträge: 8058
Registriert: 11. Sep 2006, 18:01

• Themenende •

Zurück zu Datenbanken



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 6 Gäste

porpoises-institution
accuracy-worried