Entrar

Como usar o ADOX do C++ para copiar um arquivo de banco de dados Jet atual para um banco de dados formato mais recente do Jet 4.0

IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.

321328
Este artigo foi arquivado. É oferecido "como está" e não será mais atualizado.
Sumário
Este artigo demonstra como usar o ActiveX Data Objects extensões para Data Definition Language e Security (ADOX) com o Visual C++ para criar um banco de dados Jet novo usando dados do banco de um antigo formatado dados Jet. Este artigo também demonstra técnicas a seguir são usadas em ADOX com o Visual C++:
  • Como usar ADOX com o Visual C++ para criar um banco de dados do Jet
  • Como obter a lista de tabelas em um banco de dados
  • Como obter os metadados de uma tabela, incluindo colunas e tipos
  • Como usar o método append do ADOX para criar tabelas e colunas
  • Como usar propriedades de específicas do provedor do Jet OLE DB para criar uma tabela vinculada
  • Como usar o ADO em combinação com ADOX para copiar dados de um banco de dados para outro
  • Como excluir uma tabela de um banco de dados do Jet
Mais Informações
Teste o método CompactDatabase do objeto do Jet Replication (JRO) revela que o método faz efectively não converter uma tabela para o Jet 4.0 formato se a tabela de origem for no Access 2.0 ou no formato do Access 95. Se uma tabela que é gerada pelo Access 2.0 ou pelo Access 95 é convertida em formato do Jet 4.0 usando o método CompactDatabase do objeto JRO, Access 2000 ou Access 2002 não é possível abrir com êxito o banco de dados. Esse problema está ainda sob investigação da Microsoft. Observe que objetos JRO destinavam-se para trabalhar somente com o Jet 4.0 e Jet 3.5 x bancos de dados.

Para converter o banco de antigo dados do Jet (anteriores ao formato do Jet 3.5), use ADOX para criar um novo banco de dados 4.0 formato e copiar todas as tabelas. O código a seguir demonstra como fazer isso. Isso é um exemplo simples e não aborda vários cenários especiais, como chaves primárias, índices, propriedades e relações. O exemplo copia apenas tabelas e não copia outros objetos do banco de dados de origem. Para obter informações adicionais sobre essas técnicas, consulte a documentação do ADOX no site MSDN Library.

Salvar o código a seguir em um projeto de C++ e, em seguida, criar o projeto:

Observação : não é necessário alterar nada no código, exceto para os caminhos em de # import e seqüências de conexão.
#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;       }}				
Referências
Para obter mais informações, visite a MSDN Library no site da Microsoft: Na árvore do conteúdo no painel esquerdo da biblioteca MSDN, vá para o seguinte tópico da Ajuda:
  \Data Access    \Microsoft Data Access Components      \ADO        \SDK Documentation          \Microsoft ActiveX Data Objects (ADO)            \ADO Programmer's Guide				
Para obter informações adicionais, clique nos números abaixo para ler os artigos na Base de dados de Conhecimento da Microsoft:
225048INFO: Problemas migração do DAO/Jet para ADO/Jet
304322ACC2002: Como utilizar o ADOX para importar relações
230588Como vincular e atualizar vinculado Jet tabelas usando ADOX
279245CORRECÇÃO: Propriedades de coluna padrão desmarcada ao definir ou verificar valores usando ADOX para um banco de dados do Access
304323ACC2002: Como utilizar ADOX para criar uma consulta de passagem SQL
275252ACC2000: Como criar uma tabela com tipos de dados Jet via ADOX
252908Como criar uma tabela com chave primária por meio do ADOX
230501Como Compactar banco de dados Microsoft Access através de ADO
Converter de Jet ADOX convertido criar como JET40 4.0 propriedades VC ++ VC C++

Aviso: Este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 321328 - Última Revisão: 02/27/2014 05:21:05 - Revisão: 1.4

  • Microsoft Visual Studio 6.0 Enterprise Edition
  • Microsoft ActiveX Data Objects 2.7
  • kbnosurvey kbarchive kbmt kbfile kbhowto KB321328 KbMtpt
Comentários