pcfjkg
Goto Top

FETCH nutzen um Wert(e) einer Zeile in einer Variablen zu speichern.

Im Access-Projekt wird mit einer gespeicherten Prozedur mit FETCH einer Variablen ein Wert zugewiesen, aber die Variable bleibt leer (<null>).

Sie Sicht VIEW5 befindet sich auf einem MS-SQL 2000 Server und enthält zu Testzwecken nur eine Spalte <VersStat> mit 3 Zeilen:

VersStat
11
33
51

In einem MS-Access Projekt (*.adp) wird eine gespeicherte Prozedur aufgerufen. Das Auslesen von Zeilen dieser VIEW5 gelingt nicht:

Es sollen nacheinander alle Zeilen (oder ohne Schleife zunächst zum Test nur eine Zeile) gelesen und das Leseergebnis in einer Variablen gespeichert werden.

DECLARE @versstat char(2)
DECLARE TestCursor CURSOR FOR SELECT VersStat FROM VIEW5
DECLARE @zahlktr decimal(7,2)

OPEN TestCursor
FETCH FROM TestCursor INTO @versstat
/* Zur Prüfung des Leseergebnisses wird @versstat in eine bestehende Tabelle T_VersStat in die Spalte VS eingetragen */
EXEC('UPDATE T_VersStat SET VS = ' + @versstat + '')
/* Später soll @versstat in einer WHERE-Klausel verwendet werden */
SET @zahlktr = (SELECT SUM(GPVersStat) FROM T_VersStat WHERE VersStat = @versstat)
EXEC('UPDATE T_VersStat SET ZahlKtr = ' + @zahlktr + '')
*/
CLOSE TestCursor

In der Tabelle T_VersStat sind die Werte der Spalte VersStat <null>. Es liegt auch kein anderweitiger Fehler vor, der z.B. die Prozedur vorzeitig unkontrolliert abbricht; denn wenn die UPDATE-Anweisung statt @versstat zum Test z.B. die Zahl 11 verwendet, wird diese 11 ordnungsgemäß eingetragen.

Kann mir jemand helfen ?

PCFJKG

Content-Key: 93711

Url: https://administrator.de/contentid/93711

Printed on: April 19, 2024 at 02:04 o'clock

Member: Biber
Biber Aug 06, 2008 at 07:31:42 (UTC)
Goto Top
Moin PCFJKG,

könnte daran liegen, dass die Urheberrechte auf die Syntax
FETCH FROM TestCursor INTO @versstat
... bei Dir liegen und M$ sich deshalb nicht traut, diese Erfindung in Access zu implementieren.

Ändert sich das Verhalten, wenn ihr euch auf die gemeinsame Syntax
FETCH TestCursor INTO @versstat
.. einigt?

Grüße
Biber
Member: PCFJKG
PCFJKG Aug 06, 2008 at 08:13:57 (UTC)
Goto Top
Hallo Biber,

die Syntax war nur in meiner ins Internet gestellten Frage falsch, im Programm ist richtigerweise FETCH FROM verwendet (Also: selbst ausgetrixt) worden. Ich habe aber heute morgen nach nochmaligem Nachlesen der Beispiele und Kommentare in der SQL-Server Onlinedokumentation vermutlich das Problem selbst lösen können. Es liegt nicht am Progrogrammcode in der vermuteten Weise (Syntax, falsche Deklarationen/Datentypen etc.) sondern am Fehlen der Anweisung <DEALLOCATE TestCursor>.

Zitat Online-Hilfe: Nachdem dem Cursor ein Cursorname zugeordnet wurde, kann der Name so lange nicht für einen anderen Cursor des gleichen Bereiches (GLOBAL oder LOCAL) verwendet werden, bis die Reservierung des Cursors aufgehoben wurde.

Vermutlich habe ich zwar irgendwann beim üblichen trial and error den richtigen Code aufgerufen, aber DECLARE verwies immer noch auf eine "alte" (vermutlich fehlerhafte) SELECT-Anweisung. Nach 2 verschiedenen Versuchen heute morgen konnte zumindest einmal das gewünschte Ergebnis erzielt werden.

Also: Sorry, man sollte sich eben seine Fragen genauer ansehen bzw. überlegen, vor allem bevor man an die Öffentlichkeit geht.

Entschuldigung, vielen Dank für die Antwort und herzliche Grüße


PCFJKG