Announcement

Collapse
No announcement yet.

ADO-Komponente in eine DLL einbinden

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

  • ADO-Komponente in eine DLL einbinden

    halloooo ...
    ich weiß ... ist wahrscheinlich eine dämliche frage, aber wie kann ich
    ADOQuery in meine DLL mit einbinden?
    meine funktionen/prozeduren verwenden die ADOQuery, nur weiß ich gerade
    nicht wie ich die mit in dll einbinde.
    grusssss

  • #2
    Hallo,

    die DLL bindet dazu ein Datenmodul ein, so dass die ADO Express-Komponenten (dbGo) wie gewohnt visuell konfiguriert werden können. Das Erzeugen/Zerstören der Datenmodul-Instanz sowie das Anmelden/Abmelden des Apartments (CoInitialize etc.) wird in exportierte Schnittstellenprozeduren der DLL ausgelagert, so dass der DLL-Nutzer den Zeitpunkt bestimmen kann, zu dem das Datenmodul erzeugt bzw. zerstört wird

    Comment


    • #3
      thanxxx

      Comment


      • #4
        noch eine frage ...<br>
        die dll soll so konzipiert sein, dass beim aufruf ein datenbankeintrag erzeugt wird. dies soll alles so monolithisch sein, dass das programm nur die eine funktion aufruft.<br>
        will sagen ... es wird verlangt dass die erzeugung/zerstörung der instanz des datenmoduls in der dll selbst passiert.
        die zerstörung des datenmoduls ist klar. ich denke das macht man mit<br>
        DatenModul.Free;<br>
        nur mit der erzeugung habe ich so meine probleme. geschieht dies mit<br>
        TDatenModul.Create(); ????
        wenn ja ... was kommt in den klammern rein. mit Self bekomme ich die meldung undefinierter bezeichner.
        gruss und thanx im vorau

        Comment


        • #5
          Nimm nil statt self. Das ist der Owner der Komponente. Der Owner ist fuer das Freigeben der Komponente zustaendig. nil heisst du musst die Komponente selbst freigeben (was du ja bereits machst)

          Comment


          • #6
            Hallo,

            als Beispiel könnte das etwa so aussehen:
            <pre>
            var
            bDoCoUninitialize : Boolean;
            bDoDestroyDM_ADO : Boolean;
            sMDBPath : String;

            resourcestring
            cCONNECTSTRING = 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=';

            function DBInit(const pNewMDBPath: PChar): Integer;
            var
            aCatalog : _Catalog;
            sDS : String;
            sMsg : String;
            begin
            Result := 1;
            bDoCoUninitialize := False;
            bDoDestroyDM_ADO := False;
            try
            //
            sMsg := 'CoInitialize-Fehler';
            CoInitialize(nil);
            bDoCoUninitialize := True;
            //
            sMsg := 'ACCESS-Datenbankdatei konnte nicht gelöscht werden.';
            sMDBPath := pNewMDBPath;
            if FileExists(sMDBPath) then
            DeleteFile(sMDBPath);
            //
            sMsg := 'Fehler beim Zugriff auf die ADOX-Objekte.';
            aCatalog := CoCatalog.Create;
            sConnectionStr := Format('%s%s',[cCONNECTSTRING, sMDBPath]);
            sDS := aCatalog.Create(sConnectionStr);
            aCatalog := nil;
            //
            sMsg := 'Fehler beim Erzeugen des Datenmoduls';
            DM_ADO := TDM_ADO.Create(nil);
            bDoDestroyDM_ADO := True;
            sMsg := 'Fehler beim Erzeugen der Tabelle »Adressen«';
            DM_ADO.DoCreateTable;
            //
            ... Datensatz eintragen
            //
            if bDoDestroyDM_ADO then
            DM_ADO.Free;
            if bDoCoUninitialize then
            CoUninitialize;
            except
            ShowExceptionMsg(sMsg);
            Result := 0;
            end;
            end;
            </pre&gt

            Comment

            Working...
            X