AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Mehrere Tabellen mit Delphi verbinden
Thema durchsuchen
Ansicht
Themen-Optionen

Mehrere Tabellen mit Delphi verbinden

Ein Thema von MoYo · begonnen am 8. Mai 2005 · letzter Beitrag vom 31. Mai 2005
Antwort Antwort
Seite 2 von 3     12 3      
t0M

Registriert seit: 10. Mai 2005
1 Beiträge
 
#11

Re: Mehrere Tabellen mit Delphi verbinden

  Alt 10. Mai 2005, 12:03
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?
  Mit Zitat antworten Zitat
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
MoYo

Registriert seit: 6. Apr 2005
20 Beiträge
 
#13

Re: Mehrere Tabellen mit Delphi verbinden

  Alt 23. Mai 2005, 18:08
Also ich bin grad am Insert Into bei Delphi dran. Dabei habe ich folgendes Problem

Delphi-Quellcode:
 Form1.Query1.Active := False;
   Form1.Query1.SQL.Clear;
   Form1.Query1.SQL.Text:='INSERT INTO "E:\Sporttag\MySQL\Lehrer.DB" '+
                    '( LehrerID, LEHnname, LEHvname, LEHkurz)'+
                    ' VALUES '+
                    '('+Edit1.Text+','+Edit2.Text+', '+Edit3.Text+
                    ', '+Edit4.Text+');';
   ShowMessage(Form1.Query1.Text); // Habe ich gemacht um zu sehen, was der dort reinschreibt.
   Form1.Query1.ExecSQL;
   Form1.Query1.SQL.Clear;
   Form1.Query1.SQL.Add('Select'
                + ' Lehrer."LehrerID", Lehrer."LEHnname",'
                + ' Lehrer."LEHvname", Lehrer."LEHkurz"'
                + ' From "E:\Sporttag\MySQL\Lehrer.DB" As Lehrer');
   Form1.Query1.ExecSQL;
   Form1.Query1.Active := True;
Könnt ihr mir sagen, was für einen Fehler ich dort habe ?

MFG,

MoYo
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

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

Re: Mehrere Tabellen mit Delphi verbinden

  Alt 24. Mai 2005, 08:44
Zitat von MoYo:
Also ich bin grad am Insert Into bei Delphi dran. Dabei habe ich folgendes Problem

Delphi-Quellcode:
 Form1.Query1.Active := False;
   Form1.Query1.SQL.Clear;
   Form1.Query1.SQL.Text:='INSERT INTO "E:\Sporttag\MySQL\Lehrer.DB" '+
                    '( LehrerID, LEHnname, LEHvname, LEHkurz)'+
                    ' VALUES '+
                    '('+Edit1.Text+','+Edit2.Text+', '+Edit3.Text+
                    ', '+Edit4.Text+');';
   ShowMessage(Form1.Query1.Text); // Habe ich gemacht um zu sehen, was der dort reinschreibt.
   Form1.Query1.ExecSQL;
   Form1.Query1.SQL.Clear;
   Form1.Query1.SQL.Add('Select'
                + ' Lehrer."LehrerID", Lehrer."LEHnname",'
                + ' Lehrer."LEHvname", Lehrer."LEHkurz"'
                + ' From "E:\Sporttag\MySQL\Lehrer.DB" As Lehrer');
   Form1.Query1.ExecSQL;
   Form1.Query1.Active := True;
Könnt ihr mir sagen, was für einen Fehler ich dort habe ?

MFG,

MoYo
Also erstmal solltest Du die Tabelle nicht direkt ansprechen, sondern den Pfad/Alias in einem TDatabase Objekt definieren. Sonst kannst Du das Programm ja nie auf einem anderen Rechner laufen lassen.

Dann musst Du, um Strings einzufügen, diese entweder mit Hochkomma versehen oder über Parameter in das SQL einfügen:
Delphi-Quellcode:
 Form1.Query1.Active := False;
   Form1.Query1.SQL.Clear;
   Form1.Query1.SQL.Text:='INSERT INTO "E:\Sporttag\MySQL\Lehrer.DB" '+
                    '( LehrerID, LEHnname, LEHvname, LEHkurz)'+
                    ' VALUES '+
                    '('+Edit1.Text+','+QuotedStr(Edit2.Text)+', '+QuotedStr(Edit3.Text)+
                    ', '+QuotedtStr(Edit4.Text)+');';
   ShowMessage(Form1.Query1.Text); // Habe ich gemacht um zu sehen, was der dort reinschreibt.
   Form1.Query1.ExecSQL;
   Form1.Query1.SQL.Clear;
   Form1.Query1.SQL.Add('Select'
                + ' Lehrer."LehrerID", Lehrer."LEHnname",'
                + ' Lehrer."LEHvname", Lehrer."LEHkurz"'
                + ' From "E:\Sporttag\MySQL\Lehrer.DB" Lehrer'); // Hier war ein As zu viel, das macht man nur bei Feldnamen
   // ExecSQL nur dann nehmen, wenn keine Rückgabedatenmenge entsteht, z.b. bei INSERT, UPDATE, DELETE
   // Alternative zu Active := true kann auch Open verwendet werden.
   Form1.Query1.Active := True;
Alternative mit Parametern:
Delphi-Quellcode:
 Form1.Query1.Active := False;
   with Form1.Query1 do
   begin
      SQL.Clear;
      SQL.Add('INSERT INTO "E:\Sporttag\MySQL\Lehrer.DB" ');
      SQL.Add('( LehrerID, LEHnname, LEHvname, LEHkurz)');
      SQL.Add('VALUES ');
      SQL.Add(':LehrerID, LEHnname, LEHvname, LEHKurz');
      ParamByName('LehrerId').AsString := Edit1.Text;
      ParamByName('LEHnname').AsString := Edit2.Text;
      ParamByName('LEHvname').AsString := Edit3.Text;
      ParamByName('LEHKurz').AsString := Edit4.Text;
      Open;
Generell solltest Du Dir auch angewöhnen, jede Variable nach ihrer Verwendung zu benennen und nicht auf dem Standardwert zu lassen. So ist EditLehrerVorname ja sicherlich wesentlich aussagekräftiger als Edit3. Bei lebel-Objekten halte ich das noch für vertretbar, wenn nur die Caption geändert wird. Aber jedes Objekt, bei dem Du mehrere Eigenschaften änderst oder in einer Sourcecodezeile ansprichst, sollte benannt sein.
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
MoYo

Registriert seit: 6. Apr 2005
20 Beiträge
 
#15

Re: Mehrere Tabellen mit Delphi verbinden

  Alt 24. Mai 2005, 12:02
Danke wieder mal für deine Super Hilfe !

| :LehrerID | -> Warum hast du dort einen Doppelpunkt gemacht ?

Das werde ich dann mal sofort versuchen

MFG,

MoYo
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

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

Re: Mehrere Tabellen mit Delphi verbinden

  Alt 24. Mai 2005, 12:15
Zitat von MoYo:
Danke wieder mal für deine Super Hilfe !

| :LehrerID | -> Warum hast du dort einen Doppelpunkt gemacht ?

Das werde ich dann mal sofort versuchen

MFG,

MoYo
Sorry, bei den anderen Parametern FEHLT der Doppelpunkt. Durch den vorangestellten Doppelpunkt werden ja die Parameter überhaupt identifiziert. Es muss also richtig heissen:SQL.Add(':LehrerID, :LEHnname, :LEHvname, :LEHKurz');
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
MoYo

Registriert seit: 6. Apr 2005
20 Beiträge
 
#17

Re: Mehrere Tabellen mit Delphi verbinden

  Alt 24. Mai 2005, 19:09
Zitat:
Also erstmal solltest Du die Tabelle nicht direkt ansprechen, sondern den Pfad/Alias in einem TDatabase Objekt definieren. Sonst kannst Du das Programm ja nie auf einem anderen Rechner laufen lassen.
Wie kann ich das mit dem TDatabase Objekt machen ? Ich habe noch nie damit gearbeitet und kenne mich mit dem Ding net aus

MFG,

MoYo
  Mit Zitat antworten Zitat
MoYo

Registriert seit: 6. Apr 2005
20 Beiträge
 
#18

Re: Mehrere Tabellen mit Delphi verbinden

  Alt 25. Mai 2005, 19:13
Noch eine Frage:

Ich weis, dass man zwei Tabellen mit den ID's verbinden kann.

Select From ..... Where LehrerID := SLehrerID <- Ist LehrerID in SchülerTabelle.

Wie ist dann die Verknüpfung beim Insert. Wenn ich z.B. einen Lehrernamen eingebe, dass da die ID reingeschrieben wird in Tabelle ?. Geht das mit dem DBLookupComboBox oder gibt es einen Befehl dafür ?



MFG,

MoYo
  Mit Zitat antworten Zitat
MoYo

Registriert seit: 6. Apr 2005
20 Beiträge
 
#19

Re: Mehrere Tabellen mit Delphi verbinden

  Alt 30. Mai 2005, 08:01
Noch eine Frage

Wie kann ich eine Textdatei auslesen lassen und dort die Daten in die Datenbank schreiben.

Beispiel:

SchülerName, Schülervorname, Klasse, Team

so sollte die Textdatei aussehen und die sollte dann ausgelesen und in die Datenbank geschrieben werden.

MFG,

MoYo
  Mit Zitat antworten Zitat
Albi

Registriert seit: 4. Mai 2003
Ort: Berlin
458 Beiträge
 
Delphi 7 Professional
 
#20

Re: Mehrere Tabellen mit Delphi verbinden

  Alt 30. Mai 2005, 08:44
Hallo,


Zitat von MoYo:
Ich weis, dass man zwei Tabellen mit den ID's verbinden kann.

Select From ..... Where LehrerID := SLehrerID <- Ist LehrerID in SchülerTabelle.

Wie ist dann die Verknüpfung beim Insert. Wenn ich z.B. einen Lehrernamen eingebe, dass da die ID reingeschrieben wird in Tabelle ?. Geht das mit dem DBLookupComboBox oder gibt es einen Befehl dafür ?
Das gib es mehrere Lösungen, entweder zu die List die ID aus der Table Lehrer aus und merkst sie Dir in einer Variablen oder du startest vor dem speichern eine neue Abfrage und holst so die ID des Lehrers. Dann kannst Du diese ganz normal mit mit einem Insert Statement in die DB schreiben.

Zitat von MoYo:
Wie kann ich eine Textdatei auslesen lassen und dort die Daten in die Datenbank schreiben.
Dazu suchst Du am besten mal hier in der DP, das Thema wurde schon oft behandelt.
Gruß

Albi
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 07:40 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