Announcement

Collapse
No announcement yet.

ADOConnection ohne absoluten Pfad der DB

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

  • ADOConnection ohne absoluten Pfad der DB

    Hallo,

    ich will eine Access-Datenbank ohne der Angabe des absoluten Pfads anbinden. D.h. wenn ich dann meine exe-Datei mit der *.mdb in ein anderes Verzeichnis kopiere, muss es immer noch laufen.
    Ich muss die Datenbank mit ADOConnection anbinden!

    Hat jemand Lösung?

    Danke
    Gruß Fanda

  • #2
    Hallo,

    der OLE DB Provider <i>Microsoft Jet 4.0 OLE DB Provider</i> unterstützt den <b>Properties</b>-Eintrag <i>"Data Source"</i>, so dass man den Pfad der MDB-Datei zur Laufzeit zuweisen kann:
    <pre>
    ADOConnection1.Properties['Data Source'].Value := 'C:\Temp\Export.mdb';
    </pre>
    Die TApplication-Eigenschaft <b>ExeName</b> enthält den Dateinamen und den Pfad der ausführbaren Datei der Anwendung. Ein Beispiel dazu ist in der Delphi-Hilfe

    Comment


    • #3
      Hallo,

      danke, das sieht schon mal gut aus.
      Komischerweise bekomme ich folgende Fehlermeldung:
      "Fehler bei einer aus mehreren Schritten bestehenden OLE DB-Operation. Prüfen Sie die einzelnen OLE DB-Statuswerte, falls vorhanden."

      Was mach ich falsch

      Comment


      • #4
        Hallo Frantisek,<br>
        ich bastele mir für diese Zwecke immer den kompletten Connection String für die *.mdb selbst zusammen, übergeben wird der komplette Pfad (mit Name der mdb), raus kommt der CONStr.
        <PRE>
        function Create_Con_Str(DBN:string):string;
        var MyConStr : string;
        begin
        MyConStr:='Provider=Microsoft.Jet.OLEDB.4.0;Passwo rd="";User ID=Admin;';
        MyConStr:=MyConStr + 'Data Source=' + DBN + ';';
        MyConStr:=MyConStr + 'Mode=Share Deny None;Extended Properties="";';
        MyConStr:=MyConStr + 'Locale Identifier=1033;';
        MyConStr:=MyConStr + 'Jet OLEDB:System database=' + '"C:\PRG\MICPROG\MICSYS.MDW";'; // hier sollte Dein Eintrag für die System DB stehen
        MyConStr:=MyConStr + 'Jet OLEDB:Registry Path="";';
        MyConStr:=MyConStr + 'Jet OLEDBatabase Password="password";';
        MyConStr:=MyConStr + 'Jet OLEDB:Engine Type=4;';
        MyConStr:=MyConStr + 'Jet OLEDBatabase Locking Mode=1;Jet OLEDB:Global Partial Bulk Ops=2;';
        MyConStr:=MyConStr + 'Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password="";';
        MyConStr:=MyConStr + 'Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;';
        MyConStr:=MyConStr + 'Jet OLEDBon' + CHR(39) + 't Copy Locale on Compact=False;';
        MyConStr:=MyConStr + 'Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False';
        result:=MyConStr;

        end;
        </PRE>
        Der Aufruf kann dann etwa so aussehen:<br>

        <PRE>

        procedure TDM_BUDGET.OPEN_BUDGET_CON(DBN:string);
        var Con_Str:string;
        begin
        if BUDGET_CON.connected then BUDGET_CON.connected:=false;
        Con_Str:=Create_Con_Str(DBN);
        BUDGET_CON.ConnectionString := Con_Str;
        BUDGET_CON.LoginPrompt :=false;
        BUDGET_CON.Mode:=cmReadWrite;
        BUDGET_CON.Open;
        end;
        </PRE>
        ach so, man sollte drauf achten, dass im Objectinspektor die TADOConnection auf Connected = false steht.<br>
        Gruss Hendri

        Comment


        • #5
          Hallo,

          beide Wege führen zum gleichen Ziel. Der Inhalt vom ConnectionString wird von ADO bzw. dem OLE DB Provider dafür verwendet, die <b>Properties</b>-Kollektion mit Werten zu füllen. Der ConnectionString ist also eine Vorbelegung, die später durch den direkten Zugriff auf die Properties-Kollektion jederzeit überschrieben werden kann

          Comment

          Working...
          X