Verwendung von ADOX von C++ zum Kopieren einer alten Jet-Datenbankdatei in einer neueren Jet 4.0-Format-Datenbank

SPRACHE AUSWÄHLEN SPRACHE AUSWÄHLEN
Artikel-ID: 321328 - Produkte anzeigen, auf die sich dieser Artikel bezieht
Dieser Artikel wurde archiviert. Er wird im vorliegenden Zustand bereitgestellt und nicht mehr aktualisiert.
Alles erweitern | Alles schließen

Zusammenfassung

Dieser Artikel beschreibt wie Sie ActiveX Data Objects Extensions für Datendefinitionssprache und Sicherheit (ADOX) mit Visual C++ zum Erstellen einer neuen Jet-Datenbank mit Daten aus einer älteren formatierte Jet-Datenbank. Dieser Artikel beschreibt außerdem die folgenden Techniken, die in ADOX mit Visual C++ verwendet werden:
  • Verwendung von ADOX mit Visual C++ zum Erstellen einer Jet-Datenbank
  • So erhalten Sie die Liste der Tabellen in einer Datenbank
  • So erhalten Sie die Metadaten einer Tabelle, einschließlich Spalten und Datentypen
  • Wie Sie die Append -Methode ADOX, zum Erstellen von Tabellen und Spalten
  • Wie Sie Jet OLE DB-Provider-spezifische Eigenschaften, um eine verknüpfte Tabelle erstellen
  • Wie ADO in Kombination mit ADOX verwendet, um Daten aus einer Datenbank in eine andere zu kopieren
  • Zum Löschen einer Tabelle aus einer Jet-Datenbank

Weitere Informationen

Testen der CompactDatabase -Methode des Jet Replication-Objekt (JRO) konvertieren festgestellt, dass die Methode keine Efectively unterstützt eine Tabelle in Jet 4.0-Format Wenn die Quelltabelle in Access 2.0 oder in Access 95-Format ist. Wenn eine Tabelle, die von Access 2.0 oder von Access 95 generiert ist in Jet 4.0-Format mit der CompactDatabase -Methode des JRO-Objekt konvertiert wird, kann nicht Access 2000 oder Access 2002 erfolgreich die Datenbank öffnen. Dieses Problem tritt bei Microsoft noch untersucht. Beachten Sie, dass JRO Objekte eigentlich nur mit Jet 4.0 und Jet 3.5 x Format Datenbanken arbeiten.

Verwenden Sie ADOX erstellen eine neue 4.0-Format-Datenbank und Kopieren alle Tabellen, um die alte Jet-Datenbank (früher als Jet 3.5-Format) zu konvertieren. Der folgende Code veranschaulicht, wie dies tun. Dies ist ein einfaches Beispiel, mehrere spezielle Szenarien wie Primärschlüssel, Indizes, Eigenschaften und Beziehungen nicht berücksichtigt. Im Beispiel kopiert nur die Tabellen und anderen Objekten wird nicht aus der Quelldatenbank kopiert. Weitere Informationen zu diesen Techniken finden Sie in der ADOX-Dokumentation auf der MSDN Library-Website.

Speichern Sie den folgenden Code in einem C++-Projekt, und erstellen Sie das Projekt:

Hinweis : Sie haben keine nichts im Code außer für die Pfade auf die # Import und die Verbindungszeichenfolgen ändern.
#import "c:\Program Files\Common Files\system\ado\msado15.dll" 
#import "c:\Program Files\Common Files\system\ado\msadox.dll"

#include <iostream>
using namespace std;

