Access-o-Mania

Datenbanken (Deutsch/German) => MS SQL-Server => Thema gestartet von: MartinHan am Februar 27, 2025, 13:14:14

Titel: Stored Procedure startet nicht
Beitrag von: MartinHan am Februar 27, 2025, 13:14:14
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

   
Titel: Re: Stored Procedure startet nicht
Beitrag von: PhilS am Februar 27, 2025, 14:03:23
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.
Titel: Re: Stored Procedure startet nicht
Beitrag von: MartinHan am Februar 27, 2025, 14:27:06
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.
Titel: Re: Stored Procedure startet nicht
Beitrag von: MartinHan am Februar 27, 2025, 17:24:02
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
Titel: Re: Stored Procedure startet nicht
Beitrag von: PhilS am Februar 27, 2025, 19:00:57
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.
Titel: Re: Stored Procedure startet nicht
Beitrag von: MartinHan am Februar 27, 2025, 20:53:05
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