Autor Thema: Rückgabewert einer gespeicherten Prozedur  (Gelesen 2531 mal)

Offline Tomcat2541

  • Frischling
  • *
  • Beiträge: 3
  • Geschlecht: Männlich
Rückgabewert einer gespeicherten Prozedur
« am: 31.08.12 - 15:25:56 »
Hallo,

seit dem Beginn meiner Ausbildung vor drei Jahren bin ich fleißiger Leser hier im Forum. Ich hab viele Lösungen zu Problemen gefunden. Nun hat mich die Suchfunktion und auch google leider im Stich gelassen.

Ich bin gerade an einem Projekt, in dem ich Daten aus einer SQL-Datenbank lesen und schreiben muss.
Das Lesen funktioniert ohne Probleme, das Schreiben soll über gespeicherte Prozeduren bewerkstelligt werden.
Und genau hier liegt mein Problem: Die gespeicherten Prozeduren sollen über Rückgabewerte sagen, ob das Eintragen der Daten funktioniert hat oder ob es einen Fehler (z.B. falsche Werte) gegeben hat.

Die Prozedur habe ich leider noch nicht, ich habe aber eine kleine Test-Prozedur erstellt, die soweit auch funktioniert. Das einzige was ich nicht hinbekomme ist, dass ich die Rückgabewerte bekomm.
Im Moment bekomm ich immer nur die Werte, die ich übergeben hab zurück.

Nun die Frage, was mach ich falsch bzw. ist das überhaupt so möglich wie ich mir das vorstelle.

Versuch mit LS:DO
Code
Dim con As New ODBCConnection
Dim qry As New ODBCQuery
Dim result As New ODBCResultSet
Dim i As Integer
	
Set qry.Connection = con
Set result.Query = qry
	
Call con.ConnectTo("XYZ","zyx","123")
	
If con.IsConnected Then
	MsgBox "Connected"
Else
	MsgBox "Not Connected"
End If
	
qry.SQL = "exec dbo.Test_GIS 2,'Test'"
	

Call result.ExecProcedure("dbo.Test_GIS", 2, "Test")
'Call result.Execute
	
For i = 1 To result.NumColumns Step 1
	If result.IsValueNull(i) Then
		MsgBox "Kein Rückgabewert"
	Else
		MsgBox result.GetValue(i)
	End If
Next	
	
If con.IsConnected Then
	Call con.Disconnect
	MsgBox "Disconnected"
End If

Versuch mit LCConnection
Code
Dim lcConn As LCConnection
Dim lcFldLst As LCFieldList
	
Dim lcFldLstRet As LCFieldList
Dim lcti As LCField
Dim lcto As LCField
	
Set lcConn = New LCConnection("oledb")
Set lcFldLst = New LCFieldList
Set lcFldLstRet = New LCFieldList
	
lcConn.Server = "w2k3-gis\SQLExpress"
lcConn.Database = "XYZ"
lcConn.Password = "123"
lcConn.UserID = "zyx"
lcConn.Provider = "sqloledb"
	
Call lcConn.Connect()
	
MsgBox "Connected To Tisoware"
	
MsgBox lcConn.Execute("exec dbo.Test_GIS 2,'Test'",lcFldLst),,"Execute SQL-Statement" 
	
While lcConn.Fetch(lcFldLst) > 0
	MsgBox sGetString(lcFldLst.getField(1).Value),,"Field1" 'Hier kommt Test zurück, sollte aber Fehler kommen
Wend
	
Call lcConn.Disconnect()
MsgBox "Disconnected"

Und hier noch die SQL-Prozedur
Code
ALTER PROCEDURE [dbo].[TEST_GIS] 
	-- Add the parameters for the stored procedure here
	@ti1 int = 1, 
	@to1 varchar(254) = '' OUTPUT
