Announcement

Collapse
No announcement yet.

Probleme beim komprimieren einer Access2000 Datenbank aus einer Anwendung

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

  • Probleme beim komprimieren einer Access2000 Datenbank aus einer Anwendung

    Hallo Leute <br>
    Immer wenn ich meine Datenbank aus einer Applikation heraus komprimieren will, <br>
    (CoJetEngine.Create; .....), dann bekomme ich die Meldung, dass die Datenbank <br>
    bereits exclusiv geöffnet ist.<br>
    Na klar, ich habe die ADOConnection.close gesetzt, sogar mit ADOConnection.destroy habe ich es versucht, <br>
    Alles sinnlos. Kann mir wer weiterhelfen?

  • #2
    Hallo,

    beim Zugriff über ADO ist automatisch der Datenbankverbindung-Pool von OLE DB für diesen Prozess aktiv. Es gibt somit 2 Stellen, die diese Verbindung offen halten können: <br>
    1. VCL <br>
    2. OLE DB<br>
    Ich gehe davon aus, das für TADOConnection die Eigenschaft <b>KeepConnection</b> bereits abgeschaltet wurde. Daher würde ich zum Test generell für diese Anwendung den Datenbankverbindung-Pool abschalten, indem an das Ende von <b>ConnectionString</b> die Zeichenkette <i>"OLE DB Services=-8;</i>" angehängt wird. Die Anwendung greift auf eine ACCESS-Datenbank zu und wird daher sicherlich keinen clientseitigen Cursor (clUseClient) verwenden, sondern clUseServer

    Comment


    • #3
      Hallo,

      das ist sher interessant für mich, habe schon mehrmals nach der Möglichkeit gesucht eine MDB mit eigenem Delphi Code zu komprimieren bzw. eine Diagnose durchzuführen. Kann mir bitte jemand sagen wie das geht oder wo es beschrieben steht.

      Mathia

      Comment


      • #4
        Hallo,

        in Delphi wird die Typbibliothek für <i>Microsoft Jet and Replication Objects 2.x Library</i> importiert und die so von Delphi generierte Datei »JRO_TLB.pas« in das Projekt eingebunden. Über die Methode <b>CompactDatabase</b> des <b>JetEngine</b>-Objekts kann die Datenbank komprimiert und gleichzeitig in das neue Format von ACCESS 2000 (Engine Type=5) konvertiert werden:
        <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>
        Microsoft dokumentiert das JRO-Objektmodell in der Hilfe des <i>MDAC SDK</i> (das Bestandteil des <i>Microsoft Platform SDK</i> ist). Noch ausführlichere Infos und weitere Beispiele sind auf der DVD der <i>MSDN Library</i> zu finden.
        &#10

        Comment


        • #5
          Hi,
          <br>
          <br>CS = 'Data Source=C:\Database\Test.mdb';
          <br>CS1 = 'Data Source=C:\Database\Test.mdb';
          <br>
          <br>Gibt es einen Jet OLEDB Parameter mit dem man das machen kann?
          Oder muß man selber nach erfolgreichem komprimieren die Datei Test.mdb löschen und testx.mdb umbenennen nach test.mdb?
          <br>
          <br>Ich habe keinen gefunden (aber vieleicht kennt ja jemand hier einen solchen Parameter).
          <br>
          <br>Danke!
          <br>
          <br>mfg
          <br>P

          Comment


          • #6
            Hallo,

            auf der Hilfeseite zu CompactDatabase in der MDAC SDK Hilfedatei findet sich dazu der folgende Satz: <i>"It is not possible to do an "in place" compact, that is, one in which the source database and destination database are the same, using this method. An error will occur if the provider does not support compacting Jet databases."</i>

            Man muss das abschließende Umkopieren der Datenbanken in eigener Regie übernehmen

            Comment


            • #7
              Danke!
              <br>
              <br>mfg
              <br>P

              Comment


              • #8
                Ich habe das gleich nun mit einer Passwort-Geschützten MDB versucht. Dazu habe ich den Sourcestring um:<br>
                <b>...;PWD=???</b><br>
                erweitert. Daraufhin kam die Meldung:<br>
                <i>'Installierbares ISAM nicht gefunden'</i><br>
                in dem Moment, wo CompactDatabase aufgerufen wurde. Hat jemand eine Idee?<p>
                Schöne Grüße, Mario Noac
                Schöne Grüße, Mario

                Comment


                • #9
                  Jetzt habe ich's. So muss der String aussehen (Source und Dest):<br>
                  <b>Data Source=%s;Jet OLEDB:Engine Type=5;Jet OLEDBatabase Password="%s";</b><p>
                  Dann klappt es...<p>
                  Schöne Grüße, Mario Noac
                  Schöne Grüße, Mario

                  Comment


                  • #10
                    <pre>Hallo,
                    mal eine Frage zur Antwort von Andreas Kosch.
                    Kann mit dem Parameter "OLE DB Services=-8;",
                    in Verbindung mit einem serverseitigen Cursor
                    der Pool immer abgeschaltet werden?
                    Meine Anwendung greift über ADO (MSDASQL.1) auf einen ODBC-Treiber von Informix auf die Datenbank zu.

                    Gibt es noch eine andere Variante?

                    Helmut</pre&gt

                    Comment


                    • #11
                      Gibt es hier auch etwas vergleichbares für den C++ Builder?

                      Danke - Pete

                      Comment

                      Working...
                      X