Hallo,
auf dem Server liegt eine STP. Wenn ich diese auf dem Server aufrufe, klappt es fehlerfrei.
Nur wenn sie aus Access aufrufen will,kommt nix zurück.
Ich habe jetzt einen Insert in eine kleine Tabelle eingebaut, der wird ausgeführt, aber es kommen keine Daten zurück. der Wert cmd.Parameters(0).Value ist auch nicht null, aber ich kann nicht sehen, was da drin steht.
Function getvalidvalues(keyname As String, keyvalue As Long, tablename As String) As Integer
Dim conn As ADODB.connection
Dim cmd As ADODB.Command
Dim rs As ADODB.Recordset
On Error GoTo myerror
getvalidvalues = 0
' Verbindung zur SQL Server-Datenbank herstellen
Set conn = CreateObject("ADODB.Connection")
conn.connectionString = Forms![start menue]!tab_connstr
conn.Open
' Befehl-Objekt erstellen
Set cmd = CreateObject("ADODB.Command")
With cmd
.ActiveConnection = conn
.CommandType = 4 ' adCmdStoredProc
.CommandText = " [dbo].[getvalidvalues]"
' Parameter für die Prozedur setzen
.Parameters.Append cmd.CreateParameter("ReturnValue", adInteger, adParamReturnValue)
.Parameters.Append cmd.CreateParameter("@keyname", adVarChar, adParamInput, 15, keyname)
.Parameters.Append cmd.CreateParameter("@keyvalue", adInteger, adParamInput, , keyvalue)
.Parameters.Append cmd.CreateParameter("@tablename", adVarChar, adParamInput, 50, tablename)
End With
' Prozedur ausführen
Set rs = cmd.Execute()
If cmd.Parameters(0).Value = -1 Then
-- =============================================
-- Author: Martin
-- Create date: 29.1.2025
-- Description: Rückgabe von Tabellen Wertenqr
-- =============================================
ALTER PROCEDURE [dbo].[getvalidvalues]
@keyname as nvarchar(25)
,@keyvalue as int
,@tablename as nvarchar(50)
as
Begin
begin try
print 'Eingansparameter:'+ @keyname + N' ' + str(@keyvalue) + N' ' + @tablename;
insert into warda (warda,wann) values(N'aus getvalidvalues',getdate())
declare @strsql as nvarchar(200);
set @strsql = N'select validfrom, validto from ' + @tablename + N' where ' + @keyname + ' = ' + STR(@keyvalue);
print'SQL: ' + @strsql
EXEC sp_executesql @strsql;
return(0)
end try
begin catch
print'Fehler: ' + @strsql
return(-1)
end catch
end
Danke für Hilfe
Martin
Zitat von: MartinHan am Februar 27, 2025, 13:14:14 set @strsql = N'select validfrom, validto from ' + @tablename + N' where ' + @keyname + ' = ' + STR(@keyvalue);
print'SQL: ' + @strsql
EXEC sp_executesql @strsql;
Deine Verwendung der STR Funktion erscheint mir hier ziemlich verdächtig. Kann es sein, dass du VBA-STR() mit TSQL-STR() verwechselt hast? Die beiden Funktionen heißen gleich, funktionieren aber unterschiedlich.
Wenn der Einsatz von STR Sinn ergeben soll, dann musst du den Rückgabewert von STR als Zeichenfolge behandeln; d.h. wie üblich die Zeichenfolgebegrenzer um den Wert setzen.
PS: OK, ich glaube ich verstehe jetzt, du suchst hier nach: CAST(@keyvalue AS Nvarchar)
Dein Hauptproblem dürfte hier sein, dass die Ausgaben deiner PRINT-Statements in der Stored Procedure von ADO als verstümmelte Recordsets interpretiert werden. In dem Zusammenhang empfiehlt sich auch ein
SET NOCOUNT ON; in der Stored Procedure.
Danke für deine Message.
Ich habe jetzt alle Print Befehle entfernt, aber es kommt immer noch nix.
use [DbAdcProduktion]
go
exec [dbo].[getvalidvalues] "personid",120417,"history.person"
go
validfrom
2025-02-26 21:08:20
validto
2025-02-27 11:05:15
Auf dem Server kommt das richtige Ergebnis.
Soe sieht jetzt die Prz aus:
ALTER PROCEDURE [dbo].[getvalidvalues]
@keyname as nvarchar(25)
,@keyvalue as int
,@tablename as nvarchar(50)
as
Begin
begin try
insert into warda (warda,wann) values(N'aus getvalidvalues',getdate())
declare @strsql as nvarchar(200);
set @strsql = N'select validfrom, validto from ' + @tablename + N' where ' + @keyname + ' = ' + CAST(@keyvalue AS Nvarchar)
EXEC sp_executesql @strsql;
return(0)
end try
begin catch
return(-1)
end catch
end
Ich nutze auch einige andere Prozeduren, keine Probleme.
Ich versuche jetzt mal vom dynamischen SQL auf statisch, nur zum Test.
Ich bin da echt mit meinem Latein am Ende. ich habe mehrere STP, die fehlerfrei sich mit Access unterhalten...
Nun, ich habe jetzt einen Workaround. Die Historie Tabellen sind auch als verpnüpfte Tabellen vorhanden, also hole ich mir die Daten daraus.
Vielleicht hilft es ja ma darüber zu schlafen....
Martin
Zitat von: MartinHan am Februar 27, 2025, 17:24:02Vielleicht hilft es ja ma darüber zu schlafen....
Manchmal hilft es auch, die erhaltenen Antworten nochmal in Ruhe zu lesen:
Zitat von: PhilS am Februar 27, 2025, 14:03:23In dem Zusammenhang empfiehlt sich auch ein SET NOCOUNT ON; in der Stored Procedure.
Idealerweise direkt am Anfang der Stored Procedure.
Hi,
ich muss mich bei dir entschuldigen, aber wenn den den ganzen Tag auf Fehlersuche war, geht schon mal was durch.
Tatsache ist, es läuft!
Nochmal sorry und vielen Dank!
Martin