Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Verknüpfung StringGrid und LiveBindings via Code (https://www.delphipraxis.net/205229-verknuepfung-stringgrid-und-livebindings-via-code.html)

WhatATime 14. Aug 2020 11:26

Delphi-Version: 10.3 Rio

Verknüpfung StringGrid und LiveBindings via Code
 
Hallo zusammen,

ich möchte meine Datenbank via LiveBindings in einer StringGrid anzeigen lassen. Es handelt sich um eine FMX Anwendung, Datenbank ist MSSQL. Aber dazu möchte ich nicht den LiveBindings Designer benutzen, sondern via Code arbeiten.
Leider ist meines erachtens die Dokumentation dazu recht schlecht ausgearbeitet.

Folgendes habe ich dann zusammengeschustert:

Code:
procedure TForm_LiveBindings.CornerButton_Click(Sender: TObject);
var
  aLinkTableToDataSource: TLinkGridToDataSource;
  aConnection: TADOConnection;
  aQuery: TADOQuery;
  aBindSource: TBindSourceDB;
begin
  aConnection:= TADOConnection.Create(self);
  aQuery:= TADOQuery.Create(self);
  aBindSource:= TBindSourceDB.Create(self);
  aLinkTableToDataSource:= TLinkGridToDataSource.Create(self);

  // Hier wird aConnection aufgesetzt

  aQuery.Connection := aConnection;
  aQuery.SQL.Text := 'SELECT * FROM TestTable';
  aQuery.Active := True;

  aBindSource.DataSource.DataSet := aQuery;
  aBindSource.DataSource.AutoEdit := True;
  aBindSource.DataSource.Enabled := True;

  aLinkTableToDataSource.DataSource := aBindSource;
  aLinkTableToDataSource.GridControl := StringGrid1;

end;
Welches Ergebnis bekomme ich? Nun in der StringGrid werden mir alle Spalten der Datenbanktabelle angezeigt, genauer gesagt alle Header der Spalten. Der Inhalt fehlt aber total, jede Zeile bleibt leer. Wo genau bin ich also falsch abgebogen? Was habe ich vergessen? Jemand eine Idee?

Eine andere Frage: ist ein StringGrid ein vernünftiges Anzeigemedium oder bietet sich besseres an?

Vielen Dank an euch!

KodeZwerg 14. Aug 2020 11:43

AW: Verknüpfung StringGrid und LiveBindings via Code
 
Damit LiveBindings auf einem TStringGrid ausgeführt werden können, müssen mehrere Bindungen für Spalten, Zeilen, Zellen, Positionen erstellt werden.
Jedenfalls kenne ich das so. Ich habe allerdings noch nicht probiert das per Code zu "attachen".

QuickAndDirty 14. Aug 2020 12:49

AW: Verknüpfung StringGrid und LiveBindings via Code
 
Zitat:

Zitat von WhatATime (Beitrag 1471829)
Hallo zusammen,

ich möchte meine Datenbank via LiveBindings in einer StringGrid anzeigen lassen. Es handelt sich um eine FMX Anwendung, Datenbank ist MSSQL. Aber dazu möchte ich nicht den LiveBindings Designer benutzen, sondern via Code arbeiten.
Leider ist meines erachtens die Dokumentation dazu recht schlecht ausgearbeitet.

Folgendes habe ich dann zusammengeschustert:

Code:
procedure TForm_LiveBindings.CornerButton_Click(Sender: TObject);
var
  aLinkTableToDataSource: TLinkGridToDataSource;
  aConnection: TADOConnection;
  aQuery: TADOQuery;
  aBindSource: TBindSourceDB;
begin
  aConnection:= TADOConnection.Create(self);
  aQuery:= TADOQuery.Create(self);
  aBindSource:= TBindSourceDB.Create(self);
  aLinkTableToDataSource:= TLinkGridToDataSource.Create(self);

  // Hier wird aConnection aufgesetzt

  aQuery.Connection := aConnection;
  aQuery.SQL.Text := 'SELECT * FROM TestTable';
  aQuery.Active := True;

  aBindSource.DataSource.DataSet := aQuery;
  aBindSource.DataSource.AutoEdit := True;
  aBindSource.DataSource.Enabled := True;

  aLinkTableToDataSource.DataSource := aBindSource;
  aLinkTableToDataSource.GridControl := StringGrid1;

end;
Welches Ergebnis bekomme ich? Nun in der StringGrid werden mir alle Spalten der Datenbanktabelle angezeigt, genauer gesagt alle Header der Spalten. Der Inhalt fehlt aber total, jede Zeile bleibt leer. Wo genau bin ich also falsch abgebogen? Was habe ich vergessen? Jemand eine Idee?

Eine andere Frage: ist ein StringGrid ein vernünftiges Anzeigemedium oder bietet sich besseres an?

Vielen Dank an euch!

Es gibt Datenbank gitter. TDBGrid?
Ich weiß es gibt leute die livebindings toll finden. Ich musste nach dem ich mehrfach auf unzulänglichkeiten gestoßen bin, am Ende nach langer Entwicklungszeit alle Live bindings aus dem Projekt entfernern...und das war ziemlich schmerzvoll, denn es war auf eine MVVM Architektur aufgebaut und ohne Livebindings macht die keinen Sinn.

Also Du kannst das gerne mit Live bindings machen vielleicht klappts ja. Nur für mich sind die erstmal nichts mehr in Delphi, bis sie funktionieren.

Einfach über die Datenmenge iterieren füllt dein Stringgrid vermutlich genau so auf wie du es gerne hättest. Und dafür bleibt dir das rumgehampel mit den live bindings erspart.
Vor allem sind die Live bindings nicht an beiden enden "Live".

WhatATime 15. Okt 2020 18:29

AW: Verknüpfung StringGrid und LiveBindings via Code
 
Zitat:

Zitat von QuickAndDirty (Beitrag 1471836)
Zitat:

Zitat von WhatATime (Beitrag 1471829)
Hallo zusammen,

ich möchte meine Datenbank via LiveBindings in einer StringGrid anzeigen lassen. Es handelt sich um eine FMX Anwendung, Datenbank ist MSSQL. Aber dazu möchte ich nicht den LiveBindings Designer benutzen, sondern via Code arbeiten.
Leider ist meines erachtens die Dokumentation dazu recht schlecht ausgearbeitet.

Folgendes habe ich dann zusammengeschustert:

Code:
procedure TForm_LiveBindings.CornerButton_Click(Sender: TObject);
var
  aLinkTableToDataSource: TLinkGridToDataSource;
  aConnection: TADOConnection;
  aQuery: TADOQuery;
  aBindSource: TBindSourceDB;
begin
  aConnection:= TADOConnection.Create(self);
  aQuery:= TADOQuery.Create(self);
  aBindSource:= TBindSourceDB.Create(self);
  aLinkTableToDataSource:= TLinkGridToDataSource.Create(self);

  // Hier wird aConnection aufgesetzt

  aQuery.Connection := aConnection;
  aQuery.SQL.Text := 'SELECT * FROM TestTable';
  aQuery.Active := True;

  aBindSource.DataSource.DataSet := aQuery;
  aBindSource.DataSource.AutoEdit := True;
  aBindSource.DataSource.Enabled := True;

  aLinkTableToDataSource.DataSource := aBindSource;
  aLinkTableToDataSource.GridControl := StringGrid1;

end;
Welches Ergebnis bekomme ich? Nun in der StringGrid werden mir alle Spalten der Datenbanktabelle angezeigt, genauer gesagt alle Header der Spalten. Der Inhalt fehlt aber total, jede Zeile bleibt leer. Wo genau bin ich also falsch abgebogen? Was habe ich vergessen? Jemand eine Idee?

Eine andere Frage: ist ein StringGrid ein vernünftiges Anzeigemedium oder bietet sich besseres an?

Vielen Dank an euch!

Es gibt Datenbank gitter. TDBGrid?
Ich weiß es gibt leute die livebindings toll finden. Ich musste nach dem ich mehrfach auf unzulänglichkeiten gestoßen bin, am Ende nach langer Entwicklungszeit alle Live bindings aus dem Projekt entfernern...und das war ziemlich schmerzvoll, denn es war auf eine MVVM Architektur aufgebaut und ohne Livebindings macht die keinen Sinn.

Also Du kannst das gerne mit Live bindings machen vielleicht klappts ja. Nur für mich sind die erstmal nichts mehr in Delphi, bis sie funktionieren.

Einfach über die Datenmenge iterieren füllt dein Stringgrid vermutlich genau so auf wie du es gerne hättest. Und dafür bleibt dir das rumgehampel mit den live bindings erspart.
Vor allem sind die Live bindings nicht an beiden enden "Live".

Danke für deine Einschätzung, ich bin mittlerweile auch der Meinung, dass LiveBindings nicht gerade das gelbe vom Ei ist, "rumgehampel" trifft es doch gut. Mir fehlt einfach die Kontrolle darüber was passsiert. Ich habe aber die Hoffnung noch nicht ganz aufgegeben und probiere weiter :wink:


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