Neuigkeiten:

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

Mobiles Hauptmenü

Kein aktueller Datensatz in SQL

Begonnen von joschi50, Juli 31, 2022, 10:18:02

⏪ vorheriges - nächstes ⏩

joschi50

Ich verzweifel noch an der Syntax.
Versuche ein Recordset mit 2 Verweisen auf Formularfelder per sql zu öffnen.
Ich erhalte jedoch die Meldung "Kein Datensatz".
Dim RS4 As DAO.Recordset
Set RS4 = CurrentDb.OpenRecordset("SELECT * from Spielerliste WHERE ([Spielername]='Forms![doubrd1]![spieler1]') AND ([Turniername]='Forms![doubrd1]![tdoubname]');")
RS4.Edit
Danach soll das Recordset mit verschiedenen Werten aus dem geöffneten Fenster aktualisiert werden.
Wo ist mein Fehler ?
Auch Wolkenkratzer haben mal als Keller angefangen.

DF6GL

Hallo,


etwa so:


Set RS4 = CurrentDb.OpenRecordset("SELECT * from Spielerliste WHERE Spielername= '" & Me!spieler1 & "' AND Turniername= '" & Me!tdoubname & "'", dbOpenDynaset)
Das Filtern mit Hilfe von Namen ist fehlerträchtig.  Besser ist die Verwendung der Schlüsselfelder.

ebs17

ZitatWo ist mein Fehler ?

[Spielername]='Forms![doubrd1]![spieler1]'

Der Inhalt zwischen den Hochkommata ist als String gekennzeichnet und wird auch so ausgewertet, also als Zeichenfolge, nicht etwa als ein Objekt mit einem auszuwertenden Inhalt.
Ziemlich sicher heißt dann kein Spieler so wie geschrieben.
Mit freundlichem Glück Auf!

Eberhard

joschi50

Jetzt erhalte ich den Fehler "Methode oder Datenobjekt" nicht gefunden.
Und zwar bei der Zeile
RS4.gewonnen1 = Forms!doubrd1!s1

Dim RS4 As DAO.Recordset
Set RS4 = CurrentDb.OpenRecordset("SELECT * from Spielerliste WHERE Spielername= '" & Me!Spieler1 & "' AND Turniername= '" & Me!Tdoubname & "'", dbOpenDynaset)
RS4.Edit
If Forms!doubrd1!spr1 = 1 Then
RS4.gewonnen1 = Forms!doubrd1!s1

Werd noch verrückt.
Auch Wolkenkratzer haben mal als Keller angefangen.

Beaker s.a.

Hallo Joschi,
Liest du eigentlich was die Helfer dir schreiben?
ZitatSet RS4 = CurrentDb.OpenRecordset("SELECT * from Spielerliste WHERE Spielername= '" & Me!spieler1 & "' AND Turniername= '" & Me!tdoubname & "'", dbOpenDynaset)
und
ZitatDas Filtern mit Hilfe von Namen ist fehlerträchtig.  Besser ist die Verwendung der Schlüsselfelder.
ZitatZiemlich sicher heißt dann kein Spieler so wie geschrieben.

gruss ekkehard


ZitatWerd noch verrückt.
Warum nicht? Ford Prefekt hat damit gute Erfahrungen gemacht  ;)
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)

joschi50

Hi,
natürlich habe ich die Antworten gelesen. Habe es jetzt mit und ohne Hochkomma probiert, die Fehlermeldung bleibt.
Ich hatte die Recordset Anweisung direkt von DF6GL übernommen, funktioniert leider nicht.
Eine entsprechende Abfrage im Abfrageeditor bringt das gewünschte Ergebnis.
Es wird aber die Methode bzw. das Objekt nicht gefunden.

Das mit dem Namen ist mir schon klar, kann ich aber jetzt im Moment nicht ändern.

Auch Wolkenkratzer haben mal als Keller angefangen.

Beaker s.a.

