Hallo,
in meiner Quartett-DB habe ich im Erfassungsformular integrierte UFO's, Listenfelder etc. Ein solches Listenfeld zeigt mir die Datensätze der DB an (siehe bild1). Wenn ich einen Datensatz aus diesem Listenfeld markiere, dann wechselt es zu diesem Datensatz (siehe bild2). Das ganze funktioniert so:
Private Sub lstSpielAuswahl_AfterUpdate()
' Den mit dem Steuerelement übereinstimmenden Datensatz suchen.
Me.Recordset.FindFirst "[SpielID] = " & Nz(Me![lstSpielAuswahl], 0)
End Sub
Jetzt dachte ich, dass man es auch bei einem UFO anwenden kann (bild3). Ich habe den Code dazu wie folgt angepasst und an ein Doppelklickereignis binden wollen.
Private Sub cboIdentQuartettNr_DblClick(Cancel As Integer)
' Den mit dem Steuerelement übereinstimmenden Datensatz suchen.
Me.Recordset.FindFirst "[SpielID]= " & Nz(Me![cboIdentQuartettNr], 0)
End Sub
Führe ich den DK aus, dann kommt Laufzeitfehler 3070.
Das Microsoft Access-Datenbankmodul erkennt 'SpielID' nicht als gültigen Feldnamen oder Ausdruck.
Debugge ich das, dann springt er zu der gelb markierten Zeile:
Me.Recordset.FindFirst "[SpielID]= " & Nz(Me![cboIdentQuartettNr], 0)
Ich muss natürlich noch dazu sagen, dass die Abfrage des Ufo ein wenig speziell ist (bild4)
SQL seitig sieht die Abfrage wie folgt aus:
SELECT tblIdentQuartette.SpielID_F, tblIdentQuartette.IdentQuartettID_F, tblSpiele_1.SpielNr, tblVerlag_1.Verlag, tblSpiele_1.Ausgabejahr
FROM tblVerlag INNER JOIN (tblSpiele INNER JOIN (tblVerlag AS tblVerlag_1 INNER JOIN (tblIdentQuartette INNER JOIN tblSpiele AS tblSpiele_1 ON tblIdentQuartette.IdentQuartettID_F = tblSpiele_1.SpielID) ON tblVerlag_1.VerlagID = tblSpiele_1.VerlagID_F) ON tblSpiele.SpielID = tblIdentQuartette.SpielID_F) ON tblVerlag.VerlagID = tblSpiele.VerlagID_F;
.
Ich weiss nicht, was ich anpassen muss, damit das funktioniert. Kann mir da jemand helfen?
Gruß und Danke vorab
Andreas
Wenn es im UFormular nur eine SpielID_F gibt, ist eine Fehlermeldung bei der Suche nach SpielID doch eine logische Konsequenz
PS: die Bildanhänge (mit Ausnahme vielleicht der Beziehungen) sind reiner Ballast - für den ver(sch)wendeten Speicherplatz könnte man 5 oder mehr Beispiel-Datenbanken im 2003er-Format hochladen. :(
Hi,
Zitat von: Lachtaube am Juli 01, 2017, 22:57:55
Wenn es im UFormular nur eine SpielID_F gibt, ist eine Fehlermeldung bei der Suche nach SpielID doch eine logische Konsequenz
das mit der SpielID_F habe ich gesehen, auch dahingehend gestern geändert. Dann geht nichts, es kommt noch nicht mal eine Fehlermeldung.
ZitatPS: die Bildanhänge (mit Ausnahme vielleicht der Beziehungen) sind reiner Ballast - für den ver(sch)wendeten Speicherplatz könnte man 5 oder mehr Beispiel-Datenbanken im 2003er-Format hochladen. :(
Das habe ich bei den letzten malen gemacht, DB nach Rückfrage und Bitte hochgeladen. Ergebnis? Ich warte noch immer auf Antwort. Ergo, warum soll ich das noch einmal so machen?
Gruß Andreas
Andreas, nach der Ausführung einer der Find-Methoden eines Recordsets, kann in der NoMatch (https://msdn.microsoft.com/de-de/library/office/ff193226.aspx)-Eigenschaft des Recordsets ausgelesen werden, ob die Suche erfolgreich war.
Hallo,
danke für deinen Hinweis. Du meinst also, dass ich den VBA Teil erweitern müsste, damit ich auch ein "Feedback" von der Aktion bekomme, was genau nicht passt. Da ich VBA technisch nicht wirklich den Plan habe, wenn es dann ganz tief rein geht weiss ich nicht, wie ich das zu bewerkstelligen habe. Da bin ich eben auf Hilfe des Forum angewiesen :(.
Gruß Andreas
Ich denke eher, dass es keine passenden Daten gibt, was sich durch NoMatch bestätigen lassen sollte.
PS: der Code wird doch auch im Modul des Unterformulars ausgeführt - oder?
Hi,
ja, der Code
Private Sub cboIdentQuartettNr_DblClick(Cancel As Integer)
' Den mit dem Steuerelement übereinstimmenden Datensatz suchen.
Me.Recordset.FindFirst "[SpielID_F]= " & Nz(Me![cboIdentQuartettNr], 0)
End Sub
wird mit dem Ufo frmErfassungUfoIdentQuartette ausgeführt. Wie kann/muss ich den Debug ansetzen, damit ich das "Problem" gelöst bekomme?
Gruß Andreas
Andreas, Du kannst mit der Taste F9 einen Haltepunkt im Code setzen und dann im Lokalfenster (über das Menü Ansicht einblenden) herumblättern, im Direktbereich Anweisungen ausführen, die Maus über eine Anweisung stellen, wo zeitverzögert der Wert (falls darstellbar) in einem Tooltip angezeigt werden sollte.
Hi,
da war Wartung, sodaß ich erst jetzt antworte, sorry.
okay hab das alles mal eingestellt und ausgeführt. Ich sehe dann im Lokalfenster so viele Fehler, dass ich gar nicht weiß, auf welchen ich mich da konzentrieren muss :(. Wo setz ich da nun wieder an? Kann ich den "log" exportieren, damit den auch jemand anders begutachten kann?
Gruß Andreas
Nun, das Lokalfenster zeigt eine Momentaufnahme aller Objekte, Variablen und Eigenschaften an, die zur Zeit den Scope haben. Da es sich bei einem Formular um eine Klasse handelt, kannst Du Me aufklappen und das Recorset anwählen (ist ja alles alphabetisch sortiert). Dort könntest Du z. Bsp. unter RecordCount herausfinden, wieviel Datensätze das Recordset hat. Ein Export ist nicht vorgesehen.
Ich vermute übrigens, dass Dein Unterformular über die Verknüpfung zum Hauptformular so gefiltert ist, dass der Datensatz nicht im Recordset vorhanden ist.
Hi,
okay, bei Recordcount steht eine , Typ Boolean. Ehrlich gesagt, ist das alles so tief, dass ich nicht weiss wo es da hin geht.
Auf Deutsch gesagt, komme ich damit für meine Verhältnisse wohl nciht weiter. Trotzdem Danke, dass du es versucht hast aus mir heraus zu "kitzeln".
Gruß Andreas
Hallo Andreas,
Dann versuche doch mal mit Lachtaubes erstem Hinweis weiterzukommen.
Private Sub cboIdentQuartettNr_DblClick(Cancel As Integer)
' Den mit dem Steuerelement übereinstimmenden Datensatz suchen.
Me.Recordset.FindFirst "[SpielID_F]= " & Nz(Me![cboIdentQuartettNr], 0)
MsgBox Me.Recordset.NoMatch ' <- wenn True, kein DS gefunden
End Sub
gruss ekkehard
Hallo Ekkehard,
das hätte ich ja gemacht, wenn ich gewusst hätte wie ich das im VBA integiere. All das was bei mir im VBA bis heute funktioniert, geht nur weil ich Beispiele aus meiner DB dupliziert und angepasst habe und bis jetzt auch geklappt hat. Wenn dann so etwas kommt, wo man so in der DB nicht vorfindet, dann wird es eng für mich :(.
Ich habe das jetzt mal nach deiner Vorgabe gemacht und ich bekomme die Meldung "Wahr". Das sagt mir, er findet es, aber öffnet es nicht, warum auch immer. Weitergedacht würde ich dann sagen, der VBA Teil muss noch mitgeben, dass der Datensatz mit der Spiel-ID auch im Formular aufgerufen bzw. angezeigt wird. Falsch gedacht oder stimmt das im Ansatz? Wenn ja, was muss ich im VBA tun?
Gruß Andreas
Wahr heißt, er findet nichts (Keine [No] Übereinstimmung [Match]) - die Nichtübereinstimmung ist wahr.
PS: An meiner Vermutung aus dem vorherigen Beitrag von mir hat sich nichts geändert.
Hi,
danke fürs erklären was Wahr angeht :). Das frmErfassungUfoIdentQuartette ist verknüpft nach SpielID und verknüpft von SpielID_F. Unter --> Leeren Hauptentwurf filtern = JA. Ist das diese Option die du ansprichst im Beitrag #9? Muss ich da etwas umstellen?
Gruß Andreas
Somit können im Unterformular nur Datensätze existieren, die als SpielID_F den Wert der SpielID des Hauptformulars haben. Wenn Du jedoch im Hauptformular suchst, sollten im Unterformular die richtigen Datensätze erscheinen.
Me.Parent.Recordset.FindFirst "SpielID = " & Nz(Me.cboIdentQuartettNr, 0)
Hallo,
Me.Parent.
...... das war die Lösung. Ja, ich gebe dir gleich Recht, das hätte ich auch selbst herausfinden müssen. Daran denken, das alleine genügt nicht, man muss dann auch mal umsetzen, mehr als ein Fehler kann dabei nicht herausspringen.
Vielen Dank noch einmal.
Gruß Andreas