Announcement

Collapse
No announcement yet.

Update in verschiedene Tabellen

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

  • Update in verschiedene Tabellen

    Hallo zusammen

    Ich lese aus einem WebFormular die Daten aus und speichere diese via ADO in diverse Tabellen der MSDE Datenbank. <br>
    Ich benutze dazu mehere TADOConnction.Excute(Update....) aufrufe um alle
    Tabellen zu updaten. <br>
    Gibt es eine Variante um in einem Rutsch mehrer Tabellen zu updaten?
    <p>
    Gruss Onail

  • #2
    Hallo,

    ja - man kann in einem einzigen Aufrufe alle SQL-Anweisungen <b>gleichzeitig</b> absetzen. Der MS SQL Server (alias MSDE) unterstützt SQL-Batches, die aus mehreren Anweisungen bestehen:

    Mehrere Aufrufe in der DFM-Datei für die TMemo-Instanz zuordnen:
    <pre>
    object MemoBatchSQL: TMemo
    Left = 0
    Top = 29
    Width = 442
    Height = 164
    Align = alTop
    Lines.Strings = (
    'DECLARE @iQuantity INTEGER'
    ''

    'SELECT @iQuantity = Quantity FROM BatchProducts WHERE ProductID ' +
    '= 2'
    ''
    'IF (@iQuantity < 3) '
    'BEGIN'
    ' RAISERROR(50001,16,1)'
    ' RETURN'
    'END'
    ''

    'UPDATE BatchProducts SET Quantity = Quantity - 1 WHERE ProductID' +
    ' = 2'
    '')
    TabOrder = 1
    end
    </pre>
    Alle SQL-Anweisungen aus der TMemo-Instanz in einem Aufruf ausführen lassen:
    <pre>
    procedure TForm1.ActionBatchExecuteExecute(Sender: TObject);
    var
    swSQL : WideString;
    iRowsAffected : Integer;
    begin
    ADODataSet1.Active := False;
    swSQL := MemoBatchSQL.Text;
    try
    ADOConnection1.Execute(swSQL, iRowsAffected, [eoExecuteNoRecords]);
    StatusBar1.SimpleText := Format('%d Datensatz geändert',[iRowsAffected]);
    finally
    ADODataSet1.Active := True;
    end;
    end;
    </pre>
    Alternativ kann man auch eine Stored Procedure oder einen INSTEAD OF-Trigger dazwischenschalten, um die Aufteilung auf die verschiedenen Tabellen vorzunehmen

    Comment

    Working...
    X