void main()
{
	
   CoInitialize(NULL);
	
   //ADO Connection Object pointers for source and destination.
   ADODB::_ConnectionPtr SourceCon = NULL;
   ADODB::_ConnectionPtr DestCon = NULL;

   //ADOX Catalog object pointers for source and destination.
   ADOX::_CatalogPtr DestDB = NULL;
   ADOX::_CatalogPtr SourceDB = NULL;
	
   //Connection string. 
   _bstr_t SrcConnectionString(L""), DestConnectionString(L""), SourceDBLocation(L"");

   ADOX::_TablePtr linkedTbl = NULL;
   ADOX::_ColumnPtr f = NULL;
   ADOX::_TablePtr DestTable = NULL;

   try{

         SourceDBLocation = (L"C:\\JET30FormatDB.mdb");
         //Per Q299484, you must use ODBC Provider to avoid alphabetical ordering.
         SrcConnectionString = "Driver={Microsoft Access Driver (*.mdb)};"
			"DBQ=" + SourceDBLocation; 

         DestConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;"
			  "Data Source=C:\\JET40FormatDB.mdb;"	;

         SourceCon.CreateInstance(__uuidof(ADODB::Connection));
         SourceCon->Open(SrcConnectionString,"","",-1);
         SourceDB.CreateInstance(__uuidof (ADOX::Catalog));
         //ADOX catalog must have an active ADO connection 
         SourceDB->PutActiveConnection(_variant_t((IDispatch *) SourceCon));
		
         DestDB.CreateInstance(__uuidof (ADOX::Catalog));
		
         //This line creates a Jet database, and throws an exception if it already exists.
         DestDB->Create(DestConnectionString);
         DestCon.CreateInstance(__uuidof(ADODB::Connection));
         DestCon->Open(DestConnectionString,"","",-1);
         DestDB->PutActiveConnection(_variant_t((IDispatch *) DestCon));

         //Get the count of tables in Source Database.
         long x = SourceDB->Tables->Count;
         for (int i = 0; i < x ; i++)
         {
            // Go through each table that is listed as TABLE and not SYSTEM TABLE or ACCESS SYSTEM TABLE.
            if (SourceDB->Tables->Item[(long)i]->Type == _bstr_t(L"TABLE"))
            {
               cout<<"Now copying "<< (LPCSTR)SourceDB->Tables->Item[(long)i]->Name<<endl;
               _bstr_t tblName = SourceDB->Tables->Item[(long)i]->Name;
               //Start creating a table.
               DestTable.CreateInstance(__uuidof(ADOX::Table));
               DestTable->Name = tblName;

               //Get number of columns in Source Table. 
               int cnt = SourceDB->Tables->Item[tblName]->Columns->Count;
				
               //Use ADOX Append method to append all columns to the destination table. 
               for ( int col = 0; col < cnt; col++)
               {
                  f = SourceDB->Tables->Item[tblName]->Columns->Item[(long)col];
                 DestTable->Columns->Append(f->Name,f->Type,f->DefinedSize);
               }
					
               //Finally, append destination table.
               DestDB->Tables->Append( DestTable.GetInterfacePtr());

               //This step is to get the data from source table. 
               //Create a temporary linked table in Destination Database
               //and run "Insert Into mynewTable Select * from LinkedTable".
               linkedTbl.CreateInstance(__uuidof(ADOX::Table));
               linkedTbl->ParentCatalog = DestDB;
               linkedTbl->Name = "TempLink2";
               linkedTbl->Properties->Item["Jet OLEDB:Create Link"]->Value = (long)true;
               linkedTbl->Properties->Item["Jet OLEDB:Link Datasource"]->Value = SourceDBLocation;      
               linkedTbl->Properties->Item["Jet OLEDB:Remote Table Name"]->Value = tblName;
				DestDB->Tables->Append(linkedTbl.GetInterfacePtr());

               DestCon->Execute("Insert into " + tblName + " Select * From TempLink2", NULL, -1);
               //You do not have to keep this linked table around, so you can delete it. 
               DestDB->Tables->Delete("TempLink2");
               DestTable.Release();
               linkedTbl.Release();
            }
            else
            {
               cout <<"Skipping "<< (LPCSTR)SourceDB->Tables->Item[(long)i]->Name <<endl;
            }
			
        } // End of for loop.
				
        DestCon->Close();
        SourceCon->Close();
       }
       catch(_com_error &e)
       {
         _bstr_t bstrSource(e.Source());
         _bstr_t bstrDescription(e.Description());
         cout<< "Source: "<< (LPCSTR)bstrSource <<"\nDescription : " << (LPCSTR)bstrDescription <<endl;
       }
}
				

Informationsquellen

Weitere Informationen finden Sie in der MSDN Library unter der folgenden Microsoft-Website:
http://msdn2.microsoft.com/en-us/library/default.aspx
Finden Sie in der Struktur Inhaltsverzeichnis im linken Bereich der MSDN Library auf das folgende Thema:
  \Data Access
    \Microsoft Data Access Components
      \ADO
        \SDK Documentation
          \Microsoft ActiveX Data Objects (ADO)
            \ADO Programmer's Guide
				
Weitere Informationen finden Sie folgenden Artikel der Microsoft Knowledge Base:
225048INFO: Migration von DAO/Jet zu ADO/Jet
304322ACC2002: Wie Verwenden von ADOX zu Beziehungen importieren
230588Verknüpfen und Aktualisieren von verknüpften Jet-Tabellen mithilfe von ADOX
279245Update: Beim Festlegen oder überprüfen Sie Werte, indem Sie ADOX zu einer Access-Datenbank mit Standard Spalteneigenschaften deaktiviert
304323ACC2002: Wie ADOX zum Erstellen einer SQL Pass-Through-Abfrage
275252: Acc2000 erstellen eine Tabelle mit Jet-Datentypen über ADOX
252908So erstellen Sie eine Tabelle mit Primärschlüssel über ADOX
230501Gewusst wie: Microsoft Access-Datenbank über ADO komprimieren

Eigenschaften

Artikel-ID: 321328 - Geändert am: Mittwoch, 26. Februar 2014 - Version: 1.4
Die Informationen in diesem Artikel beziehen sich auf:
  • Microsoft Visual Studio 6.0 Enterprise Edition
  • Microsoft ActiveX Data Objects 2.7
Keywords: 
kbnosurvey kbarchive kbmt kbfile kbhowto KB321328 KbMtde
Maschinell übersetzter Artikel
Wichtig: Dieser Artikel wurde maschinell und nicht von einem Menschen übersetzt. Die Microsoft Knowledge Base ist sehr umfangreich und ihre Inhalte werden ständig ergänzt beziehungsweise überarbeitet. Um Ihnen dennoch alle Inhalte auf Deutsch anbieten zu können, werden viele Artikel nicht von Menschen, sondern von Übersetzungsprogrammen übersetzt, die kontinuierlich optimiert werden. Doch noch sind maschinell übersetzte Texte in der Regel nicht perfekt, insbesondere hinsichtlich Grammatik und des Einsatzes von Fremdwörtern sowie Fachbegriffen. Microsoft übernimmt keine Gewähr für die sprachliche Qualität oder die technische Richtigkeit der Übersetzungen und ist nicht für Probleme haftbar, die direkt oder indirekt durch Übersetzungsfehler oder die Verwendung der übersetzten Inhalte durch Kunden entstehen könnten.
Den englischen Originalartikel können Sie über folgenden Link abrufen: 321328
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.

Ihr Feedback an uns

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com