AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Wie zeige ich einen TSQLiteTable an?
Thema durchsuchen
Ansicht
Themen-Optionen

Wie zeige ich einen TSQLiteTable an?

Ein Thema von KahPee · begonnen am 16. Apr 2011 · letzter Beitrag vom 17. Apr 2011
 
Satty67

Registriert seit: 24. Feb 2007
Ort: Baden
1.566 Beiträge
 
Delphi 2007 Professional
 
#7

AW: Wie zeige ich einen TSQLiteTable an?

  Alt 17. Apr 2011, 07:58
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;

Geändert von Satty67 (17. Apr 2011 um 08:04 Uhr)
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:09 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz