Verknüpfung einer Haupt- u Untertabelle mit ADOQuery möglich?



  • Hallo,
    bin gerade dabei mich in die DB-programm. einzuarbeiten. Dazu habe ich eine DB mit MySQL erstellt. Den Zugriff darauf von BCB6 Prof aus konnte ich anhand des Tutorials "FH-Karlsruhe" bereits erfolgreich mit kleinen ADO-Programmen üben. In diesem Tut., das hier gerne des Öfteren erwähnt wird, ist auch ein Beispiel, wie man eine Haupttabelle mit einer Untertabelle über einen gemeinsamen Index verbindet. Das Beispiel wird mit je zwei BDE-Table- u DataSource-Komponenten durchgeführt. Klappt soweit auch mit ADO ganz gut.

    Frage: Ließe sich das auch mit ADOQuery-Komponenten machen? Wenn ja, welche Komponenten würde ich benötigen? Wie müßte ich was im OI verknüpfen?

    Eine kurze Beschreibung wäre super.

    Vielen Dank schon 'mal für Eure 1000 Antworten ;).



  • Dafür sind SQL JOIN zuständig
    http://www.w3schools.com/sql/sql_join.asp



  • Hallo @VergissEs,
    vielen Dank für Deinen Hinweis.
    Guter Gedanke mit JOIN. Allerdings erhalte ich dann nur 1 Ergebnistabelle.

    Unabhängig davon habe ich ein Beispiel "Shape" auf meinem PC wieder entdeckt, das ich glaube ich einmal von borland-developer.net/ unter Examples geladen hatte. Darin wird mit der Beispieldatenbank "bcdemos.mdb"gezeigt wie man mit je 2 ADODataSet, TDataSource u TDBGrids eine Haupt- u eine Untertabelle erzeugt, also genau das wonach ich suchte.

    Die Abfrage findet über die Eigenschaft CommandText in der Komponente TADODataSet statt. Haupt- u Untertabelle sind über das Feld "CustNo" verknüpft

    Leider verstehe ich aufgrund fehlendem Quellcodes im Beispielprogramm das Ganze noch nicht so recht.

    Deshalb meine Frage:
    Gibt es irgendwo eine Quelle mit der ich mir die Befehlszeile hinter CommandText erklären kann? Es handelt sich hier ja nicht um reine MySQL-Befehle sondern scheinbar um irgendeinen SQL-Dialekt?

    Hier der entsprechende Ausschnitt aus der ShapeMain.dfm (was anderes kann ich leider nicht anbieten 😞 , es gibt nur das Formular und die Kompos darauf)

    object Customers: TADODataSet       //gehört zu Haupttabelle Kunden
      Connection = ADOConnection1
      CursorType = ctStatic
      CommandText = 
    //?????????????????????????????????????????????????????????????????????????
      'SHAPE {select * from customer} '#13#10'APPEND ({select * from orders}' +
      ' AS Orders'#13#10' RELATE CustNo TO CustNo) '
    //?????????????????????????????????????????????????????????????????????????
      Parameters = <>
      Left = 12
      Top = 196
      object CustomersCustNo: TFloatField    //Spalte 1 = gemeinsames Verknüpfungsfeld!
      FieldName = 'CustNo'
      end
      object CustomersCompany: TWideStringField   //Spalte 2
      FieldName = 'Company'
      Size = 30
      end
     ..usw.
      object CustomersOrders: TDataSetField      //letzte Spalte
      FieldName = 'Orders'
      ReadOnly = True
      end
    end
    
    object OrderSource: TDataSource      //gehört zu Untertabelle Aufträge
    DataSet = Orders
    Left = 49               
    Top = 337
    end
    
    object Orders: TADODataSet    //TADODataSet der Untertabelle Aufträge
      CursorType = ctStatic
      DataSetField = CustomersOrders
      Parameters = <>
      Left = 11
      Top = 337
      object OrdersOrderNo: TFloatField       //Spalte 1
      FieldName = 'OrderNo'
      end
      object OrdersCustNo: TFloatField       //Spalte 2 = gemeinsames Verknüpfungsfeld!
      FieldName = 'CustNo'
      end
    ...usw.
    end
    


  • Haaallooh, haaallooh, ist hier jemand?

    Ich hatte mir solche Mühe mit meinem Post gemacht 😃 . Gibt's hier keinen - @VergissEs 'mal ausgenommen - der mir zu meiner bescheidenen Frage weiterhelfen kann?

    Vielleicht habe ich mich etwas zu umständlich ausgedrückt.
    Ich formulier es deshalb nochmal:

    CommandText =
    //?????????????????????????????????????????????????????????????????????????
    'SHAPE {select * from customer} '#13#10'APPEND ({select * from orders}' +
    ' AS Orders'#13#10' RELATE CustNo TO CustNo) '

    //?????????????????????????????????????????????????????????????????????????

    Das, was mit "?????" eingerahmt ist, ist wie jeder sieht eine SQL-Abfrage.

    Fragen:
    Ist das ein spezieller BCB-SQL?
    Oder hat der SQL etwas mit der Beispieldatenbank von Borland zu tun?

    Ich arbeite mit MySQL. Läßt sich CommandText = auch mit MySQL-Abfragen zuweisen? Bitte hierauf nicht mit "Probier's doch aus" antworten, das mache ich nämlich gerade!



  • Hallo

    Google zum Beispiel mal nach SQL SHAPE, da findest du zum Beispiel das hier.
    Ist also nicht Builder oder MySQL-spezifisch, sondern ein Teil von MS ADO

    bis bald
    akari



  • Dieser Thread wurde von Moderator/in akari aus dem Forum VCL/CLX (Borland C++ Builder) in das Forum Datenbanken verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.


Anmelden zum Antworten