Announcement

Collapse
No announcement yet.

stored proc und activex

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

  • stored proc und activex

    Hallo,

    versuche gerade per activex in einer stored proc mit einem anderen Programm per TCP/IP zu kommunizieren. Sende dem einen definierten String und erwarte mir dann einen Antwortstring zurück. Soweit, so einfach. Aber leider komme ich da nicht so voran, weil ich selber zwar Delphi programmiere, aber bisher noch nie eine activex compo erzeugt habe und deswegen ein freeware activex, nämlich SocketWrench von catalyst, benutze. Komme aber nicht ganz zurecht damit. Das Connect schaffe ich noch, aber Daten senden funktioniert nicht mehr. Es gibt zwar keine Fehlermeldung in der stored proc aber es kommt auch nichts beim anderen Programm an. Das andere Programm arbeitet sicher richtig, da im Moment dieser Infoaustausch über ein externes Programm (Delphi/Indy, von mir geschrieben) erfolgt, das ich aber dadurch ersetzen möchte.</B>Hat jemand sowas schon mal gemacht, gibt es da bessere Komponenten, wie einfach und sinnvoll wäre es, eine eigene activex compo in Delphi zu programmieren?

    Danke für alle Hinweise,
    Helmut

  • #2
    Hallo,

    bei derartigen Problemen ist es immer eine gute Idee, am Anfang mit einem Minimal-Beispiel zu beginnen, bei dem man den Erfolg/Misserfolg sofort sieht:

    Schritt 1: COM+ Objekt (alias ActiveX alias COM-Objekt) in Delphi erzeugen
    <pre>
    <b>unit</b> OSSPCOM_Impl;
    <font color="#003399"><i>{$WARN SYMBOL_PLATFORM OFF}</i></font>

    <b>interface</b>

    <b>uses</b>
    ActiveX, Mtsobj, Mtx, ComObj, OSSPCOM_TLB, StdVcl;

    <b>type</b>
    TOSSPCOMObj = <b>class</b>(TMtsAutoObject, IOSSPCOMObj)
    <b>protected</b>
    <b>function</b> Get_Daten: OleVariant; <b>safecall</b>;
    <b>procedure</b> DoWork(vInput: OleVariant; out vOutput: OleVariant); <b>safecall</b>;
    <font color="#003399"><i>{ Protected-Deklarationen }</i></font>
    <b>end</b>;

    <b>implementation</b>

    <b>uses</b> ComServ;

    <b>function</b> TOSSPCOMObj.Get_Daten: OleVariant;
    <b>begin</b>
    Result := <font color="#9933CC">'Zeichenkette aus dem COM+ Objekt'</font>;
    SetComplete;
    <b>end</b>;

    <b>procedure</b> TOSSPCOMObj.DoWork(vInput: OleVariant; out vOutput: OleVariant);
    <b>begin</b>
    vOutput := vInput + <font color="#9933CC">' (ok)'</font>;
    SetComplete;
    <b>end</b>;

    <b>initialization</b>
    TAutoObjectFactory.Create(ComServer, TOSSPCOMObj, Class_OSSPCOMObj,
    ciMultiInstance, tmApartment);
    <b>end</b>.
    </pre>
    Das kompilierte COM+ Objekt wird danach in eine COM+ Anwendung installiert (siehe Komponentendienste von Windows 2000/XP/2003). Eine genauere Beschreibung aller beteiligten Zutaten und Handgriffe ist in meinem Buch <i>COM/DCOM/COM+ mit Delphi</i> zu finden.

    Schritt 2: Stored Procedure ruft das eigene COM+ Objekt auf
    <pre>
    CREATE PROCEDURE spCallCOMplusObj
    @sTXT VARCHAR(50) OUTPUT
    AS
    Declare @Object int, @hr int, @RetVal int, @iStatus int
    SET @iStatus = 1
    -- Objektinstanz erzeugen
    Exec @hr = sp_OACreate '{0E9447C4-EF22-4570-B202-45D50D3B5EFB}', @Object OUTPUT
    IF @hr = 0
    BEGIN
    SET @iStatus = 2
    END
    -- Interface-Methode (Property) abfragen
    Exec @hr = sp_OAGetProperty @Object, 'Daten', @sTXT OUTPUT
    IF @hr=0
    BEGIN
    SET @iStatus = 3
    END
    Exec @hr = sp_OAMethod @Object, 'DoWork'
    IF @hr=0
    BEGIN
    SET @iStatus = 4
    END
    Exec @hr = sp_OADestroy @Object
    Return @iStatus
    </pre>
    Schritt 3: Funktion im Query Analyzer des MS SQL Servers testen
    <pre>
    DECLARE @sTEXT VARCHAR(50)
    DECLARE @iResult INT
    EXEC @iResult = spCallCOMplusObj @sTEXT OUTPUT
    SELECT @iResult,@sTEXT
    </pre>
    Als Ergebnis muss die Zeichenkette aus dem COM+ Objekt sichtbar sein

    Comment


    • #3
      ... das wollte ich ja eigentlich vermeiden, diesen Einstieg in COM+. Allerdings komme ich mit dieser Freeware-Komponente nicht weiter und vielleicht erspare ich mir mit dem selber programmieren ein paar andere Probleme dieser Freeware Komponente. Also Auto starten und auf in das nächste Buchgeschäft (wird Kosch-Buch Nr. 6) ...

      vielen Dank,
      Helmu

      Comment

      Working...
      X