Hallo,
ich habe mir ein ungebundenes Formular erstellt mit:
einem Button "cmdTabelle", der ein Datenblatt "dblMitgliedsbeitrag" öffnen soll
und drei Kombinationsfeldern "cboJahr", "cboDienststelle" und "cboSortierung", die die Filterkriterien und das Sortierkriterium für dieses Datenblatt vorgeben
Code für den Button:
Private Sub cmdDatenblatt_Click()
On Error GoTo Err_cmdDatenblatt_Click
Dim stDocName As String
Dim stLinkCriteria As String
stDocName = "dblMitgliedsbeitrag"
stLinkCriteria = "Nz([jahr_id]=" & Me!cboJahr & ") AND Nz([dst_id]=" & Me!cboDienststelle & ")"
DoCmd.OpenForm stDocName, acFormDS, , stLinkCriteria
If cboSortierung Is Not Null Then
Forms!dblMitgliedsbeitrag.Form.OrderBy = Me!cboSortierung
End If
Exit_cmdDatenblatt_Click:
Exit Sub
Err_cmdDatenblatt_Click:
MsgBox Err.Description
Resume Exit_cmdDatenblatt_Click
End Sub
Meine Fragen dazu wären
1. Wie kann das Formular geöffnet werden, wenn ein Kombinationsfeld oder beide leer bleiben? bzw. wie kann ich ein "Alle" einfügen und dementsprechend dann Alles anzeigen lassen, also ohne Filter?!
2. cboSortierung hat als Datensatzherkunft eine Feldliste aus einer Abfrage (natürlich die Abfrage die auch als Datensatzherkunft für das Datenblatt dient). Da stehen im Kombinationsfeld als Auswahl aber die Feldnamen (dst_name, teil_nr,....) kann man diese auch anders benennen? Denn wie soll der Datenbankverwender wissen, was "dst_name" bedeutet?
Lieben Dank für die Hilfe im Voraus
Cira
Hallo,
Private Sub cmdDatenblatt_Click()
On Error GoTo Err_cmdDatenblatt_Click
Dim stDocName As String
Dim stLinkCriteria As String
stDocName = "dblMitgliedsbeitrag"
If Len(Me!Me!cboJahr) > 0 Then stLinkCriteria = " And [jahr_id]=" & nz(Me!cboJahr,0)
If Len(Me!cboDienststelle) >0 Then stLinkCriteria = stLinkCriteria & " AND dst_id=" & nz(Me!cboDienststelle,0)
If Len(stLinkCriteria) > 0 Then stLinkCriteria = mid (stLinkCriteria ,6)
DoCmd.OpenForm stDocName, acFormDS, , stLinkCriteria
If Len(Me!cboSortierung) > 0 Then
Me.OrderBy = Me!cboSortierung
Me.OrderByOn =True
End If
Exit_cmdDatenblatt_Click:
Exit Sub
Err_cmdDatenblatt_Click:
MsgBox Err.Description
Resume Exit_cmdDatenblatt_Click
End Sub
2)
um eine zweispaltige Feldliste in ein Kombilistenfeld zu bekommen, könntest Du etwa diesen Code benutzen:
Private Sub cboSortierung _Enter() 'oder ein anderes auch geeignetes Ereignis
Dim tbl As dao.TableDef, fld As dao.Field, db As Database
Set db = CurrentDb
Set tbl = db.TableDefs("Tabelle1")
Me!cboSortierung.RowSource = ""
For Each fld In tbl.Fields
On error resume next
Me!cboSortierung.AddItem fld.Name & ";" & fld.Properties("caption")
Next
Set tbl = Nothing: Set db = Nothing
End Sub
Im Tabellenentwurf gibst du im Feld "Beschriftung" bei jedem zur Anzeige vorgesehen Feld jeweils einen verständlichen Namen ein.
Hallo,
@Franz
ZitatcboSortierung hat als Datensatzherkunft eine Feldliste aus einer Abfrage
Da braucht's IMO nur ein Alias pro Feld in der Abfrage.
@cira
Also etwa so:
SELECT tbl.dst_name AS Dienststelle, ... (tbl=Tabellenname)
hth
gruss ekkehard
Hallo,
mhmm, ja, dann steht der Aliasname in der Kombiliste, bzw. -feld und der ist in der zu sortierenden Datenherkunft des Forms dort dann evtl. nicht zu finden....
@Franz: Danke das mit den Filtern funktioniert super. Die Sortierung macht er aber leider nicht, zeigt auch keine Fehlermeldung. Ich dachte dass die Zuweisung (Me) vielleicht nicht passt, aber wenn ich Form!abfMitgliedsbeitrag.Form.OrderBy eingebe funktionierts ebenfalls nicht.
:-(
und das mit der Feldliste habe ich glaube ich nicht ganz gecheckt! Was muss bei dem Code alles ersetzt werden? "Tabelle1" sollte mich "abfMitgliedsbeitrag" ersetzt werden, oder?! Aber nur das einfügen funktioniert nicht. Es ist trotzdem nur eine Spalte im Kombifeld!
Halo,
das Kombifeld muss als Einstellung etwa:
Spaltenanzahl: 2
Spaltenbreiten: 0cm;3cm
aufweisen.
zudem zielt der Code auf eine Tabelle ab und nicht auf eine Abfrage.
Wie lautet der SQL-String der Abfrage?
Wie lautet die Datenherkunft des Forms?
Hallo Franz,
Zitatmhmm, ja, dann steht der Aliasname in der Kombiliste, bzw. -feld und der ist in der zu sortierenden Datenherkunft des Forms dort dann evtl. nicht zu finden....
Touché; - dann doch besser die Werteliste zusammen bauen.
Oder das Feld doppelt in die Abfrage nehmen, einmal mit und einmal ohne Alias?
gruss ekkehard
Hallo,
"doppelt" nützt auch nichts, dann erscheinen sowohl Original- wie auch Aliasname in EINER Spalte des Kombifeldes bei Einstellung "Feldliste".
Deswegen ja der ganze Aufwand... ;)
Also ich hab die Probleme folgendermaßen gelöst:
1. Das mit den Aliasnamen war eine gute Idee. Habe im Abfrageentwurf in der Spalte bei "teil_nachname" einfach ein "Nachname: teil_nachname" eingetragen. Da für das zu öffnende Formular auch diese Abfrage als Datensatzherkunft dient, funktioniert das einwandfrei! Super
2. habe ich den Teil im VBA mit cboSortierung in den Ereignis-Code "Beim Öffnen" des zu öffnenden Forms verschoben und den Bezug vertauscht.
Funktioniert prima!!
Private Sub Form_Open(Cancel As Integer)
If Len(Forms!frmFiltereigenschaften!cboSortierung) > 0 Then
Me.OrderBy = Forms!frmFiltereigenschaften!cboSortierung
Me.OrderByOn = True
End If
End Sub
Danke für Eure Ideen
Hallo Franz,
Zitat"doppelt" nützt auch nichts, dann erscheinen sowohl Original- wie auch Aliasname in EINER Spalte des Kombifeldes bei Einstellung "Feldliste".
Das wusste ich nicht. Hab's glaub ich auch noch nie verwendet.
Aber wenn's denn jetzt beim OP läuft, is ja gut.
gruss ekkehard
Hallo,
ja, er hat zufällig den "Sonderfall", dass die gleiche Abfrage für die Form-Datenherkunft und die Kombifeld-Datensatzherkunft verwendet wird. ;)