Domino 9 und frühere Versionen > ND8: Entwicklung
Rückgabewert einer gespeicherten Prozedur
(1/1)
Tomcat2541:
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
--- Ende Code ---
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"
--- Ende Code ---
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
--- Ende Code ---
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
mholup:
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
Tomcat2541:
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
Tomcat2541:
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
--- Ende Code ---
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
--- Ende Code ---
Gruß Daniel
Navigation
[0] Themen-Index
Zur normalen Ansicht wechseln