Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Recordset aus Command-Objekt wird nicht geöffnet

654 views
Skip to first unread message

Karl

unread,
Oct 3, 2007, 6:05:15 PM10/3/07
to
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

Karl

unread,
Oct 3, 2007, 6:05:53 PM10/3/07
to
Hallo,

...

<Datenbankverbindung herstellen>

Es kommt der Fehler 3704 (Der Vorgang ist für ein geschlossenes Objekt


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.

Peter Fleischer

unread,
Oct 4, 2007, 2:05:51 AM10/4/07
to
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


Peter Fleischer

unread,
Oct 4, 2007, 2:06:27 AM10/4/07
to
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

Pribier es mal richtig mit Set:

Set .ActiveConnection = cnDBConn

Karl Fuchs

unread,
Nov 18, 2007, 4:25:44 PM11/18/07
to
On 4 Okt., 07:06, "Peter Fleischer" <peter.fleischer_nosp...@gmx.de>
wrote:
> Karl wrote:
> > Hallo,

>
> > <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
>
> Pribier es mal richtig mit Set:
>
> Set .ActiveConnection = cnDBConn
>
> 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).


ok. Hoffe, es passt jetzt ....

das Problem lag dann doch auf der Prozedurseite: SET NOCOUNT ON war
das Zauberwort.

Ansonsten:
Hinter dem Kürzel <Datenbankverbindung herstellen> (siehe OP)
versteckt sich hier wie überall eine Abfrage, ob eine
Datenbankverbindung offen ist. Wenn ja, wird diese benutzt, wenn nein,
wir sie neu erzeugt. Ich wollte nur nicht alles wiederholen.

Gruß
Karl + Fuchs

0 new messages