Announcement

Collapse
No announcement yet.

Rückgabe von Daten aus Stored Procedure

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Rückgabe von Daten aus Stored Procedure

    Ich habe folgendes Problem.<BR>Ich habe eine Select-Procedure auf dem MS-SQL Server 7 angelegt.<BR>Beim Test über den Query Analyser werden alle angeforderten Datenfelder auch angezeigt.<BR>Beim Ausführen der Procedure unter Delphi (Version 4) erhalte ich nur einige Datenfelder ?!<BR>
    Danke, Volker

  • #2
    Hallo,

    wie liefert die Stored Procedure die Daten der SELECT-Anweisung zurück? Als Ergebnismenge oder als OUTPUT-Parameter? Wie sieht die Struktur (Datentypen) der betroffenen Tabelle aus? Wie sieht ein kleines Beispiel aus, mit dem sich dieser Effekt jederzeit reproduzieren lässt

    Comment


    • #3
      Hallo Herr Kosch,<BR>
      vielen Dank für die schnelle Reaktion.<BR>
      Die Tabelle enthält Datenfelder vom Datentyp NVARCHAR und SMALLDATETIME, als Rückgabe erwarte ich eine Ergebnismenge.<BR>
      Zurückgegeben werden die DATETIME-Felder, allerdings auch nicht alle. Ich habe heute die gleiche Abfrage mit den in <BR>
      der Enterpriseversion vorhandenen ADO Komponenten erstellt, hier funktioniert die Rückgabe problemlos,<BR>habe ich allerdings privat nicht zur Verfügung. Nachfolgend die Procedure: <BR>
      <BR>
      CREATE PROCEDURE [dbo].[SP_SELECT_SAMNR] <BR>
      (<BR>
      @VDIR VARCHAR(4)<BR>
      ,@GSNR VARCHAR(4)<BR>
      ,@INSPNR VARCHAR(4)<BR>
      ,@VVON VARCHAR(7)<BR>
      ,@VBIS VARCHAR(7)<BR>
      )<BR>
      <BR>
      AS<BR>
      <BR>
      SET NOCOUNT ON<BR>
      <BR>
      Declare @RC_SELECT_SAMNR int<BR>
      Declare @MODUL_ID varchar(50)<BR>
      Declare @SQL nvarchar(4000)<BR>
      Declare @AND int<BR>
      <BR>
      Select @RC_SELECT_SAMNR = 0<BR>
      Select @MODUL_ID= 'SP_SELECT_SAMNR'<BR>
      Select @AND = 0<BR>
      SELECT @SQL = 'Select '+<BR>
      ' [AGT_SANR].[SAMNR] '+<BR>
      ',[AGT_SANR].[GSNR] '+<BR>
      ',[AGT_SANR].[INSPNR] '+<BR>
      ',[AGT_SANR].[NAME] '+<BR>
      ',[AGT_SANR].[VORNAME] '+<BR>
      ',[AGT_SANR].[BEGINN] '+<BR>
      ',[AGT_SANR].[ENDE] '+<BR>
      ',[AGT_SANR].[GRUND] '+<BR>
      ',[AGT_SANR].[KA] '+<BR>
      ',[AGT_VKAT].[VKATTXT] '+<BR>
      ',[AGT_GSTXT].[GSTEXT] '+<BR>
      ',[AGT_GSTXT].[VDIR] '+<BR>
      'FROM AGT_SANR LEFT JOIN AGT_VKAT '+<BR>
      'ON ([AGT_SANR].[VKAT] = [AGT_VKAT].[VKAT]) '+<BR>
      'LEFT JOIN AGT_GSTXT '+<BR>
      'ON ([AGT_SANR].[GSNR] = [AGT_GSTXT].[GSID]) '<BR>
      <BR>
      /*** Prüfen, ob Einschränkungen gefordert sind ****/<BR>

      If @VDIR+@GSNR+@INSPNR+@VVON+@VBIS <> ''<BR>
      begin<BR>
      Select @SQL=@SQL + ' WHERE '<BR>
      if @VDIR <>''<BR>
      begin<BR>
      Select @AND = 1<BR>
      Select @SQL = @SQL + '[AGT_GSTXT].[VDIR]= '''
      +@VDIR+ ''''<BR>
      end <BR>
      <BR>

      if @GSNR <> ''<BR>
      begin <BR>
      if @AND = 1 <BR>
      begin<BR>
      Select @SQL = @SQL + ' AND '<BR>
      end<BR>

      Select @AND = 1<BR>
      Select @SQL = @SQL + '[AGT_SANR].[GSNR]= ''' + @GSNR + ''''<BR>
      end<BR>
      <BR>
      .....
      <BR>
      <BR>
      Exec @RC_SELECT_SAMNR = SP_EXECUTESQL @SQL <BR>
      <BR>
      IF @RC_SELECT_SAMNR <> 0 <BR>
      BEGIN<BR>
      Raiserror<BR>
      ('Select ist wegen Error %u fehlgeschlagen -- %s', 16, -1,<BR>
      @RC_SELECT_SAMNR, @MODUL_ID)<BR>
      Return (@RC_SELECT_SAMNR)<BR>
      END<BR>
      <BR>
      Return (@RC_SELECT_SAMNR)
      &#10

      Comment


      • #4
        Hallo Herr Kosch,<BR><BR>
        vielen Dank für die schnelle Reaktion.<br>
        Die Tabelle enthält Datenfelder vom Datentyp NVARCHAR und SMALLDATETIME, als Rückgabe erwarte ich eine Ergebnismenge.<br>
        Zurückgegeben werden die DATETIME-Felder, allerdings auch nicht alle.<br>Auch die Nutzung des Datentyps CHAR ändert nichts an dem Verhalten.<br>
        Ich habe heute die gleiche Abfrage mit den in der Version 5 Enterprise vorhandenen ADO Komponenten erstellt, hier funktioniert<BR> die Rückgabe der Ergebnismenge problemlos, diese habe ich allerdings privat nicht zur Verfügung. Zum Testumfeld:<P>

        - Tabellen beinhaltet 3 nVachchar, 3 Smalldatetime -Felder <BR>
        - Verbindung zur Datenbank erfolgt über Database/Session <BR>
        - die SP liegt in der Datenbank als eine einfache Select Feld1, Feld2,.. from .. Anweisung<BR>
        - Datenabfrage erfolgt über eine SP - Komponente<BR>
        - DBGrid soll über ein Datasource gefüllt werden

        &#10

        Comment


        • #5
          Hallo,

          &gt;Verbindung zur Datenbank erfolgt über Database/Session

          damit greift das Programm über die BDE auf die MS SQL Server 7-Datenbank zu. Im Verzeichnis <i>C:\Programme\Gemeinsame Dateien\Borland Shared\BDE</i> ist die Hilfedatei <b>SQLLNK32.HLP</b> zu finden. Auf der Hilfeseite <i>Anforderungen für Microsoft SQL Server</i> steht, dass der SQLLinks-Treiber der BDE für den Microsoft SQL Server nur für die Versionen <b>4.x</b> und <b>6.x</b> zur Verfügung steht. Somit kann die BDE nur auf die Tabellen/Spalten zugreifen, deren Datentyp bereits in der Version 6.5 vorhanden war.

          P.S: Microsoft hat den MS SQL Server völlig neu geschrieben. Die Version 6.5 stammte noch von der von Sybase lizenzierten SQL-Server-Version ab. Beginnend mit der Version 7 ist es nun eine ein völlig neu konzipierte und hoch-moderne SQL-Datenbank, so dass diese grundsätzlichen Änderungen auch Auswirkungen auf die Treiber haben. Der Microsoft SQL Server 7 war überhaupt erst der Grund, warum Borland ADO Express bereitstellen <b>musste</b> (da die BDE diesen Job nicht mehr übernehmen kann). Borland hat außerdem angekündigt, dass die SQLLinks-Treiber der BDE demnächst überhaupt nicht mehr unterstützt werden

          Comment


          • #6
            Hallo,

            also ich weiss ja nicht, ob ich das richtig verstanden habe, aber ich benutze delphi 5 pro und sqlserver 7 und sqlserver 2000 und habe da beim Zugriff über BDE und ODBC (nur Borland hat Native-Treiber seit 6.5 eingestellt, der ODBC-Treiber kommt ja immer von MS) nie Probleme. Wenn man eine Datenmenge über eine Stored Proc holt, dann kein Execute sondern ein Open ausführen.

            vielleicht hilft das, bye,
            Helmu

            Comment


            • #7
              Hallo,

              &gt;..habe da beim Zugriff über BDE und ODBC .. nie Probleme..

              in diesem Fall nutzt die angesprochene Datenbank des MS SQL Server 7/2000 zufällig <b>keine</b> Datentypen, die erst ab der Version 7 zur Verfügung stehen oder die Datenbank wurde bereits über <b>sp_dbcmptlevel</b> in den Kompatiblitäts-Modus für 6.x geschaltet. Auch dann bleibt allerdings das Problem der Borland-Ankündigung, demnächst die BDE nur noch auf dBASE und Paradox zu beschränken

              Comment

              Working...
              X