Announcement

Collapse
No announcement yet.

Wie Tabelle nach verknüpfter Spalte sortieren?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Wie Tabelle nach verknüpfter Spalte sortieren?

    Hallo Profis,

    ich möchte gerne meine Haupt-Tabelle nach einer verknüpften Spalte sortieren. In der Haupt-Tabelle steht natürlich nur der Index. Ich arbeite mit RadStudio 2009 Pro und einer Access-Datenbank (OfficeXP), die ich mit den dbGo-Komponenten öffne (TAdoConnection, TAdoTable, Jet OleDB 4.0).

    Beispiel:

    Haupttabelle "Vorgang" enthält die Spalte "Lieferant".
    Der Index dieser Spalte verweist auf die Spalte "Name" in der Tabelle "Lieferant".
    Sortiere ich die Haupttabelle nach der Spalte "Lieferant", wird verständlicherweise nur der Index sortiert:

    AdoTab_Vorgang.Sort := 'Lieferant ASC';

    Die Tabelle "Lieferant" ist nach Lieferanten-Name sortiert. Wie kann ich diese Sortierung in die Tabelle "Vorgang" übernehmen, falls das überhaupt irgendwie geht?
    Die Tränen, die du nicht weinen willst, müssen andere für dich vergießen. (Frei nach: wer nicht leiden will, muß hassen.)

  • #2
    Schmeiß TADOTable weg und nimm TADODataset und bastel dir eine entsprechende Query in der Art:

    SELECT <tab1>.Feld1, <tab1>.Feld2, ... FROM <tab1> INNER JOIN <tab2> ON <tab1>.<Fk-Feld> = <tab2>.<PK-Feld> order by <tab2>.<Gewünschtes_Sort_Feld>
    Genau Syntax bekommst du raus wenn du die entsprechende Query erst mal mit dem Query-Builder-Mitteln von Access zusammen baust.

    Comment


    • #3
      Hallo Bernhard,

      Originally posted by Bernhard Geyer View Post
      Schmeiß TADOTable weg und nimm TADODataset und bastel dir eine entsprechende Query in der Art:
      Genau Syntax bekommst du raus wenn du die entsprechende Query erst mal mit dem Query-Builder-Mitteln von Access zusammen baust.
      Mit AdoDataSet hatte ich mich bislang noch nicht befaßt, doch:

      Eine entsprechende Abfrage innerhalb der Access-Umgebung habe ich hinbekommen und mir aus der SQL-Ansicht den SQL-Befehl kopiert. Danach habe ich ein TAdoDataSet auf mein Datenmodul geworfen - und mich erst einmal über die magere Auskunft der Online-Hilfe gewundert. Okay, sach ich mir, nicht entmutigen lassen. Bin dann in meine Sortier-Procedure und hab die Zeile für die erste Spalte mit Fremdschlüssel (fk) abgeändert. Aus AdoTab.Sort := '...' wurde folgender Code:
      Code:
      PROCEDURE TDatMod.Sortieren(Sender: TObject);
      BEGIN
           CASE FormMain.Combo_Sort.ItemIndex OF
      
            0 : ATab_Vorgang.Sort := 'Index ASC';
            1 : ATab_Vorgang.Sort := 'KDatum ASC';
            2 : BEGIN
                     ADset_Vorgang.Active := FALSE;
                     ADset_Vorgang.CommandText :=
                     'SELECT Vorgang.Index, Vorgang.KDatum, Vorgang.Warentyp, Vorgang.Groesse, Vorgang.Hersteller, ' +
                     'Vorgang.SerienNr, Vorgang.Verkaufer, Vorgang.VDatum, Vorgang.Kaufer, Vorgang.EWB, Vorgang.Amt, ' +
                     'Vorgang.AmtDatum, Vorgang.Notiz, Vorgang.Marker ' +
                     'FROM Warentyp INNER JOIN Vorgang ON Warentyp.Index = Vorgang.Warentyp ' +
                     'ORDER BY Vorgang.Warentyp';
                     ADset_Vorgang.Active := TRUE;
               END;
            3 : ...
      Leider hat dieser ganze Code keinerlei Auswirkung. Die anderen Sortierbefehle funktionieren, doch bei Combo_Sort.ItemIndex = 2 passiert absolut gar nichts, weder eine Änderung im DBGrid noch im Formular mit den Editfeldern und LookUpCombos. Die Sortierung bleibt unverändert. Also mach ich was falsch. Nur: was?

      Ich hab im Access-Abfrage-Entwurfsmodus den Warentyp "aufsteigend sortiert" angewählt. Die Sortierung in der Darstellung der Abfrage erfolgt jedoch wiederum nicht nach dem Alphabet der Warentypen, sondern nach deren Indexfeld. Ergo kann der obige SQL-Befehl gar nicht die erhoffte Wirkung zeitigen. Aber es muß irgendwie gehen, denn schließlich kann ich in Access einfach in der Haupttabelle "Vorgang" mittels Klick auf die Titelleiste der Tabelle die gewünschte Sortierung auswählen, auch nach Feldern mit Fremdschlüsseln.

      Und jetzt, nach unendlichem herumprobieren, ist endlich der Groschen gefallen: Das entsprechende DataSource war nicht mit dem Dataset verknüpft, sondern mit einem AdoTable. Immerhin, ich bin ganz von alleine drauf gekommen ;-)

      So, jetzt nehm ich mir ein paar Stunden und stell alles auf Dataset um ...
      Zuletzt editiert von Perlsau; 25.06.2009, 13:32. Reason: Lösung gefunden
      Die Tränen, die du nicht weinen willst, müssen andere für dich vergießen. (Frei nach: wer nicht leiden will, muß hassen.)

      Comment


      • #4
        Nochmals vielen Dank, Bernhard,

        jetzt mit AdoDataSet und CommandString funktioniert jede beliebige Sortierung. Nur eines hab ich noch rausfinden müssen: das Ende des SQL-Strings darf sich nicht auf die Haupttabelle beziehen, sondern muß heißen:
        'Order by Warentyp.WTyp' statt 'Order by Vorgang.Warentyp',
        denn letzteres sortiert wieder nur nach dem Index. WTyp ist die zweite Spalte der Tabelle Warentyp, die erste ist der automatische Index. Schreib ich ersteres, werden tatsächlich auch verknüpfte Spalten richtig sortiert. WUNDERBAR
        Die Tränen, die du nicht weinen willst, müssen andere für dich vergießen. (Frei nach: wer nicht leiden will, muß hassen.)

        Comment

        Working...
        X