Access OpenRecordset liefert nicht korrekten Inhalt
Hallo zusammen,
stehe hier vor einem Problem das ich so noch nie hatte:
Ich hole mir über currentdb.openrecordset einen Datensatz aus einer SQL-Express-Datenbank.
Set rr = CurrentDb.OpenRecordset("select * from rechnungen where rnr=" & rnr, dbOpenDynaset) ' rnr ist der PK
Ein Datenfeld was ich dort auslese ist ein String für Zahlungsbedingungen ... es steht dort definitiv immer was drin !
In 1 von 3 Fällen liefert mir die OpenRecordsetMethode aber plötzlich einen "NULL"-Wert.
Beim nächsten Versuch kann es dann klappen und anstatt "NULL" kommt (beim selben Datensatz) wieder die Zahlungsbedingung.
Mach ich bei Programmabbruch parallel die DB auf, such den Datensatz, steht auch der korrekte Inhalt drin.
Nur OpenRecordset ist fest der Meinung keinen String finden zu können.
Der einzige Grund der mir hier nur einfällt wäre: die DB wird über ein verhältnismäßig langsames VPN ausgelesen.
Kann das der Grund sein ? Gibt hier ein work around zu ?
Ich behelf mich jetzt damit, das ich openrecordset solange neu aufrufe bis kein NULL ausgelesen wird.
Das kann dann schon mal bis zu 10 sec. dauern, das er in meiner while Schleife hängt.
Das kann es doch aber nicht sein ? Ich fahre zig Abfragen auf meinen Datenbanken, nicht auszudenken wenn man sich hier nicht auf
die Rückgabewerte verlassen kann.
Oder steh ich total auf dem Schlauch.
stehe hier vor einem Problem das ich so noch nie hatte:
Ich hole mir über currentdb.openrecordset einen Datensatz aus einer SQL-Express-Datenbank.
Set rr = CurrentDb.OpenRecordset("select * from rechnungen where rnr=" & rnr, dbOpenDynaset) ' rnr ist der PK
Ein Datenfeld was ich dort auslese ist ein String für Zahlungsbedingungen ... es steht dort definitiv immer was drin !
In 1 von 3 Fällen liefert mir die OpenRecordsetMethode aber plötzlich einen "NULL"-Wert.
Beim nächsten Versuch kann es dann klappen und anstatt "NULL" kommt (beim selben Datensatz) wieder die Zahlungsbedingung.
Mach ich bei Programmabbruch parallel die DB auf, such den Datensatz, steht auch der korrekte Inhalt drin.
Nur OpenRecordset ist fest der Meinung keinen String finden zu können.
Der einzige Grund der mir hier nur einfällt wäre: die DB wird über ein verhältnismäßig langsames VPN ausgelesen.
Kann das der Grund sein ? Gibt hier ein work around zu ?
Ich behelf mich jetzt damit, das ich openrecordset solange neu aufrufe bis kein NULL ausgelesen wird.
Das kann dann schon mal bis zu 10 sec. dauern, das er in meiner while Schleife hängt.
Das kann es doch aber nicht sein ? Ich fahre zig Abfragen auf meinen Datenbanken, nicht auszudenken wenn man sich hier nicht auf
die Rückgabewerte verlassen kann.
Oder steh ich total auf dem Schlauch.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 571437
Url: https://administrator.de/contentid/571437
Ausgedruckt am: 22.11.2024 um 15:11 Uhr
4 Kommentare
Neuester Kommentar
Zitat von @greatmgm:
Der einzige Grund der mir hier nur einfällt wäre: die DB wird über ein verhältnismäßig langsames VPN ausgelesen.
Der einzige Grund der mir hier nur einfällt wäre: die DB wird über ein verhältnismäßig langsames VPN ausgelesen.
Moin,
wie langsam genau ist das denn?
Was für eine VPN Verbindung ist das, site-2-site?
Und wie machst Du die Verbindung zum SQL Server, IP, DNS?
Wenn derm, aus welchen Gründen auch immer, nicht rechtzeitig antwortet, und Du den "time-out" nicht abfängst, dann kann das so aussehen.
Gruss
Moin,
wie sieht denn der ganze Code aus? Wenn ich mich recht erinnere, muss zwischem OpenRecordset und der ersten Verwendung ein MoveFirst 'rein. Btw, wenn du eh nur lesen willst, solltest du das Recordset ggfs als Read only öffnen. Und wenns nur um ein Feld geht, dann auch nur das im Select auswählen.
Falls es zu einem Timeout kommt, würde das eine Fehlermeldung auslösen. "Einfach so" einen Null Wert zurückgeben macht Access eigentlich nicht.
lg,
Slainte
wie sieht denn der ganze Code aus? Wenn ich mich recht erinnere, muss zwischem OpenRecordset und der ersten Verwendung ein MoveFirst 'rein. Btw, wenn du eh nur lesen willst, solltest du das Recordset ggfs als Read only öffnen. Und wenns nur um ein Feld geht, dann auch nur das im Select auswählen.
Falls es zu einem Timeout kommt, würde das eine Fehlermeldung auslösen. "Einfach so" einen Null Wert zurückgeben macht Access eigentlich nicht.
lg,
Slainte