Hallo,
ich habe bitte folgendes Problem..
Private Sub btnFormOeffnen_Click()
DoCmd.OpenForm _
FormName:="Ferienschueler", _
WhereCondition:="SchuelerID = " & Me!SchuelerID
End Sub
öffnet mir das Formular.
Wie bekomme ich es aber hin, wenn "SchuelerID" selber auch eine Variable ist?
Habe ein Verlaufshistorie Formular, welches auf div. Formulare zugreift und die entsprechende ID als Bezug variert. Habe schon viel probiert.
Grüße Martin
Vielleicht kommst Du zu einem Ansatz, wenn Du einen Bezug von Deinem Formularöffnen zu dem Verlaufsformular herstellst.
In Deiner Darstellung ist dergleichen nichts erkennbar.
Zitat von: martie01 am Dezember 16, 2021, 12:49:16Wie bekomme ich es aber hin, wenn "SchuelerID" selber auch eine Variable ist?
WhereCondition als ganzes ist ein String. Den kannst du mit üblichen Stringverkettungsoperationen zusammensetzen, wie es dir gefällt.
hallo,
habe ich leider nicht ganz verstanden. ::)
Das Oben war eher ein Beispiel.
Private Sub Verlauf_Click()
Dim x As Variant, y As Variant, z As Variant
Dim recA As DAO.Recordset
y = "tbl_" & Me!Verlauf.Column(2)
x = "frm_" & Me!Verlauf.Column(2)
strSQL = "Select * from " & y 'suche den Namen aus Tabelle
Set recA = CurrentDb.OpenRecordset(strSQL)
z = recA.Fields(0).name
Set recA = Nothing
DoCmd.OpenForm x, _
WhereCondition:=(z) = Me!Verlauf.Column(3)
End Sub
Wie muss ich das (z) Einbinden? Er öffnet das richtige Formular, aber halt nicht den richtigen Datensatz. Das ID Feld ist doch eher ein "Integer" Feld?!
Hallo,
ZitatDas Oben war eher ein Beispiel.
Sinnvoll wäre ein authentisches Beispiel mit Darlegung aller Tabellen- und Tabellenfeld-Namen.
Sonst eiert man im Nebel herum.
ZitatPrivate Sub Verlauf_Click()
Dim x As String, y As String, z As String, strKrit as String
'''Dim recA As DAO.Recordset
y = "tbl_" & Me!Verlauf.Column(2)
x = "frm_" & Me!Verlauf.Column(2)
strKrit = nz(Me!Verlauf.Column(3),0)
z = Me!Verlauf.Column(4) ' enthält Vergleichsfeld der Tabelle
''' strSQL = "Select * from " & y & " Where 1=2" ' Tabelle öffnen ohne weitere DS.
''' Set recA = CurrentDb.OpenRecordset(strSQL, dbOpenSnapshot)
''' z = recA.Fields(0).Name 'Feld 0 ist nicht eindeutig, weil * in der Select-Liste.
''' recA.Close
''' Set recA = Nothing
DoCmd.OpenForm x, , , z & " = " & strKrit 'Nur wenn Tabellenfeld z den Datentyp Long besitzt.
End Sub
Der ganze Salmon mit dem fragwürdigen Eruieren des Tabellenfeldnamens ist vermutlich besser so zu gestalten, als dass das Kombi ("Verlauf") gleich in einer weiteren Spalte (4) den zu verwendeten Tabellenfeldnamen enthält.
Bei Öffnen der Tabelle per Openrecordset und * im Select ist die Reihenfolge der Felder vom Aufbau der Tabelle abhängig, so dass Fields(0).Name nicht unbedingt den richtigen Feldnamen liefert.
Hallo,
also Vielen Dank allen Beteiligten..
DoCmd.OpenForm x, , , z & " = " & Me!Verlauf.Column(3)
War die Lösung.Noch zur Erläuterung..
Das ID Feld habe ich in allen Tabellen an erster Stelle. So clever war ich wenigstens. ;)
Grüße Martin
Hallo,
ZitatDas ID Feld habe ich in allen Tabellen an erster Stelle.
Das dürft völlig egal sein (ist aber trotzdem sinnvoll).
Tabellen verwendet man ohnenhin nur selten direkt, sondern immer über Abfragen. Und in Abfragen kannst Du die Felder in beliebiger Reihenfolge anordnen.
Sobald Du eine zuverlässige reproduzierbare Sortierung benötigst, ist eine Abfrage zwingend erforderlich.