PDA

Vollständige Version anzeigen : Formular mit Datensatz öffnen


ah300476
24.03.2006, 10:57
Hallo,

bräuchte mal Hilfe.
Ich habe in meinem Dokument die Felder "Jahr" und "Nummer". Nun möchte ich dieses Formular öffnen und einen Datensatz aufrufen, bei dem für Jahr = 06 und für Nummer = 002 ist.
Da aber keines dieser Felder einen Primärschlüssel hat passiert nun folgendes.
Hier der Code mit dem ich das Aufrufe:

Private Sub QMB_ErgebnisListe_DblClick(Cancel As Integer)
Dim jahr As String
Dim nummer As String
Dim stFormName As String

stFormName = "frm_QMB"

jahr = Format(Me.QMB_ErgebnisListe.Column(0), "00")
nummer = Format(Me.QMB_ErgebnisListe.Column(1), "000")

DoCmd.OpenForm stFormName, acNormal, , , acFormEdit

Forms("frm_QMB")![QMB-Jahr] = jahr
Forms("frm_QMB")![QMB-Nummer] = nummer
Forms("frm_QMB").Requery
End Sub

Das Formular wird geöffnet und es werden die Werte eingetragen. Dadurch wird aber schon der neue Datensatz erstellt. Mach ich nun das Requery wird der Datensatz geöffnet den ich eigentlich möchte. Hab jetzt aber immernoch einen leeren Datensatz mit den gleichen Werten für Jahr und Nummer.

Mein Versuch die Bedingung beim öffnen des Formulars zu übergeben scheitern wohl daran dass die eigentliche abfrage die hinter dem Formular steht eben auf Felder im Formular zurückgreift.
Denke das sollte ich mal korrigieren und hab dann vielleicht die möglichkeit dass es als WHERE Bedingung im DoCmd.OpenForm klappt.

Vielleicht kann mir ja jemand bei meinen Gedankengängen unterstützen ich habe hier leider niemand mit dem ich das ausdiskutieren kann.

mfg
Andi

Anne Berg
24.03.2006, 11:35
Ich denke, du solltest den letzten Ansatz weiter verfolgen. Die Datenherkunft des Formulars (Tabelle oder Abfrage) sollte die Felder "Jahr" und "Nummer" enthalten, dann kannst du das Kriterium in der Open-Anweisung einsetzen.

Steffen0815
24.03.2006, 11:36
Hallo Andy,
ich denke du solltest das Formular mit Filter öffnen.
Ausgehend davon das Nummer ein Text ist :) , sollte das so funktionieren:
Private Sub QMB_ErgebnisListe_DblClick(Cancel As Integer)
Dim jahr As String
Dim nummer As String
Dim stFormName As String
Dim Bedingung As String

stFormName = "frm_QMB"

jahr = Format(Me.QMB_ErgebnisListe.Column(0), "00")
nummer = Format(Me.QMB_ErgebnisListe.Column(1), "000")

Bedingung = "[QMB-Jahr] = '" & jahr & "' And [QMB-Nummer] = '" & nummer & "'"
DoCmd.OpenForm stFormName, acNormal, , Bedingung, acFormEdit
End Sub

ah300476
27.03.2006, 07:17
Guten Morgen,

so hab das jetzt umgestellt und versucht das mit der Bedinung zu machen.
Allerdings bricht er mir mit einem Laufzeitfehler 2501 ab. Kein Plan was das ist wo das her kommt. Denke es hängt mit der Bedingung zusammen.
Hab sie aber genau so gemacht wie Steffen es geschrieben hat.


aaahhh habs ;)

Private Sub btn_QmbAnzeigen_Click()
Dim jahr As String
Dim nummer As String
Dim stFormName As String
Dim Bedingung As String

stFormName = "frm_QMB"
jahr = Format(Me.QMB_Jahr, "00")
nummer = Format(Me.QMB_Nummer, "000")

Bedingung = "[QMB-Jahr] = " & jahr & " AND [QMB-Nummer] = " & nummer

DoCmd.OpenForm "frm_QMB", acNormal, , Bedingung, acFormEdit

End Sub

da war noch ein syntax fehler.
Ohne die doofen einfachen hochkommas gehts.

Danke für Eure Unterstützung

Gruss Andi

rapunzel
27.03.2006, 07:29
Ohne die doofen einfachen hochkommas gehts.
Steffen hat ja geschrieben:....Ausgehend davon das Nummer ein Text ist......

Bei Zahl brauchst die ' natürlich nicht ;)

Steffen0815
27.03.2006, 07:42
Hallo,
wieder ein typisches Beispiel, wie einem die "Großzügigkeit" von VBA auf die Füße fällt.
Du solltest Zahlen auch als Zahlen definieren.
Dim jahr As String
Dim nummer As String


Die Umwandlung
jahr = Format(Me.QMB_Jahr, "00")
nummer = Format(Me.QMB_Nummer, "000")
kannst du dir dann auch sparen. Korrekt wäre höchstens ein "Val"