Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Daten von Datenbank in eine Tabelle füllen (https://www.delphipraxis.net/40751-daten-von-datenbank-eine-tabelle-fuellen.html)

Martin W 20. Feb 2005 15:00

Datenbank: mysql • Version: neuste • Zugriff über: direkt

Daten von Datenbank in eine Tabelle füllen
 
Also folgendes... ich hab das Tutorial von Luckie mal durchgemacht und mir die Beispielanwendung, das Adressbuch, mal "vorgenommen". Siehe hier (tutoriallink)


Hab auf das Formular noch ne TListView draufgesetzt. Diese soll genau so gefüllt werden wie das TStringGrid welches schon drauf war. Also hab ich diese prozedur (FillGrid) leicht modifiziert:

Delphi-Quellcode:
procedure tform1.FillGrid(SG: TStringGrid; Cols: TCols; Rows: TRows);
var
  i, j        : Integer;
  NewItem: TlistItem;
  clmen: TListColumn;
  k : integer;
begin
  ListView1.Clear;
  SG.ColCount := 0;
  SG.RowCount := 0;
  if Assigned(Rows) then
  begin
    SG.RowCount := length(Rows[0]) + 1;
    SG.ColCount := length(Cols);
    SG.FixedRows := 0;
    for i := 0 to length(Cols) - 1 do
    begin
      SG.Cols[i].Add(Cols[i]);
      SG.Cells[i, 0] := Cols[i];
    end;
    for i := 0 to length(Cols) - 1 do
    begin
      for j := 0 to length(Rows[0]) - 1 do
      begin
        SG.Cells[i, j + 1] := Rows[i, j];
      end;
    end;
  end;
  if Assigned(Rows) then
    begin
    for i := 0 to length(Cols) - 1 do
    begin
      clmen := ListView1.Columns.Add;
      clmen.Caption := Cols[i];
    end;
    for k := 0 to length(rows[0]) + 1 do
      begin
          NewItem := ListView1.Items.Add;
          NewItem.Caption := '';
          for i := 0 to length(rows) + 1  do
            NewItem.SubItems.Add('');
          end;
      end;
    for i := -1 to length(Cols) - 1 do
    begin
      for j := 0 to length(Rows[0]) - 1 do
      begin
        ListView1.Items[j].SubItems[i] := Rows[i, j];
      end;
    end;
end;
Aber irgendwie funktioniert das nicht richtig... Momentan kommt dann immer ne Fehlermeldung "Zugriffsverletzung..."


Gruß
Martin W

Quake 21. Feb 2005 13:18

Re: Daten von Datenbank in eine Tabelle füllen
 
NewItem.Create irgendwo einbauen.

Martin W 21. Feb 2005 13:30

Re: Daten von Datenbank in eine Tabelle füllen
 
Delphi-Quellcode:
var
  i, j        : Integer;
  NewItem: TlistItem;
  clmen: TListColumn;
  k : integer;
begin
  ListView1.Clear;
  SG.ColCount := 0;
  SG.RowCount := 0;
  if Assigned(Rows) then
  begin
    SG.RowCount := length(Rows[0]) + 1;
    SG.ColCount := length(Cols);
    SG.FixedRows := 0;
    listview1.Columns.Clear;
    Listview1.Clear;
    for i := 0 to length(Cols) - 1 do
    begin
      SG.Cols[i].Add(Cols[i]);
      SG.Cells[i, 0] := Cols[i];
    end;
    for i := 0 to length(Cols) - 1 do
    begin
      for j := 0 to length(Rows[0]) - 1 do
      begin
        SG.Cells[i, j + 1] := Rows[i, j];
      end;
    end;
  end;
 if Assigned(Rows) then
    begin
    for i := 0 to length(Cols) - 1 do
    begin
      clmen := ListView1.Columns.Add;
      clmen.Caption := Cols[i];
    end;
    for k := 0 to length(rows[0]) + 1 do
      begin
          NewItem := ListView1.Items.Add;
          NewItem.Caption := '';
          for i := 0 to length(rows) + 1  do
            NewItem.SubItems.Add('');
          end;
      end;
    k := -2;                   /// Ab hier verändert ///
    for i := 0 to length(Cols) - 1 do
    begin
      inc(k);
      for j := 0 to length(Rows[0]) - 1 do
      begin
        if k = -1 then
          begin
            ListView1.Items[j].Caption := Rows[i, j];
          end
        else
          begin
            ListView1.Items[j].SubItems[k] := Rows[i, j];
          end;
      end;
    end;          
end;
Wen es interessiert, hier ist es richtig, hab den Fehler gerfunden.

Quake 21. Feb 2005 14:30

Re: Daten von Datenbank in eine Tabelle füllen
 
Sorry, mein Kommentar war etwas falsch, NewItem := ListView1.Items.Add erstellt ja das Object. Sorry :wall:

Luckie 21. Feb 2005 14:35

Re: Daten von Datenbank in eine Tabelle füllen
 
Äh, was soll denn das:
Delphi-Quellcode:
SG.RowCount := length(Rows[0]) + 1;
SG.ColCount := length(Cols);
SG.FixedRows := 0;
listview1.Columns.Clear;
Listview1.Clear;
Entwerder Striggrid oder Listview. Und was wenn mein Listview lstData heißt? dann kann ich in dem Code alle Stellen ändern wo du den Listview hardgecodet hast. Nicht sehr schön.

Martin W 21. Feb 2005 15:22

Re: Daten von Datenbank in eine Tabelle füllen
 
Zitat:

Zitat von Luckie
Äh, was soll denn das:
Delphi-Quellcode:
SG.RowCount := length(Rows[0]) + 1;
SG.ColCount := length(Cols);
SG.FixedRows := 0;
listview1.Columns.Clear;
Listview1.Clear;
Entwerder Striggrid oder Listview. Und was wenn mein Listview lstData heißt? dann kann ich in dem Code alle Stellen ändern wo du den Listview hardgecodet hast. Nicht sehr schön.

Zum hardcoden... wie sollte ich es sonst machen ?

Luckie 21. Feb 2005 15:39

Re: Daten von Datenbank in eine Tabelle füllen
 
Du hast doch den Code vor dir. Wie habe ich es denn mit dem StringGrid gemacht? :roll:

Martin W 21. Feb 2005 15:44

Re: Daten von Datenbank in eine Tabelle füllen
 
Jo... als Variable der Prozedur übergeben... aber das war ja nur zum Üben =) Wichtiger ist mir die Frage im anderen Thread ;-)


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:56 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz