Mai 25, 2022, 12:25:32

Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!


Formular mit Variable öffnen

Begonnen von martie01, Dezember 16, 2021, 12:49:16

⏪ vorheriges - nächstes ⏩

martie01

Dezember 16, 2021, 12:49:16 Letzte Bearbeitung: Dezember 16, 2021, 14:58:49 von MzKlMu
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

ebs17

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.
Mit freundlichem Glück Auf!

Eberhard

PhilS

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.
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

martie01

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?!

DF6GL

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.



martie01

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

MzKlMu

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.
Gruß
Klaus