Access-o-Mania

Access-Forum (Deutsch/German) => Formular => Thema gestartet von: martie01 am Dezember 16, 2021, 12:49:16

Titel: Formular mit Variable öffnen
Beitrag von: martie01 am Dezember 16, 2021, 12:49:16
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
Titel: Re: Formular mit Variable öffnen
Beitrag von: ebs17 am Dezember 16, 2021, 13:21:53
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.
Titel: Re: Formular mit Variable öffnen
Beitrag von: PhilS am Dezember 16, 2021, 14:33:06
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.
Titel: Re: Formular mit Variable öffnen
Beitrag von: martie01 am Dezember 16, 2021, 20:57:38
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?!
Titel: Re: Formular mit Variable öffnen
Beitrag von: DF6GL am Dezember 17, 2021, 09:37:19
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.


Titel: Re: Formular mit Variable öffnen
Beitrag von: martie01 am Dezember 17, 2021, 16:14:15
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
Titel: Re: Formular mit Variable öffnen
Beitrag von: MzKlMu am Dezember 17, 2021, 16:22:03
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.