Entwickler-Ecke

Datenbanken - MySQL Einträge in ListView anzeigen?


jackie05 - Sa 27.12.08 01:43
Titel: MySQL Einträge in ListView anzeigen?
Hallo,
ich lasse eine Verbindung zur MySQL Datenbank herstellen mit MySQL Direct, soweit funktioniert alles, jetzt möchte ich wissen, wie ich die Einträge in ListView anzeigen kann?

So kann ich die Einträge in StringGrid anzeigen:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
  if assigned(FResult) then begin
    if FResult.ResultType=rtStored then begin
      cr := FResult.RecNo;
      StringGrid2.RowCount := FResult.RowsCount+1;
      StringGrid2.ColCount := FResult.FieldsCount+1;
      for i:=0 to FResult.FieldsCount-1 do begin
        af := FResult.FieldDef(i)^;
        StringGrid2.cells[i+1,0] := af.Name;
      end;
      FResult.First;
      for i:=0 to FResult.RowsCount-1 do begin
        if FResult.RecNo=cr then
          StringGrid2.Cells[0,i+1] := '*'
        else
          StringGrid2.Cells[0,i+1] := '';
        for j:=0 to FResult.FieldsCount-1 do
          StringGrid2.Cells[j+1,i+1] := FResult.FieldValue(j);
        FResult.Next;
      end;
      FResult.RecNo := cr;
    end
    else begin
      StringGrid2.RowCount := 2;
      StringGrid2.ColCount := FResult.FieldsCount+1;
      for i:=0 to FResult.FieldsCount-1 do begin
        af := FResult.FieldDef(i)^;
        StringGrid2.cells[i+1,0] := af.Name;
      end;
      for j:=0 to FResult.FieldsCount-1 do
        StringGrid2.Cells[j+1,1] := FResult.FieldValue(j);
    end;
  end;


Damit werden alle Einträge in StringGrid angezeigt.

Wie könnte ich es in ListView anzeigen lassen?
Ich hab mir das mal so Überlegt:


Delphi-Quelltext
1:
2:
3:
4:
5:
  ListIt := Liste2.Items.Add();
  ListIt.Caption := '';
  ListIt.SubItems.Add('Tabelle1');
  ListIt.SubItems.Add('Tabelle2');
  ListIt.SubItems.Add('Tabelle3');


Ist das irgendwie möglich?

Ich bedanke mich schonmal im Voraus.

MfG


jaenicke - Sa 27.12.08 02:16

Genau so geht es doch auch. :nixweiss:

Du musst ja nur zum Beispiel statt
user profile iconjackie05 hat folgendes geschrieben Zum zitierten Posting springen:

Delphi-Quelltext
1:
2:
        for j:=0 to FResult.FieldsCount-1 do
          StringGrid2.Cells[j+1,i+1] := FResult.FieldValue(j);
schreiben

Delphi-Quelltext
1:
2:
3:
4:
        ListIt := Liste2.Items.Add();
        ListIt.Caption := FResult.FieldValue(0);
        for j := 1 to FResult.FieldsCount-1 do
          ListIt.SubItems.Add(FResult.FieldValue(j));

Bei dem StringGrid greifst du auf alle Zellen als Array zu, bei der ListView fügst du stattdessen eine neue Zeile und die Spalten hinzu. Auf die Daten greifst du aber nach wie vor genauso zu.


jackie05 - Sa 27.12.08 03:30

Danke Dir.

Ich habe das mit MySQL Direct gelassen und stattdessen mit ZeosLib MySQL angefangen.
Jetzt habe ich ein Problem, ich möchte nicht gleich wegen ein kleiner Fehler einen neuen Thread eröffnen und zwar, möchte ich bei der SQL Abfrage einen Like einfügen:


Delphi-Quelltext
1:
2:
Name := PChar(ComboBox1.Text);
query := PChar('SELECT * FROM Tabelle WHERE (Name LIKE "%'+Name+'%")');


Wenn ich diese abfrage ausführe, sagt mir mein Programm, das die SQL Syntax falsch wäre.

Wieso funktioniert das nicht?

Edit: Ich habs jetzt so gemacht:

Delphi-Quelltext
1:
query := PChar('SELECT * FROM Tabelle WHERE (Name LIKE "%'+Name+'%")');                    

nun funktioniert es und Danke für die antwort.

MfG


Delete - Sa 27.12.08 09:19

Du solltest Deine Abfragen parametrisieren, dann bist Du auch vor SQL-Injection geschützt.