Eski bir Jet veritabanı dosyası daha yeni bir Jet 4.0 biçim veritabanına kopyalamak üzere ADOX C++'ndan nasıl kullanılır

Makale numarası: 321328 - Bu makalenin geçerli olduğu ürünleri görün.
Hepsini aç | Hepsini kapa

Özet

Bu makalede, ActiveX Veri Nesneleri Uzantıları için veri tanımlama dili ve güvenlik (ADOX) Visual C++ ile biçimlendirilmiş eski Jet veritabanındaki verileri kullanarak yeni bir Jet veritabanı oluşturmak için nasıl kullanılacağı gösterilmektedir. Bu makalede, Visual C++ ile ADOX kullanılan aşağıdaki teknikler de gösterilmektedir:
  • Jet veritabanı oluşturmak için Visual C++ ile ADOX kullanma
  • Veritabanındaki Tablo listesini nasıl elde edilir
  • Bir tablonun sütunlarını ve türleri de dahil olmak üzere meta verileri nasıl elde edilir
  • Tablolar ve sütunlar oluşturmak için ADOX Append yöntemini nasıl kullanılır
  • Bağlı bir tablo oluşturmak için Jet OLE DB sağlayıcıya özgü özellikleri nasıl kullanılır
  • ADO ADOX birlikte başka bir veritabanından veri kopyalamak için nasıl kullanılır
  • Nasıl yapılır: bir Jet veritabanından tablo silme

Daha fazla bilgi

Kaynak tablo Access 2.0 veya Access 95 biçiminde CompactDatabase yöntemi Jet Replication nesnesi (JRO) sınama yöntemi değil efectively algılamadığı reveals tablo Jet 4.0 biçimine dönüştürün. Access 95 veya Access 2.0 tarafından oluşturulan bir tablo JRO nesne CompactDatabase yöntemini kullanarak Jet 4.0 biçimine dönüştürüldüğünde, Access 2000 veya Access 2002 başarıyla veritabanı açılamıyor. Bu sorun, hala araştırma Microsoft'ta altındadır. JRO nesne yalnızca Jet 4.0 ile Jet 3.5 biçimi veritabanlarının çalışması için amaçlanmış unutmayın.

Eski Jet veritabanı (önceden Jet 3.5 biçiminden) dönüştürmek için ADOX 4.0 biçiminde yeni bir veritabanı oluşturun ve tüm tabloları kopyalamak için kullanın. Aşağıdaki kod, bunun nasıl yapılacağını gösterir. Bu işlem, basit bir örnektir ve birincil anahtarlar, <a1>Dizin</a1>, özellikleri ve ilişkileri gibi çeşitli özel senaryolar gidermez. Örnek, tablolar yalnızca kopyalar ve diğer nesneleri kaynak veritabanından kopyalayın. Bu teknikler hakkında ek bilgi için MSDN Library Web sitesinde ADOX belgelerine bakın.

Aşağıdaki kodu bir C++ projede kaydetmek ve sonra projeyi oluşturun:

Not: alma ve bağlantı dizeleri yollarında kodunu dışında bir şey değiştirmek gerekmez.
#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;
       }
}
				

Referanslar

Daha fazla bilgi için MSDN Kitaplığı aşağıdaki Microsoft Web sitesini ziyaret edin:
http://msdn2.microsoft.com/en-us/library/default.aspx
MSDN Kitaplığı'nın sol bölmedeki içindekiler ağacında aşağıdaki Yardım konusuna gidin:
  \Data Access
    \Microsoft Data Access Components
      \ADO
        \SDK Documentation
          \Microsoft ActiveX Data Objects (ADO)
            \ADO Programmer's Guide
				
Ek bilgi için, Microsoft Bilgi Bankası'ndaki makaleleri görüntülemek üzere aşağıdaki makale numaralarını tıklatın:
225048BILGI: ADO/Jet DAO/Jet ' yükseltme sorunları
304322ACC2002: İçin alma ilişkiler ADOX nasıl
230588ADOX kullanarak, Jet tablolar bağlantı ve yenileme işlemlerinin nasıl bağlı
279245Düzeltme: Varsayılan sütun özelliklerini ayarlama veya bir Access veritabanı için ADOX kullanarak değerleri denetleyin temizleniyor
304323ACC2002: Nasıl ADOX bir SQL doğrudan sorgusu oluşturmak için kullanılır
275252ACC2000: nasıl aracılığıyla ADOX'u Jet veri türleri içeren bir tablo oluştur
252908ADOX kullanarak birincil anahtar içeren bir tablo oluşturma
230501Nasıl yapılır: ADO üzerinden bir Microsoft Access veritabanı Sıkıştır

Özellikler

Makale numarası: 321328 - Son Gözden Geçirme: 15 Ağustos 2005 Pazartesi - Gözden geçirme: 1.4
Bu makaledeki bilginin uygulandığı durum:
  • Microsoft Visual Studio 6.0 Enterprise Edition
  • Microsoft ActiveX Data Objects 2.7
Anahtar Kelimeler: 
kbmt kbfile kbhowto KB321328 KbMttr
Otomatik Tercüme
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:321328

Geri Bildirim Ver