Mit ADOX Datenbank anlegen



  • Hi,

    ich will mit dem C++ Builder 2010 und ADOX eine Access-Datenbank anlegen und habe (leider) noch offene Fragen:

    Ich hbe ADOX_TLB importiert und lege die Datenbank an:

    Adox_tlb::TCOM_Catalog cat = CoCatalog::Create();
    WideString conn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\\test.mdb;";
    cat->Create(conn.c_bstr());
    delete cat;
    

    - Soweit alles prima, aber solange ich mein Programm nicht beendet habe ist die Datenbank exklusiv geöffnet. Wie kann ich das umgehen?

    - Und wie kann ich die Datenbank mit einem Kennwort versehen?

    Danke für eure Hilfe,

    PP



  • Alles nur Vermutungen:
    1. Nachschauen, ob die TCOM_Catalog-Instanz eine Funktion ala Abort, Disconnect o.ä. bietet und die vor dem delete aufrufen. Ist letzteres überhaupt korrekt? Schliesslich ist kein new zu sehen?
    2. Den ConnectionString entsprechend erweitern!? Details sollten sich der Access-Dokumentation entnehmen lassen.



  • delete cat;
    

    war auch nur ein Schuss ins Blaue.

    Das Interface ist so definiert:

    // *********************************************************************//
    // Interface: _Catalog
    // Flags:     (4544) Dual NonExtensible OleAutomation Dispatchable
    // GUID:      {00000603-0000-0010-8000-00AA006D2EA4}
    // *********************************************************************//
    interface _Catalog  : public IDispatch
    {
    public:
      virtual HRESULT STDMETHODCALLTYPE get_Tables(Adox_tlb::Tables** ppvObject/*[out,retval]*/) = 0; // [0]
      virtual HRESULT STDMETHODCALLTYPE get_ActiveConnection(VARIANT* pVal/*[out,retval]*/) = 0; // [1]
      virtual HRESULT STDMETHODCALLTYPE set_ActiveConnection(VARIANT pVal/*[in]*/) = 0; // [1]
      virtual HRESULT STDMETHODCALLTYPE _set_ActiveConnection(LPDISPATCH pVal/*[in]*/) = 0; // [1]
      virtual HRESULT STDMETHODCALLTYPE get_Procedures(Adox_tlb::Procedures** ppvObject/*[out,retval]*/) = 0; // [2]
      virtual HRESULT STDMETHODCALLTYPE get_Views(Adox_tlb::Views** ppvObject/*[out,retval]*/) = 0; // [3]
      virtual HRESULT STDMETHODCALLTYPE get_Groups(Adox_tlb::Groups** ppvObject/*[out,retval]*/) = 0; // [4]
      virtual HRESULT STDMETHODCALLTYPE get_Users(Adox_tlb::Users** ppvObject/*[out,retval]*/) = 0; // [5]
      virtual HRESULT STDMETHODCALLTYPE Create(BSTR ConnectString/*[in]*/, 
                                               VARIANT* Connection/*[out,retval]*/) = 0; // [6]
      virtual HRESULT STDMETHODCALLTYPE GetObjectOwner(BSTR ObjectName/*[in]*/, 
                                                       Adox_tlb::ObjectTypeEnum ObjectType/*[in]*/, 
                                                       VARIANT ObjectTypeId/*[in,opt]*/, 
                                                       BSTR* OwnerName/*[out,retval]*/) = 0; // [7]
      virtual HRESULT STDMETHODCALLTYPE SetObjectOwner(BSTR ObjectName/*[in]*/, 
                                                       Adox_tlb::ObjectTypeEnum ObjectType/*[in]*/, 
                                                       BSTR UserName/*[in]*/, 
                                                       VARIANT ObjectTypeId/*[in,opt]*/= TNoParam()) = 0; // [8]
    
    #if !defined(__TLB_NO_INTERFACE_WRAPPERS)
    ...
      VARIANT __fastcall get_ActiveConnection(void)
      {
        VARIANT pVal;
        OLECHECK(this->get_ActiveConnection((VARIANT*)&pVal));
        return pVal;
      }
    ...
      __property   LPDISPATCH      ActiveConnection = {write = _set_ActiveConnection};
    ...
    #endif //   __TLB_NO_INTERFACE_WRAPPERS
    

    Meine Vermutung wäre

    ActiveConnnection->Close()
    

    aber ich kriege das leider nicht hin 😢

    Zum Kennwort: Im ConnectionString kann ich nur ein Kennwort angeben, um eine mit einem Kennwort geschützte DB zu öffnen. Vorher müsste ich aber erst das Datenbank-Kennwort in der DB setzen.

    Mehrstündiges ggooglen hat mich auch ncht weitergebracht, die Beispiele sind alle DOTNET 😢

    Falls noch jemand einen Tipp hat, wie man das mit dem C++-Builder hinbekommt, würde ich mich sehr freuen!

    PP



  • Keine Ahnung bzgl. des OLE-Krams, sorry.
    Zum Connectionstring: http://lmgtfy.com/?q=access+connectionstring+password


Anmelden zum Antworten