Recordset aus Command-Objekt wird nicht geöffnet

04/10/2007 - 00:05 von Karl | Report spam
Hallo,

ich benutze eine umfangreichere StoredProcedure zum Suchen von Daten
in verschiedenen Tabellen. Grundaufbau der SP ist folgender

CREATE Procedure stProc_Suchen @strtblName nvarchar(20),
@strKriterium1 nvarchar(50) = Null, @strKriterium2 nvarchar(50) Null, ...<weitere Parameter>
<Prozedurtext> ...

In VB (VB6) rufe ich wie folgt auf:

Public rsSuchErgebnis As New ADODB.Recordset
Public cmdSuche As New ADODB.Command

...

<Datenbankverbindung herstellen>

With cmdSuche
.ActiveConnection = cnDBConn
.CommandType = adCmdStoredProc
.CommandText = "stProc_Suchen"
.Parameters.Append .CreateParameter("@strtblName", adVarChar,
adParamInput, 20, strTblName)
.Parameters.Append .CreateParameter("@strKriterium1",
adVarChar, adParamInput, 50, NZ(strKriterium1, Null))
.Parameters.Append .CreateParameter("@strKriterium2",
adVarChar, adParamInput, 50, NZ(strKriterium2, Null))
... <weitere Parameter>

Set rsSuchergebnis = .Execute
End With
If rsSuchergebnis.RecordCount > 0 Then < Hier kommt der Fehler
machwas
End if

Es kommt der Fehler 3704 (Der Vorgang ist für ein geschlossenes
Recordset nicht zugelassen). Probehalber habe ich mir aus der SP mit
einem Ausgabeparameter die Zahl der gefundenen Datensàtze zurückgeben
lassen - es kommt immer die Anzahl der Datensàtze, die ich auch
erhalte, wenn ich die SP mit entsprechenden Eingabeparametern im SQL-
Server starte.

Woran kann es liegen? Andere Command/Recordset -Kombinationen in der
gleichen Struktur funktionieren merkwürdigerweise in der Anwendung.

Schon mal danke im Voraus

Gruß

Karl
 

Lesen sie die antworten

#1 Peter Fleischer
04/10/2007 - 08:05 | Warnen spam
Karl wrote:
Hallo,

ich benutze eine umfangreichere StoredProcedure zum Suchen von Daten
in verschiedenen Tabellen. Grundaufbau der SP ist folgender

CREATE Procedure stProc_Suchen @strtblName nvarchar(20),
@strKriterium1 nvarchar(50) = Null, @strKriterium2 nvarchar(50) > Null, ...<weitere Parameter>
<Prozedurtext> ...

In VB (VB6) rufe ich wie folgt auf:

Public rsSuchErgebnis As New ADODB.Recordset
Public cmdSuche As New ADODB.Command

...

<Datenbankverbindung herstellen>

With cmdSuche
.ActiveConnection = cnDBConn



Implizite Erzeugung eine neuen Connection-Objektes ist keine gute Idee.
Besser wàre es den Verweis auf ein Connection-Objekt zuzuweisen.

.CommandType = adCmdStoredProc
.CommandText = "stProc_Suchen"
.Parameters.Append .CreateParameter("@strtblName", adVarChar,
adParamInput, 20, strTblName)
.Parameters.Append .CreateParameter("@strKriterium1",
adVarChar, adParamInput, 50, NZ(strKriterium1, Null))
.Parameters.Append .CreateParameter("@strKriterium2",
adVarChar, adParamInput, 50, NZ(strKriterium2, Null))
... <weitere Parameter>

Set rsSuchergebnis = .Execute
End With
If rsSuchergebnis.RecordCount > 0 Then < Hier kommt der Fehler
machwas
End if

Es kommt der Fehler 3704 (Der Vorgang ist für ein geschlossenes
Recordset nicht zugelassen).



Und wo ist die Open-Anweisung für das implizit erzeugte Objekt?

Probehalber habe ich mir aus der SP mit
einem Ausgabeparameter die Zahl der gefundenen Datensàtze zurückgeben
lassen - es kommt immer die Anzahl der Datensàtze, die ich auch
erhalte, wenn ich die SP mit entsprechenden Eingabeparametern im SQL-
Server starte.

Woran kann es liegen? Andere Command/Recordset -Kombinationen in der
gleichen Struktur funktionieren merkwürdigerweise in der Anwendung.



Das glaube ich dir nicht. Eine EWxecute kann mit einer geschlossenen
Verbindung nicht funktionieren.

Du erhöhst Deine Chance, dass Deine Frage überhaupt gelesen und qualifiziert
und schnell beantwortet wird, wenn Du Deinen Realnamen im Absender
einstellst (Vor- und Zuname).

Viele Grüße

Peter

Ähnliche fragen