Announcement

Collapse
No announcement yet.

C++ DLL und SQL

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

  • C++ DLL und SQL

    In einer C++ DLL liefert eine Funktion ein Ergebnis aus einer
    SQL-Abfrage.
    Wie bekommt die DLL es mit, dass das Hauptprogramm bereits an der
    Db angemeldet ist?
    Müssen noch Parameter übergeben werden?

  • #2
    Hallo,
    die DLL bekommt das m.E. nicht mit, heisst man muss an die DLL eine ODBC DSN o.ä.
    übergeben und dort eine DLL Funktion 'DLL Connect' implementieren.
    Zum Beispiel indem man einen temporären BDE Alias erzeugt, der auf diese DSN zeigt

    Comment


    • #3
      Erstmal vielen Dank für die rasche Antwort. Folglich müsste ich also jede DLL nocheinmal anfassen und
      dort die Funktion "DLL Connect" implementieren, oder

      Comment


      • #4
        Ja genau, in etwa so:

        function Anmeldung(DSN:PChar):PCHAR; StdCall;
        VAR AliasList:TStringList;
        PasswordBuf,Temp:String;
        Begin

        passwordBuf:= 'geheim';
        Session.active := false;
        if not session.active Then
        Begin
        database:=TDatabase.create(nil);
        AliasList := TStringList.Create;
        try
        with AliasList do
        begin
        Add('USER NAME=DBUser');
        Add('LANGDRIVER =ANSIINTL');
        Add('SQLPASSTHRU MODE =SHARED AUTOCOMMIT');
        Add('SQLQRYMODE=SERVER');
        Add('PASSWORD=' + PasswordBuf);{Vertrieb!!!!Parameter}
        Add('ODBC DSN =' + strPas(DSN));
        end;
        With Session Do Begin
        CloseDatabase (database);
        deletealias ('DATEN');
        ConfigMode := cmSession;
        AddAlias('DATEN', 'ORACLE Odbc Driver',
        AliasList);
        active;
        database.aliasname:='DATEN';
        database.databasename:='DATEN';
        database.LoginPrompt := false;
        database.Params.Add('USER NAME=DBUser');
        database.Params.Add('PASSWORD=' + PasswordBuf);
        try
        database.connected := true;
        DB_Anmeldung := J;
        except
        Begin
        DB_Anmeldung := ERROR;
        temp:='SQL Zugriff fehlerhaft. Überprüfen Sie Loginname und DSN ...';
        StrPCopy(pc_Result,temp);
        Result:=pc_Result;
        exit;
        end;
        end;
        end;
        finally
        AliasList.Free;
        end;
        end;
        end;

        Mit dem Datenalias können dann die Datenzugriffskomponeten
        initialisiert werden

        Comment


        • #5
          Hallo,
          erstmal vielen Dank für das Beispiel, aber zum einen arbeiten
          wir mit einem nativen Zugriff auf eine Oracle-Datenbank.
          (d.h.wir nutzen nicht die BDE, sondern haben externe Komponenten für den
          Zugriff)
          Und zum anderen sollten die diversen C-DLLs eigentlich nicht mehr
          angefaßt werden.
          Gibt es noch andere Möglichkeiten, oder kann Delphi generell nicht
          automatisch linken und die einen Connect zur Datenbank herstellen?
          Bei C++ werden doch die Connect-Parameter "automatisch" an die DLL
          weitergegeben, woher unsrere DLLs stammen

          Comment

          Working...
          X