Seite 1 von 2
Microsoft SQL-Server Procedure aufrufen
Verfasst: 02.11.2009 17:08
von mk-soft
Hi,
wie kann ich mit ODBC (PB) eine Procedure aufrufen und den Return_Value abfragen.
{? = call dbo.procname()} geht nicht

Re: Microsoft SQL-Server Procedure aufrufen
Verfasst: 02.11.2009 17:22
von Kiffi
ein einfaches
reicht aus.
und dann ganz normal mit NextDatabaseRow() und GetDatabase*() die Rückgabe auswerten
Grüße ... Kiffi
Re: Microsoft SQL-Server Procedure aufrufen
Verfasst: 02.11.2009 18:13
von mk-soft
Bekomme so keinen fehler, aber wird kein ergebnis zurück geliefert.
Auszug:
Code: Alles auswählen
If recid = 0
sql = "{Call dbo.qp_Add_Langtexte}"
If DatabaseQuery(#Datenbank, sql)
While NextDatabaseRow(#Datenbank)
temp.s = GetDatabaseString(#Datenbank, 0)
WriteLog(temp)
Wend
Else
WriteLog(DatabaseError())
EndIf
EndIf
Die Procedure sollte einen neuen Datensatz anlegen und die recid liefern. Die Procedure ist nicht von mir
Code: Alles auswählen
sql = "Declare @return_value int;"
sql + "EXEC @return_value = [dbo].[qp_Add_Langtexte]; "
sql + "Select 'Return Value' = @return_value; "
legt auch ein Datensatz an. Liefert allerding auch kein ergebnis

Re: Microsoft SQL-Server Procedure aufrufen
Verfasst: 02.11.2009 18:26
von Kiffi
mk-soft hat geschrieben:Liefert allerding auch kein ergebnis

hast Du die SP testweise mal im Query Analyzer ausprobiert?
Grüße ... Kiffi
Re: Microsoft SQL-Server Procedure aufrufen
Verfasst: 02.11.2009 18:30
von mk-soft
Unter den SQL-Management Studio Express die Procedure geteset und bekomme eine neue RecID zurück
P.S. Es scheint das die letzte Zeile "Select ..." nicht mehr ausgeführt wird
Re: Microsoft SQL-Server Procedure aufrufen
Verfasst: 03.11.2009 21:32
von PBFetischist
Hallo mk-soft,
warum rufst du mit call auf und nicht mit exec ?
Code: Alles auswählen
create procedure sp_TabellenAnzeigen
as
SELECT * FROM INFORMATION_SCHEMA.TABLES;
Einmal diese Prozedur anlegen und aus PB aufrufen:
Code: Alles auswählen
UseODBCDatabase()
If opendatabase(0, "dsn", "user", "pass")
query.s = "exec sp_TabellenAnzeigen"
If DatabaseQuery(0, query)
While NextDatabaseRow(0)
Debug GetDatabaseString(0, 0)
Wend
Else
Debug DatabaseError()
EndIf
EndIf
Oder geht es nicht um gespeicherte Prozeduren ?
Re: Microsoft SQL-Server Procedure aufrufen
Verfasst: 03.11.2009 23:00
von Kiffi
PBFetischist hat geschrieben:warum rufst du mit call auf und nicht mit exec ?
ob
call oder
exec sollte Jacke wie Hose sein. Ich meine gelesen zu haben,
dass
call performanter sein soll.
PBFetischist hat geschrieben:Oder geht es nicht um gespeicherte Prozeduren ?
doch, darum geht's. Procedure = SP = Stored Procedure = Gespeicherte Prozedur
@Michael:
mk-soft hat geschrieben:legt auch ein Datensatz an. Liefert allerding auch kein ergebnis
also kann man grundsätzlich davon ausgehen, dass Du die richtige SP aufrufst.
Lediglich das Ergebnis fehlt. Mal ganz schräg überlegt: Kann es ein Unicode-Problem
sein? Die SP gibt eine Zahl zurück; Du liest einen String aus. Nicht, dass es daran liegt.
Grüße ... Kiffi
Re: Microsoft SQL-Server Procedure aufrufen
Verfasst: 04.11.2009 12:40
von PBFetischist
@Kiffi
ob call oder exec sollte Jacke wie Hose sein. Ich meine gelesen zu haben,
dass call performanter sein soll.
call funktioniert auf einem SQL Server 2005 nicht, ausser einer Fehlermeldung kommt nüscht:
Die gespeicherte Prozedur 'call' wurde nicht gefunden.
ODBC meldet dann übrigens:
[Microsoft][ODBC SQL Server Driver][SQL Server]Die gespeicherte Prozedur 'call' wurde nicht gefunden.
11:55 Uhr
Ich habe mir jetzt eine sp mit einem insert und einer Ausgabe danach gebaut und in der Tat, es funktioniert nicht

Das erste Statement wird ausgeführt, ausgegeben wird leider nichts.
Re: Microsoft SQL-Server Procedure aufrufen
Verfasst: 04.11.2009 13:26
von Kiffi
PBFetischist hat geschrieben:call funktioniert auf einem SQL Server 2005 nicht
doch, doch, das geht wunderbar:
Code: Alles auswählen
UseODBCDatabase()
DB = OpenDatabase(#PB_Any, "myDatabase", "myUser", "myPass")
If DB
If DatabaseQuery(DB, "{call dbo.testtest}")
While NextDatabaseRow(DB)
Debug GetDatabaseString(DB, 0) ; <- liefert korrekte Werte
Wend
Else
Debug DatabaseError()
EndIf
CloseDatabase(DB)
EndIf
PBFetischist hat geschrieben:Ich habe mir jetzt eine sp mit einem insert und einer Ausgabe danach gebaut und in der Tat, es funktioniert nicht
Bingo. Bei mir funktioniert es nach einfügen des Inserts nun auch nicht mehr.
Grüße ... Kiffi
Re: Microsoft SQL-Server Procedure aufrufen
Verfasst: 04.11.2009 13:29
von PBFetischist
@Kiffi
Was hast du für eine SQL Server Version ?
Verschachtelt geht es leider auch nicht... (sp x triggert sp y) Hmmm.
Jetzt fällt mir nichts mehr ein.