Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Öffnen eines anderen Datensatzes aus UFO heraus endet in Fehler

Begonnen von derilzemer, Juli 01, 2017, 22:22:28

⏪ vorheriges - nächstes ⏩

derilzemer

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
Grüße und Dank im voraus
Andreas

Lachtaube

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. :(
Grüße von der (⌒▽⌒)

derilzemer

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
Grüße und Dank im voraus
Andreas

Lachtaube

Andreas, nach der Ausführung einer der Find-Methoden eines Recordsets, kann in der NoMatch-Eigenschaft des Recordsets ausgelesen werden, ob die Suche erfolgreich war.
Grüße von der (⌒▽⌒)

derilzemer

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
Grüße und Dank im voraus
Andreas

Lachtaube

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?
Grüße von der (⌒▽⌒)

derilzemer

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

Grüße und Dank im voraus
Andreas

Lachtaube

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.
Grüße von der (⌒▽⌒)

derilzemer

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
Grüße und Dank im voraus
Andreas

Lachtaube

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.
Grüße von der (⌒▽⌒)

derilzemer

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
Grüße und Dank im voraus
Andreas

Beaker s.a.

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
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

derilzemer

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
Grüße und Dank im voraus
Andreas

Lachtaube

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.
Grüße von der (⌒▽⌒)

derilzemer

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
Grüße und Dank im voraus
Andreas