ZitatIch hatte die Recordset Anweisung direkt von DF6GL übernommen, funktioniert leider nicht.
Dann können eigentlich nur die Feldnamen oder der ganze Formularbezug
nicht stimmen (Tippfehler?).
ZitatEine entsprechende Abfrage im Abfrageeditor bringt das gewünschte Ergebnis.
Was heisst "entsprechend"?
Franz' Abfrage dürfte, 1:1 in den Abfrageeditor (SQL-Ansicht) kopiert, genau diese
Fehlermeldung
ZitatEs wird aber die Methode bzw. das Objekt nicht gefunden.
ausgeben, weil der SQL-Interpreter mit "Me!" nichts anfangen kann.
Überprüfe auch mal, ob "Me" überhaupt das Formular ist von dem die Werte
abgeholt werden.

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)

joschi50

Mit dieser Abfrage im Abfrageeditor erhalte ich exakt das gewünschte Ergebnis

SELECT * from Spielerliste WHERE Spielername=  Formulare!doubrd1!Spieler1  AND Turniername=  Forms!doubrd1!Tdoubname
Ich wüsste jetzt nicht wo beim Öffnen des Recordsets noch der Fehler ist.
Auch Wolkenkratzer haben mal als Keller angefangen.

Beaker s.a.

Wohl darin, dass "Me" eben nicht "Forms!doubrd1" ist.
Füge mal einDebug.Print Me.Nameam Anfang der
Prozedur ein bzw. überprüfe den ganzen String
Debug.Print "SELECT * from Spielerliste WHERE Spielername= '" & Me!Spieler1 & "' AND Turniername= '" & Me!Tdoubname & "'"I.Ü. spricht SQL englisch, also immer "Forms!" verwenden.
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)

joschi50

Ich habe jetz mal nur folgende SQL eingegeben
Set RS4 = CurrentDb.OpenRecordset("SELECT * from Spielerliste", dbOpenDynaset)
Selbst dann erhalte ich die Fehlermeldung

Dann muss der Fehler doch woanders sitzen

Dim RS4 As DAO.Recordset
Set RS4 = CurrentDb.OpenRecordset("SELECT * from Spielerliste", dbOpenDynaset)
RS4.Edit
If Forms!doubrd1!spr1 = 1 Then
RS4.gewonnen1 = Forms!doubrd1!s1
RS4.punkte1 = Forms!doubrd1!p1
RS4.score1 = Forms!doubrd1!sc1
End If

Der Name für die Tabelle "Spielerliste" stimmt und das Formular doubrd1 ist geöffnet. Von dort erfolgt ja der Klick auf einen Button der das SUB ausführt.
Auch Wolkenkratzer haben mal als Keller angefangen.

Beaker s.a.

Tja, da fällt mir erstmal auch nichts mehr zu ein.
Ist da vielleicht ein UFo involviert?
Manchmal hilft bei solchen Sachen ein "reparieren/komprimieren" und
evtl. Access/Rechner neu starten.
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)

DF6GL

#11
Hallo,

oder lade mal die DB hier hoch, komprimiert/repariert und gezippt.

Wobei
ZitatIch erhalte jedoch die Meldung "Kein Datensatz".

eigentlich keine Fehlermeldung ist, lediglich ein Hinweis darauf, dass kein editierbarer DS gefunden wurde.

Soll heißen, es gibt keinen DS, bei dem die Kriterien zutreffen..

joschi50

Problem gelöst

Statt Punkt ein Ausrufezeichen...
Dim db As DAO.Database
Set db = CurrentDb
Dim RS4 As DAO.Recordset
Set RS4 = db.OpenRecordset("SELECT * from Spielerliste WHERE Spielername= '" & Forms!doubrd1!Spieler1 & "' AND Turniername= '" & Forms!doubrd1!Tdoubname & "'", dbOpenDynaset)

RS4.Edit
If Forms!doubrd1!spr1 = 1 Then
RS4!gewonnen1 = Forms!doubrd1!s1
RS4!punkte1 = Forms!doubrd1!p1
RS4!score1 = Forms!doubrd1!sc1

Aber warum muss ich RS4! schreiben und nicht RS4.  ?
Auch Wolkenkratzer haben mal als Keller angefangen.

Beaker s.a.

Weil SQL das so verlangt. In VBA ist es mehr oder weniger egal; -
Diskussionen dazu gibt es seit 20 Jahren.
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)