Einzelnen Beitrag anzeigen

Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.492 Beiträge
 
Delphi 7 Enterprise
 
#12

Re: Mehrere Tabellen mit Delphi verbinden

  Alt 10. Mai 2005, 22:04
Zitat von t0M:
Hallo allerseits,

Ich bin in Moyos Gruppe und wir machen dieses Programm als Gruppenarbeit in unserer Schule. Erstmal kurz was zu mir: ich Programmiere schon seit paar jahren ziemlich viel in PHP und MySQL und kenne mich dort relativ gut aus. Problem von uns bei dem Programm ist eher wie man das in Delphi umsetzt. Die Tabellen haben wir ja alle mehr oder weniger erstellt.

Wenn wir nun zb mit SQL aus der Tabelle etwas rauslesen wie bekommen wir die werte in das Formular das wir mit dem Formularexperten in Delphi erstellt haben?


so kann man das zb in PHP machen:

Delphi-Quellcode:
$abc = 'SELECT * FROM Teams';
$schueler = 'SELECT * FROM Schueler WHERE TeamID='.$abc['TeamID'];
nun hätte ich im array $schueler alle daten des Schülers, dass die TeamID von oben hat. Wie mach ich das nun in Delphi?
Du benötigst dafür in Delphi 4 Komponenten:
  • TDatabase
    Dort wählst Du einen vorher angelegten AliasName aus und vergibst einen Databasename. Über dieses Objekt sollten dann alle DB-Operationen laufen. Connected auf true setzen.
  • TQuery
    In der Eigenschaft SQL (Das ist eine Stringlist) kann Du das SQL einsetzen. Parameter werden mit ":" gekennzeichnet. Also z.b. 'Select * from Schueler where TeamID=:TeamID'. Über die Liste Params kannst Du die Parameter setzen oder im Source über ParamByName.As<Type>. Beispiel : QuerySchueler.ParamByName('TeamId').AsInteger := 1234;
    Die Query wird durch setzen der Eigenschaft Active auf true ode die Methode Open aktiviert.
  • TDataSource
    Dieses Objekt dient der Verbindung von Datenmengen (Query, Table) mit entsprechenden Steuerelementen. Die Eigenschaft DataSet referenziert dann die Query.
  • TDbGrid
    Zur Anzeige der Daten in Tabellenform kann man z.B. ein Grid verwenden. Dieses greift über die Eigenschaft DataSource auf das der TDataSource zugrundeliegende Dataset zu.

Um das ganze mehrstufig zu machen, gibt es in der TQuery-Komponente eine DataSource Eigenschaft. Diese verweist auf ein TDataSource Objekt der Elterndatenmenge. Das Schöne daran: wenn die Parameter in der Kinddatenmenge genauso benannt sind, wie die entsprechenden Verknüpfungsfelder der Elterndatenmenge, so erfolgt das gesamte Handling automatisch.

Wenn Du also eine 1:n Verbindung zwischen Teams und Schülern herstellen willst und folgendes gilt:

Teams: ID integer, TeamName char(30)
Schueler: ID integer, Schuelername char(30), TeamId integer

Dann erzeugst Du zunächst jeweils eine TQuery und eine TDataSource für die beiden Datennmengen. In Teams kann das 'Select * from Teams' sein. In Schueler wäre es 'Select * from Schueler where TeamId = :id'. Wenn Du dann in der Schueler-Query die Eigenschaft DataSource auf die Datasource des Teams setzt, so wird bei jeder Bewegung in Teams der Parameter :id in der Schueler Query auf die Id aus Teams gesetzt und die Datenmenge aktualisiert.
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat