Announcement

Collapse
No announcement yet.

Reparieren einer Access-datenbank mit Delphi

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

  • Reparieren einer Access-datenbank mit Delphi

    Wie kann ich eine Access-datenbank aus Delphi reparieren. Mit der JET-Engine funktioniert es nur, wenn Access auch instaliert ist. Es muss aber auch die Möglichkeit bestehen, die Datenbank zu reparieren, wenn kein Access, sondern nur die Treiber installiert sind. Vieleicht über die BDE? Wer weis darauf eine Antwort und könnte vieleicht sogar mit einem Code-Sample helfen? Bin für jede Hilfe dankbar

    Ruppi vom Berg

  • #2
    Hallo,

    soweit mir bekannt ist, verbirgt sich hinter dem ACCESS-Menüpunkt <i>Datenbank komprimieren und reparieren</i> nur das komprimieren (umkopieren) in eine neue MDB-Datei. Und diese Funktion kann über eines der <b>JRO</b>-Objekte ohne Hilfe der BDE und ohne Hilfe von ACCESS aufgerufen werden.

    In Delphi wird die Typbibliothek für <b>Microsoft Jet and Replication Objects 2.1 Library</b> importiert und die so von Delphi generierte Datei »JRO_TLB.pas« in das Projekt eingebunden. Somit steht nun der direkte Zugriff über das <b>IJetEngine</b>-Interface zur Verfügung. Über die Methode <b>CompactDatabase</b> des JetEngine-Objekts kann die Datenbank komprimiert werden. Das folgende Beispiel wandelt dabei das MDB-Format gleich in das neue Format von ACCESS 2000 (<i>OLEDB:Engine Type=5</i>) um:
    <pre>
    procedure TADODBTest.TestButtonClick(Sender: TObject);
    const
    CS = 'Data Source=C:\Database\Test.mdb';
    CS1 = 'Data Source=C:\Database\Test40.mdb;Jet OLEDB:Engine Type=5';
    var
    JE: IJetEngine;
    begin
    JE := CoJetEngine.Create;
    JE.CompactDatabase(CS, CS1);
    end;
    </pre&gt

    Comment


    • #3
      Hallo Herr Kosch,

      vielen Dank für Ihren guten Hinweis. Funktionier einwandfrei. Nun noch eine Frage? Wie behandele ich Passwortgeschützte Datenbanken? Habe dafür noch nichts gefunden. Können Sie mir vieleicht nochmal Helfen?

      Vielen Dank im vorraus

      Ruppi vom Ber

      Comment


      • #4
        Hallo,

        in diesem Fall muss nur der Connection String erweitert werden. Am besten lässt man diesen Verbindungsstring über den Microsoft-Dialog <b>Datenlinkeigenschaften</b> (Passwort-Eingabefeld auf der Registerseite <i>Verbindungen</i>) zusammenbauen und kopiert diesen dann über die Zwischenablage ins eigene Programm. Das könnte zum Beispiel so aussehen:
        <pre>
        CS = 'Data Source=C:\Database\Test.mdb;User Id=admin;Password=xyz;';
        ...
        </pre&gt

        Comment


        • #5
          Sehr geehrter Herr Kosch,

          vielen Dank für die Hilfe. Hat mir wirklich sehr geholfen.

          Ruppi vom Ber

          Comment


          • #6
            Hallo,<p>
            <p>
            sehr interessante Diskussion!<p>
            Ich hab schon oft überlegt, wie m,an die "eingebauten" Access-Funktionen nutzen kann. Gibt es auch eine expliziete "Reapair" Funktion?<p>
            Danke,<p><p>
            Uw

            Comment


            • #7
              Noch eine Frage: Ich habe Access 2000 und 97 installiert und kann die "Microsoft Jet and Replicationb Objects" nicht finden. Ich sollte Sie doch eh unter "ActiveX importieren" finden oder??

              Danke im Voraus für entsprechende Hilfe
              Sebastia

              Comment


              • #8
                Hallo,

                nein, der Weg über <i>Komponente | ActiveX importieren</i> kann nicht funktionieren, weil ADO und ADOX kein ActiveX-Controls sind. Statt dessen muss man <i>Projekt | Typbibliothek importieren</i> verwenden - diese Liste ist deutlich umfangreicher ;-

                Comment

                Working...
                X