Announcement

Collapse
No announcement yet.

Trigger mit ADOCommand anlegen?

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

  • Trigger mit ADOCommand anlegen?

    Guten Tag

    Folgendes Problem:

    Ich möchte aus dem Programm heraus einen Trigger (für autowert) anlegen. Wenn ich das mit ADOCommand mache bekomme ich eine Fehlermeldung. Durch Veränderung der Eigenschaft "CommandTyp" von cmdText auf cmdUnknown läuft die sql-Anweisung fehlerfrei. Er legt nur den Trigger nicht an!!! Die Datenbank ist Oracle. Wenn ich die gleiche SQL-Anweisung über ein SQL-Exporer absetze wird der Trigger angelegt. Was mache ich falsch???
    bin für jede Hilfe dankbar.

    Gruß Ralf

  • #2
    Hallo,

    für diese Aufgabe wird das hoch-spezialisierte Command-Objekt von ADO nicht benötigt (somit ist auch TADOCommand fehl am Platz). Statt dessen kann die DDL-Anweisung direkt über die Methode <b>Execute</b> von TADOConnection oder direkt über die Connection-Objektinstanz ausgeführt werden.

    Das folgende Beispiel demonstriert, dass für das Anlegen einer neuen Tabelle sowie für das Eintragen von Testdatensätzen nur eine Instanz des Connection-Objekts von ADO benötigt wird:
    <pre>
    procedure TForm1.ButtonStartNativeClick(Sender: TObject);
    resourcestring
    cCS = 'Provider=SQLOLEDB.1;Integrated Security=SSPI;' +
    'Persist Security Info=False;' +
    'Initial Catalog=tempdb;Data Source=(local)';
    c1 = 'CREATE TABLE TestTbl2 (Nr INT NOT NULL PRIMARY KEY,' +
    'Wert VARCHAR(10) NOT NULL)';
    c2 = 'INSERT INTO TestTbl2 (Nr,Wert) VALUES (%d,''%s'')';
    var
    aCon : _Connection;
    vRows : OleVariant;
    iCnt : Integer;
    begin
    aCon := CoConnection.Create;
    aCon.CursorLocation := adUseClient;
    aCon.Open(cCS, '', '', adConnectUnspecified);
    try
    aCon.Execute(c1, vRows, adExecuteNoRecords);
    for iCnt := 1 to 100 do
    aCon.Execute(Format(c2, [iCnt, 'Nr. ' + IntToStr(iCnt)]),
    vRows, adExecuteNoRecords);
    finally
    aCon.Close;
    aCon := nil;
    end;
    end;
    </pre&gt

    Comment


    • #3
      vielen Dank für die schnelle Antwort!
      leider erhalte ich so genau das selbe resultat, die SQL-Anweisung wird ausgeführt (ohne Fehler) es ist aber kein Trigger erzeugt worden. Andere Anweisungen, wie z.b. CREATE TABLE, INSERT oder CREATE SEQUENCE laufen einwandfrei. Nur dieser Trigger nicht.

      kann es an ADO liegen?

      Gruß Ral

      Comment


      • #4
        Hallo,

        &gt;kann es an ADO liegen?

        nein - denn ADO ist es egal, welche Anweisung zur SQL-Datenbank geschickt wird. Allerdings läuft jeder Zugriff über den eingebundenen OLE DB Provider, und der ist <b>Datenbank-abhängig</b>

        Comment

        Working...
        X