Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Wie zeige ich einen TSQLiteTable an? (https://www.delphipraxis.net/159871-wie-zeige-ich-einen-tsqlitetable.html)

KahPee 16. Apr 2011 15:02

Datenbank: SQLite • Version: -- • Zugriff über: SQLite Wrapper

Wie zeige ich einen TSQLiteTable an?
 
Hallo, wie kann ich einen TSQLitetable anzeigen lassen?
Z.B. in einer DBgrid komponente? Der Table wurde mittels dem SQLlite Wrapper ermittelt:


Delphi-Quellcode:
var
sldb: TSQLiteDatabase;
sltb: TSQLIteTable;
...
begin
...
sltb := slDb.GetTable('SELECT * FROM testtable');
....
In diesem Fall also die Frage wie man sltb am geeignesten anzeigt. Wenn das ganze ca 5 Felder hat. und man hinterher auch wieder rauskriegen soll welchen Datensatz der User angeklickt hat (z.B. im DBGrid).

Danke im Voraus

Kahpee

aurikel_Max 16. Apr 2011 17:40

AW: Wie zeige ich einen TSQLiteTable an?
 
Du kannst die Daten auch in einem Stringgrid anzeigen, welches du dann manuell befüllst:

Delphi-Quellcode:
  SQLTable := SQLDB.GetTable(SQLCommand); // SQLCommand = irgendwas mit Select
  if SQLTable.RowCount > 0 then
  begin
    while not (SQLTable.EOF) do
    begin
      ShowMessage(SQLTable.FieldAsString(0)); // an dieser Stelle musst du dann eben dein Stringgrid befüllen
      SQLTable.Next;
    end;
  end;

Bummi 16. Apr 2011 19:19

AW: Wie zeige ich einen TSQLiteTable an?
 
nachdem Du DBGrid schon erwähnt hast, wo hakte es...

sltb > Datasource > DBGrid > Bei der Auswahl das(die) Schlüsselfelder weiterverarbeiten ...

Diese Wrapper sind bezüglich Speicherschutz nicht unkritisch...

KahPee 16. Apr 2011 22:47

AW: Wie zeige ich einen TSQLiteTable an?
 
Zitat:

Zitat von Bummi (Beitrag 1095598)
sltb > Datasource > DBGrid > Bei der Auswahl das(die) Schlüsselfelder weiterverarbeiten ...

Wie mache ich die Verbindung? Mit etwas wie diesem:
Delphi-Quellcode:
DBGrid1.DataSource:=slDb.GetTable('SELECT * FROM '+TTNAME);
ist es leider nicht getan, da die Typen inkompatibel zu einander sind. Kannst du mir evtl mit nem kleinen Code zeigen wie das gemeint war?

Vielen Dank

KahPee

Bummi 16. Apr 2011 23:36

AW: Wie zeige ich einen TSQLiteTable an?
 
Sorry, ich hatte mich mit SQLite bisher nicht befasst, TSQLiteTable leitet sich nicht wie ich vermutet hatte von TDataSet ab, sorry.
Gegf. alles über ein dynamisch erstelltes/befülltes Clientdataset darstellen?

KahPee 17. Apr 2011 07:31

AW: Wie zeige ich einen TSQLiteTable an?
 
Zitat:

Zitat von Bummi (Beitrag 1095615)
Gegf. alles über ein dynamisch erstelltes/befülltes Clientdataset darstellen?

Wie würde soetwas aussehen? Und wie schnell ist das ganze hinterher in der Umsetzung wenn man bis zu, sagen wir mal 5000 Zeilen in dieser Tabelle hat? Aus diesem Grund will ich auch keine Stringgrid nehmen weil ich befürchte, dass das dann ein wenig lange braucht...

Satty67 17. Apr 2011 07:58

AW: Wie zeige ich einen TSQLiteTable an?
 
Also es gibt ja noch andere Zugriffskomponenten, die Datasource unterstützen (Zeos z.B.). MUss aber sagen, dass ich auch den "Simple SQLite Wrapper" verwende. Auch wenn die Eigenheit, erzeugte Objekte als Funktionsergebnis zu übergeben, etwas ungewöhnlich ist (und nichtmal Einheitlich, siehe Blob-Stream)

Was die Anzeige via TStringGrid angeht:

1 Million Datensätze werden im Stringgrid fast so schnell und gut angezeigt, wie 100! Das StringGrid darf nur nicht als DatenContainer missbraucht werden.

Also TStringGrid.RowCount auf Gesamt-Datenmenge setzen und Anzeige auf OwnerDraw, keine Daten ins StringGrid, nur der Header mit Feldnamen wird direkt im StringGrid gespeichert. Ein Puffer hält nur die Zeilen, die sichtbar sind (evtl. etwas davor/dahinter). In DrawCell werden dann die Daten aus dem Buffer im sichtbaren StringGrid-Feld angezeigt.

Symbolisch:

Delphi-Quellcode:
procedure TForm1.StringGridTableDrawCell(Sender: TObject;
  ACol, ARow: Integer; Rect: TRect; State: TGridDrawState);

  function GetDBField(FieldNo, RecNo: Integer): String;
  begin
    Result := // Hier FeldDaten aus dem Buffer holen
  end;

  procedure SetTextStyle(ACanvas: TCanvas; BackClr, FontClr: TColor; Style: TFontStyles);
  begin
    ACanvas.Brush.Color := BackClr;
    ACanvas.Font.Color := FontClr;
    ACanvas.Font.Style := Style;
  end;

var
  s : String;
begin
  with (Sender as TStringGrid) do begin

    if gdFixed in State then
      SetTextStyle(Canvas, clBtnFace, clBtnText, [])
    else
    if gdSelected in State then
      SetTextStyle(Canvas, clHighlight, clHighlightText, [])
    else
      SetTextStyle(Canvas, clWindow, clWindowText, []);

    if ARow = 0 then       // hier davon ausgehend, das es eine FixedRow als Header gibt
      s := Cells[Acol,Arow]
    else
      s := GetDBField(ACol, ARow);

    Canvas.TextRect(Rect,Rect.Left +2,Rect.Top+2, s);
  end;
end;

haentschman 17. Apr 2011 09:25

AW: Wie zeige ich einen TSQLiteTable an?
 
Moin...

ich kann es kaum sehen wie du dich quälst. :mrgreen: Warum benutzt du diesen Wrapper ? Zeos z.B. kann auch mit SQLite. Da hast du vernünftige Querys (Datasets) die ganz bequem über TDatasource an ein Grid z.B gebunden werden können.


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:10 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