Announcement

Collapse
No announcement yet.

Stackoverflow bei ADOCommand.Exectute()

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

  • Stackoverflow bei ADOCommand.Exectute()

    hallo Leute,

    ich habe ein Problem beim Ausführen von ADOCommand. Wenn der Query ein SELECT-Befehl ist, läuft die Routine einwandfrei. Wenn er aber ein z.B. UPDATE-Befehl ist, dann gibt es "Stacküberlauf" bei der Zuweisung von Recordset.

    So ist mein Code:

    <pre>
    procedure .....
    var RecCount: integer;
    begin
    try
    //dmData ist ein Datenmodul
    dmData.ADOCommand1.CommandText := 'UPDATE Personal SET Groesse=160 WHERE PersNr=1234';
    //Zuweisung erzeugt "Stackoverflow" bei "UPDATE"...
    dmData.ADODataSet1.Recordset := dmData.ADOCommand1.Execute(RecCount, EmptyParam);
    except
    //ShowError() bringt nur ein MsgBox
    on e:Exception do ShowError('Fehler: '#13#10+e.Message);
    end;
    end;
    </pre>

    Das ist ein kleiner Tool, um eine beliebige Query auszuführen. Deshalb möchte ich Recordset holen, um die Daten anzuzeigen.

    Gibt es eine Möglichkeit dieses Problem unabhängig von Queries zu lösen.

    vielen Dank im Voraus.

    Nguyen Dai Duong

  • #2
    habe ich noch etwas vergessen...

    Delphi 5.01 unter Windows 2000 SP2

    duon

    Comment


    • #3
      Hallo,

      das geht so leider nicht. Immer dann, wenn die TADOCommand-Methode Execute keine Ergebnismenge zurückliefert (so wie im Fall eines UPDATE-Aufrufs), muss <b>[eoExecuteNoRecords]</b> für die Eigenschaft ExecuteOptions verwendet werden. Das Zuweisen an TADODataSet.RecordSet kommt in diesem Fall ebenfalls nicht in Frage.

      Um eine universelle Funktion schreiben zu können, muss man direkt mit den nativen ADO-Objekten (Command, Recordset) hantieren und die Zuweisung an TADODataSet.RecordSet nur dann aufrufen, wenn das erhaltene Recordset nicht nil ist

      Comment


      • #4
        Hallo,

        ich möchte eine universelle Funktion schreiben. Wie kann ich aber direkt mit den nativen ADO-Objekten hantieren? Haben Sie vielleicht ein Beispiel dafür?

        Ich habe probiert mit _Recordset - das hat so nicht funktioniert:

        <pre>
        ...
        var Recset: _Recordset;
        ...
        begin
        ...
        Recset := MyCommand.Execute(..);
        if Recset <> NIL then begin
        ... Recset ist aber nicht NIL
        end;
        ...
        </pre>

        Vielen Dank im Voraus

        duon

        Comment

        Working...
        X