Supportnet Computer
Planet of Tech

Supportnet / Forum / Datenbanken

RowSource für Kombifeld, alphabetisch sortiert übergeben





Frage

Grüezi (Access97) In einem Formular habe ich ein Listenfeld "lstTables". Darin werden die Namen verschiedener Tabellen aufgelistet. Ich markiere einen Tabellennamen und öffne mit einem Buttonklick ein zweites Formular "frmBildAnzeige" und übergebe gleichzeitig als RecordSource für dieses Formular = Me.lstTables. Im gleichen Formular hat es ein Kombifeld "Suchen". Diesem übergebe ich als RowSource ebenfalls = Me.lstTables. [b]Klappt alles wunderbar mit folgendem Code:[/b] [code] Private Sub Button_Click() If Len(Trim(Nz(Me!lstTables))) > 0 Then DoCmd.OpenForm "frmBildAnzeige" Forms!frmBildAnzeige.RecordSource = Me!lstTables Forms!frmBildAnzeige!suchen.RowSource = Me!lstTables End If End Sub [/code] [b]Nun das Problem[/b] Die Datensätze werden aufsteigend sortiert nach Primärschlüssel übergeben. Für das Formular ist das i.O. Im Kombifeld "Suchen" möchte ich die Datensätze jedoch alphabetisch nach dem Feld "Dateiname" (kommt in jeder Tabelle vor) anzeigen lassen. Wie geht das? Vielen Dank für jede Hilfe. Gruss Köbi

Antwort 1 von Teddy7

Hi Köbi !
Ich nehme an rowsource ist gleich Datenherkunft. Wenn Du da eine Tabelle angibst, dann sind die Daten so sortiert wie sie in der Tabelle stehen oder wie es in der Tabelle (Eigenschaften->sortiert nach) hinterlegt ist.
Wenn diese Sortierung für das Formular richtig ist, dann solltest Du daran auch nix ändern.
Es bleiben Dir zwei Möglichkeiten :
1) Lege für jede mögliche Tabelle eine Abfrage an. Den Namen der Abfrage übergibst Du dann als rowsouce. In der Abfrage kannst Du natürlich sortieren wie Du willst.
2) Übergib als rowsource die SQL-Sequenz
also z.B.
SELECT DISTINCTROW abfKred.Kred, abfKred.Firma FROM abfKred ORDER BY abfKred.Firma;
Dazu mußt Du natürlich die Feldnamen kennen, die angezeigt werden sollen.
Gruß
Teddy

Antwort 2 von Koebi

Hallo Teddy

Danke.
Ja, RowSource ist die Datensatzherkunft für das Kombifeld.

Das mit den Abfragen kenne ich schon. Der Witz an der Geschichte ist aber, dass die Tabellen ständig wechseln. Es kommen neue hinzu und andere werden gelöscht. Und in meinem Listenfeld im ersten Formular habe ich jeweils immer eine aktuelle Auflistung der vorhandenen Tabellen.
Klar kann ich jedesmal eine Abfrage für das Kombifeld erstellen, wollte ich aber vermeiden. Ich müsste dann nachher auch jedesmal die Datensatzherkunft für das Kombifeld manuell anpassen.

Die schöne Eleganz, einfach auf Klick den Zauber zu übergeben, wie es bei der RecordSource für das Formular klappt, entfällt dann.
Und sowas stimmt mich ungemein traurig, wo ich doch soviel Wert auf elegante Lösungen lege (und auf Bequemlichkeit)!:-))

Gruss
Köbi

Antwort 3 von Teddy7

Hi Köbi !
Warum mußt Du denn jedesmal die Datensatzherkunft für das Kombifeld manuell anpassen ?
Reicht es nicht wenn Du statt der Tabelle die Abfrage als rowsource übergibst ?
Das wäre ja sonst wirklich richtig Arbeit - absolut unzumutbar !!!
Es soll übrigens eine Möglichkeit geben, Abfragen mit VBA zu erstellen - ich hab´s allerdings noch nicht gemacht.
Gruß
Teddy


Antwort 4 von .struppi

Hi Köbi
Ich würde wie Teddy schon sagt eine Sql-Anweisung aus dem Namen der Tabelle kreieren und hinten anhängen :
ORDER BY [Dateiname]

Die SQL dann zuweisen .
Fertig
Gruß Struppi

Antwort 5 von .struppi

Hi Köbi
Hier mal ein Beispiel wie das mit VBA gemacht werden könnte:


Sub SQLmachen()
Dim sql1, TabName As String
TabName = "VariableTabellenNAME"

sql1 = "SELECT " & TabName & ".*, " & TabName & ".Dateiname" _
& "FROM " & TabName & " ORDER BY " & TabName & ".Dateiname;"

Me.Kombifeld.RowSource = sql1
End Sub


Ist nicht getestet
Gruß struppi

Antwort 6 von Koebi

Hallo Teddy und Punkt_struppi

Herzlichen Dank. Es funktioniert!!

@Teddy
Eine einfache Abfrage mit VBA bringe ich gerade noch fertig. Aber das Problem war der Tabellenname als Variable.

@Punkt_struppi
Bloss anhängen von ORDER BY [Dateiname] habe ich schon versucht gehabt. Aber Access ist damit nicht einverstanden.

Der Code sieht jetzt so aus:

Private Sub Befehl3_Click()
If Len(Trim(Nz(Me!lstTables))) > 0 Then
    
    DoCmd.OpenForm "frmBildAnzeige"
    Forms!frmBildAnzeige.RecordSource = Me!lstTables
    Forms!frmBildAnzeige!ImageTable = Me!lstTables
    
    Dim sql1, TabName As String
    TabName = Me!lstTables
    sql1 = "SELECT " & TabName & ".IDNum," & TabName & ".Dateiname" & " FROM " & TabName_
& " ORDER BY " & TabName & ".Dateiname;"
      
    Forms!frmBildAnzeige!suchen.RowSource = sql1
            
End If
End Sub


Das schönste Ei hast Du mir mit dem fehlenden Leerschlag vor FROM gelegt. Das habe ich gesucht wie ein Osterei, weil Access immer nach einem fehlenden Operator gemeckert hat.

Also nochmals herzlichen Dank. Und Dir, Punkt_struppi, antworte ich in Zukunft nur noch, wenn Du Dich als Original-struppi oder als Urstruppi meldest.;-))

Gruss aus dem Süden
Köbi


Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: