Announcement

Collapse
No announcement yet.

Delphi 6 mit ADOCommand auf MS SQL; Rückgabewert?

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

  • Delphi 6 mit ADOCommand auf MS SQL; Rückgabewert?

    hallo,
    ich versuche auf eine MS SQL mit dem ADO- Befehl eine Select Anweisung anzuwenden, dies funktioniert soweit, jetzt möchte ich aber den Inhalt als Rückgabewert z.B. in einem Edit.Text anzeigen lassen:

    Also folgendermasen; Die DB enthält verschiedene Produkte mit jeweils einer laufenden Nummer, jetzt möchte ich die größte laufende Nummer von Produkt xy zurückgeben! Die SELECT Anweisung ist kein Problem, aber die Rückgabemenge, brauch ich da eine StoredProc?

    Danke im voraus!

    Hab es jetzt nochmals Versucht; Mit Edit1.Text := ADOCommand.Parameters[0].Value; Bekomme dann die Meldung: "Listenindex überschreitet das Maximum(0)... ???
    Ich hab als Direction bei Parameter einen ReturnValue eingegeben!
    Was mach ich falsch?

    Nochmals danke...

  • #2
    O.k ich hab´s jetzt Teilweise geschafft, ich kann aber nicht alle Teile abfragen; Bekomme die Fehlermeldung : "Endweder BOF oder EOF ist True gesetzt, oder aktueller Datensatz wurde gelöscht. Der aktuelle Vorgang benötigt einen aktuellen Datensatz"

    Ich denke, BOF/EOF = Begin of file/End of file!
    Aber wieso aktueller Datensatz gelöscht??

    Comment


    • #3
      Hmmm............
      Also es hat nen ganzen Morgen gedauert, aber jetzt funktionierts....
      Ich konnt einfach keine Ruhe geben! :-)
      Um so glücklicher bin ich jetzt, dass ich es gaaaaaaaaanz alleine geschafft habe!

      Gru&#223

      Comment


      • #4
        Hallo Hans!

        Vielleicht erleuchtest Du uns mit Deiner Lösung?

        Ich nutze die Batch-Eigenschaft von ADO und MS-SQL aus und verfahre wie folgt

        <PRE>
        var
        Ergebnis : integer ; //Beispiel

        resourcestring
        cts1 = 'Declare @RueckgabeWert integer' + #13 +
        'EXEC Stored_Procedure_Meine_Abfrage %d @RueckgabeWert Output' + #13 +
        'select @RueckgabeWert as NewWert' + #13 +
        'Go';
        begin
        ...
        with ADODataset do begin
        active := false;
        CommandText := format(cts1,[99999]); // Übergabe eines Integer-Wertes
        active := true;
        Ergebnis := fieldbyName('NewWert').asInteger; // Übernahme des Ergebnis
        ...
        end;

        </PRE>

        Die Stored_Procedure_Meine_Abfrage könnte eventuell so aussehen

        <Pre>
        create Stored_Procedure_Meine_Abfrage
        @Datensatz_Nr integer /* erwartet dann eine Eingabe */
        @Ergebnis integer OUTPUT /* wird dann zurückgegeben */
        as

        Start Transaction

        set @Ergebnis = select ANZAHL_JAHRE from MeineTabelle where MeineTabelle.PD_UND_IDNR = @Datensatz_Nr

        Commit Transaction

        Go

        </Pre>

        Die CommandText-Strings halte ich zum Teil in der Datenbank in einer eigenen Tabelle vor. In Zusammenarbeit mit Forms, die sich selbst erstellen, läßt sich damit eine Anwendung schreiben, die relativ unabhängig ist von Änderungen an der Datenbank. Naja, das ist ein anderes Thema.

        Gruß
        Bernhar

        Comment

        Working...
        X