Войти

Как скопировать С помощью ADOX из C++ старый файл базы данных Jet для новой базы данных формата Jet 4.0

ВНИМАНИЕ! Перевод данной статьи был выполнен не человеком, а с помощью программы машинного перевода, разработанной корпорацией Майкрософт. Корпорация Майкрософт предлагает вам статьи, переведенные как людьми, так и средствами машинного перевода, чтобы у вас была возможность ознакомиться со статьями базы знаний KB на родном языке. Однако машинный перевод не всегда идеален. Он может содержать смысловые, синтаксические и грамматические ошибки, подобно тому как иностранец делает ошибки, пытаясь говорить на вашем языке. Корпорация Майкрософт не несет ответственности за неточности, ошибки и возможный ущерб, причиненный в результате неправильного перевода или его использования. Корпорация Майкрософт также часто обновляет средства машинного перевода.

321328
Эта статья помещена в архив. Она предлагается "как есть" и обновляться не будет.
Аннотация
В данной статье демонстрируется использование расширения объектов данных ActiveX для языка определения данных и безопасности (ADOX) с помощью Visual C++ для создания базы данных Jet с использованием данных из старых формате базы данных Jet.В этой статье также демонстрирует следующие приемы, используемые в ADOX с Visual C++:
  • Использование ADOX с Visual C++ для создания базы данных Jet
  • Получение списка таблиц в базе данных
  • Как получить метаданные из таблицы, включая столбцы и типы
  • Использование Добавление метод ADOX для создания таблиц и столбцов
  • Способы создания связанной таблицы с помощью свойства поставщика OLE DB для Jet
  • Использование ADO в сочетании с ADOX для копирования данных из одной базы данных
  • Как удалить таблицу из базы данных Jet
Дополнительная информация
Тестирование CompactDatabase Открывает метод объекта репликации Jet (JRO) не поддерживает метод efectively преобразование таблицы формата Jet 4.0, если исходной таблицы в Microsoft Access версии 2.0 или в формате Access 95. Если таблицы, созданный в Access версии 95 или Microsoft Access 2.0 преобразуется с использованием формата Jet 4.0 CompactDatabase метод объекта JRO Access 2000 или Access 2002 не удается успешно открыть базу данных. Данная проблема возникает в процессе исследования корпорации Майкрософт. Обратите внимание, что объекты JRO требовалось работать только с Jet 4.0 и Jet 3.5 x формат базы данных.

Для преобразования базы данных старой Jet (меньше формата Jet 3.5), с помощью ADOX для создания новой базы данных формата версии 4.0 и копирования всех таблиц. Следующий код демонстрирует это сделать. Это простой пример, не предусматривает несколько специальных сценариев, таких как первичные ключи, индексы, свойств и отношений. Пример копирует только таблицы и другие объекты не копируются из исходной базы данных. Для получения дополнительных сведений об этих методов в документации ADOX на сайте библиотеки MSDN.

Сохранить следующий код в проект C++, а затем построение проекта:

ПРИМЕЧАНИЕ: Вам нет необходимости изменять что-либо в коде, за исключением путей на # import и строки подключений.
#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;       }}				
Ссылки
Для получения дополнительных сведений посетите библиотеку MSDN на веб-узле корпорации Майкрософт:В содержимое дерева в левой части библиотеки MSDN перейдите в следующий раздел справки:
  \Data Access    \Microsoft Data Access Components      \ADO        \SDK Documentation          \Microsoft ActiveX Data Objects (ADO)            \ADO Programmer's Guide				
Для получения дополнительных сведений щелкните следующий номер статьи базы знаний Майкрософт:
225048 ИНФОРМАЦИЯ: Проблемы миграции от DAO/Jet ADO/Jet
304322 ACC2002: Как использовать ADOX Импорт отношений
230588 Как связать и обновить связанные таблицы Jet, с помощью ADOX
279245 ИСПРАВИТЬ: Свойства столбца по умолчанию установлен при установке или проверка значений с помощью ADOX для базы данных Access
304323 ACC2002: Как создать запрос к серверу с помощью ADOX
275252 ACC2000: Как создать таблицу с типами данных Jet через ADOX
252908 Создание таблицы с первичным ключом по ADOX
230501 Как сжать базу данных Microsoft Access через ADO
Преобразования Jet ADOX преобразования создание HOWTO JET40 4.0 свойств VC ++ VC C++

Предупреждение: эта статья переведена автоматически

Свойства

Номер статьи: 321328 — последний просмотр: 02/21/2014 00:44:43 — редакция: 4.0

  • Microsoft Visual Studio 6.0 Enterprise Edition
  • Microsoft ActiveX Data Objects 2.7
  • kbnosurvey kbarchive kbfile kbhowto kbmt KB321328 KbMtru
Отзывы и предложения