AS
BEGIN
	-- SET NOCOUNT ON added to prevent extra result sets from
	-- interfering with SELECT statements.
	SET NOCOUNT OFF;

    -- Insert statements for procedure here
	-- SELECT @ti1, @to1
	SELECT @to1

	if @ti1 = 1
	begin
		SELECT @to1 = 'OK'
	end
	else
	begin
		SELECT @to1 = 'Fehler'
	end

	return
END

Noch ein paar Infos: Ich arbeite mit Notes 8.5.3. Der SQL-Server ist ein MS SQL-Server 2005

Ich hoffe ihr könnt mir helfen.

Gruß Daniel

Offline mholup

  • Frischling
  • *
  • Beiträge: 17
Re: Rückgabewert einer gespeicherten Prozedur
« Antwort #1 am: 04.09.12 - 14:45:17 »
Hallo,

frag halt den Fehler mit GetError ab.

Dbstssuccess As Const integer = 500
 status = result.Execute
     If Not(status) Then
          status = result.GetError
          If Not(status = DBstsSUCCESS) Then
               Call LogMessage(NumFile, result.GetErrorMessage(status))
          End If
          Goto Finish
     End If

Grüße Max

Offline Tomcat2541

  • Frischling
  • *
  • Beiträge: 3
  • Geschlecht: Männlich
Re: Rückgabewert einer gespeicherten Prozedur
« Antwort #2 am: 04.09.12 - 15:16:36 »
Hallo Max, Hallo Forum,

das ist leider nicht ganz das was ich möchte.
Die gespeicherten Prozeduren sollen keinen Fehler werfen. Sie sollen lediglich sagen, ob die übergebenen Parameter richtig sind oder nicht (z.B. 1 = alles OK, 2 = Parameter muss größer als 20 sein).
Das Ergebnis wird dann vermutlich über einen Output-Parameter (wie gesagt, ich hab die Funktion noch nicht) an mich zurückgegeben und diesen wollte ich auslesen. So wie das aussieht ist das aber nicht möglich. Bei meinen Tests hab ich bis jetzt immer nur die Werte zurückbekommen, die ich mitgegeben habe.
Ich hoffe es gibt doch irgendeine Möglichkeit.

Danke schonmal für die Hilfe.

Gruß Daniel

Offline Tomcat2541

  • Frischling
  • *
  • Beiträge: 3
  • Geschlecht: Männlich
Re: Rückgabewert einer gespeicherten Prozedur
« Antwort #3 am: 05.09.12 - 11:35:46 »
Hallo,

habs geschafft die Rückgabewerte zu bekommen.

Man muss einfach die Rückgabevariable in Notes als Variable deklarieren, diese wird dann einfach zurückgegeben.

Nochmal der SQL-Code
Code
ALTER PROCEDURE [dbo].[TEST_GIS] 
	-- Add the parameters for the stored procedure here
	@ti1 int, 
	@to1 varchar(254) OUTPUT
AS
BEGIN
	-- SET NOCOUNT ON added to prevent extra result sets from
	-- interfering with SELECT statements.
	SET NOCOUNT OFF;

    -- Insert statements for procedure here
	
	if (@ti1 = 1)
	begin
	SELECT @to1 = 'OK'
	end
	else
	begin
		SELECT @to1 = 'Fehler'
	end

	return
END

Code auf Notesseite
Code
Dim con As New ODBCConnection
Dim qry As New ODBCQuery
Dim result As New ODBCResultSet
Dim sReturn As String

Set qry.Connection = con
Set result.Query = qry

Call con.ConnectTo("XYZ","zyx","123")
	
If con.IsConnected Then
	MsgBox "Connected"
Else
	MsgBox "Not Connected"
End If
	
Set result.Connection = con
	
Call result.ExecProcedure("dbo.Test_GIS", 1, sReturn)
MsgBox sReturn,,"sReturn 1"
	
Call result.ExecProcedure("dbo.Test_GIS",5, sReturn)
MsgBox sReturn,,"sReturn 5"

If con.IsConnected Then
	Call con.Disconnect
	MsgBox "Disconnected"
End If
	

Gruß Daniel

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz