Announcement

Collapse
No announcement yet.

Trigger

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

  • Trigger

    Hallo

    Umgebung: Delphi 5 Ent.; ADO; MS SQLSRV 7.0/2000

    Gibt es eine Möglichkeit (Events) in der Applikation auf Trigger zu reagieren, die der SQLSRV auslöst?

    Ciao Herbert

  • #2
    Hallo,

    über einen Umweg schon. Der SQL Server 7/2000 kann direkt über T-SQL eigene Automations-Server aufrufen, so dass sich das Programm auf diesem Weg von bestimmten Ereignissen in der Datenbank informieren lassen kann. Ein Beispiel dafür (Fernsteuerung von Word bzw. Excel) ist in der Hilfe des MSSQL zu finden

    Comment


    • #3
      Hallo,

      wie kann man aber erreichen, dass eine laufende Instanz eines COM-Servers verwendet wird. Über T-SQL habe ich es lediglich geschafft, einen COM-Server neu zu instantiieren (sp_OACreate).

      Gruss,

      Marti

      Comment


      • #4
        Hallo,

        in diesem Fall kann man die vom SQL Server neu erzeugte COM-Objektinstanz zur "Vermittlungsstelle" umbauen, d.h. die eigentliche Funktion ist ein einem zweiten COM-Objekt, das sich in der ROT (Running Object Table) registriert.
        <pre>
        procedure TROTServer2.Initialize;
        begin
        inherited Initialize;
        RegisterActiveObject(Self as IUnknown, CLASS_ROTServer2,
        ACTIVEOBJECT_WEAK, FSrvROTHandle);
        end;
        </pre>
        Die erste Objektinstanz (die vom SQL Server aktiviert wird) greift dann über <b>GetActiveObject</b> direkt auf die bereits laufende Instanz zu:
        <pre>
        uses ActiveX;

        procedure TForm1.ButtonConnectClick(Sender: TObject);
        var
        swMsg : WideString;
        aSrvObj : IUnknown;
        begin
        GetActiveObject(CLASS_ROTServer2, nil, aSrvObj);
        if Assigned(aSrvObj) then
        begin
        FROTSrv := aSrvObj as IROTServer2;
        swMsg := 'Connect mit ROT-Instanz';
        end
        else
        begin
        FROTSrv := CoROTServer2.Create;
        swMsg := 'Connect mit neuer Instanz';
        end;
        StatusBar1.SimpleText := swMsg;
        ListBoxMsg.Items.Add(swMsg);
        end;
        </pre&gt

        Comment


        • #5
          Hallo,

          danke für die ausführliche Antwort. Allerdings habe ich jetzt noch das Problem, dass beim Aufruf von GetActiveObject folgender Fehler kommt<br>
          <br>
          <b>MK_E_UNAVAILABLE</b> mit der Fehlernummer <b>$800401E3</b><br>
          <br>
          Ich hatte schon einmal das Problem, wenn ich über eine Wrapperkomponente nur zu einer laufenden Instanz verbinden möchte (ckRunningOnly), dass dann eine Fehlermeldung (so ähnlich wie: es kann keine laufende Instanz mit der <GUID> gefunden werden) kam. Der Server läuft aber. Liegt es eventuell am System?<br>
          <br>
          Vielen Dank schon mal im voraus.<br>
          <br>
          Gruss,<br>
          <br>
          Marti

          Comment


          • #6
            Hallo,

            wenn das Ganze unter Windows NT oder Windows 2000 läuft, hängt es entscheidend davon ab, unter welchem <b>Benutzerkonto</b> sowohl der SQL Server als auch alle COM-Objekte ausgeführt werden. Windows NT/2000 kennt das Prinzip der getrennten <i>Windows Stations</i>, wobei die einzelnen Windows Stations völlig voneinander abgeschottet sind. Was passiert, wenn alle beteiligten Stellen unter dem Konto des Administrators ausgeführt werden

            Comment


            • #7
              Hallo,<br>
              <br>
              ich teste und entwickle unter Windows NT 4.0 SP 6. Der SQL-Server läuft lokal und somit bei mir auch mit dem gleichen Benutzerkonto. Versuchsweise hab ich's mit dem Admin-Konto auch versucht, allerdings mit gleichem "Erfolg".<br>
              <br>
              Schade, denn ich möchte einen Server entwickeln, der mir die SQL-Trigger-Events abfängt und wo ich dann in einer Applikation darauf reagieren kann.<br>
              <br>
              Oder hat jemand eine andere Idee, soetwas zu realisieren?<br>
              <br>
              Gruss,<br>
              <br>
              Marti

              Comment

              Working...
              X