C++에서 ADOX를 사용하여 최신 Jet 4.0 서식 데이터베이스에 이전 Jet 데이터베이스 파일 복사 방법

기술 자료 번역 기술 자료 번역
기술 자료: 321328 - 이 문서가 적용되는 제품 보기.
이 문서가 보관되었습니다. "그대로" 제공되었으며, 업데이트가 되지 않을 것입니다.
모두 확대 | 모두 축소

요약

이 문서에서는 ActiveX 데이터 개체 확장을 데이터 정의 언어 및 Visual C++ (ADOX) 보안 이전 서식이 지정된 Jet 데이터베이스의 데이터를 사용하여 새 Jet 데이터베이스를 만드는 방법을 보여 줍니다. 이 문서에서는 Visual C++ ADOX 사용되는 다음과 같은 방법을 보여 줍니다.
  • Visual C++ ADOX Jet 데이터베이스를 만드는 방법을
  • 데이터베이스의 테이블 목록을 구하는 방법
  • 메타데이터 테이블의 열과 형식을 포함하여 구하는 방법
  • ADOX의 Append 메서드를 사용하여 테이블과 열을 만드는 방법
  • Jet OLE DB 공급자 관련 속성을 사용하여 연결된 테이블을 만드는 방법
  • ADO ADOX 함께 에서 데이터베이스 간에 데이터를 복사하는 방법을
  • Jet 데이터베이스에서 테이블을 삭제하는 방법

추가 정보

메서드는 efectively 않은 것은 일부에 테이블을 CompactDatabase 메서드를 Jet 복제 개체 (JRO를) 테스트 Access 2.0 또는 Access 95 형식으로 원본 테이블에 있는 경우 Jet 4.0 형식으로 변환합니다. Access 95 또는 Access 2.0 생성된 테이블에 JRO 개체의 CompactDatabase 메서드를 사용하여 Jet 4.0 형식으로 변환하면 Access 2000 또는 Access 2002 데이터베이스를 성공적으로 열 수 없습니다. 이 문제는 Microsoft의 계속 조사 중입니다. JRO를 개체를 경우에만 Jet 4.0 및 Jet 3.5 x 형식으로 데이터베이스를 사용하기 위한 있던 유의하십시오.

이전 Jet 데이터베이스 (이전) Jet 3.5 에서는 형식이 아닌 변환하려면 ADOX를 새 4.0 형식의 데이터베이스 만들기 및 모든 테이블을 복사할 수 있습니다. 이 작업을 수행하는 방법을 보여 주는 코드입니다. 이 간단한 샘플, 기본 키, 인덱스, 속성, 관계 같은 몇 가지 특수한 시나리오를 해결할 수 없습니다. 샘플 테이블에 대해서만 복사합니다 및 기타 개체를 원본 데이터베이스에서 복사할 수 없습니다. 이러한 기술에 대한 자세한 내용은 MSDN Library 웹 사이트에서 ADOX 설명서를 참조하십시오.

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 라이브러리에서 다음 Microsoft 웹 사이트를 방문하십시오.
http://msdn2.microsoft.com/en-us/library/default.aspx
MSDN Library의 왼쪽 창에서 목차 트리에서 다음 도움말 항목을 찾습니다.
  \Data Access
    \Microsoft Data Access Components
      \ADO
        \SDK Documentation
          \Microsoft ActiveX Data Objects (ADO)
            \ADO Programmer's Guide
				
자세한 내용은 Microsoft 기술 자료 문서를 보려면 해당 자료의 문서를 참조하십시오.
225048정보: Jet/DAO에서 ADO/Jet 마이그레이션 문제
304322ACC2002: 가져오기 관계 ADOX를 사용하는 방법
230588연결 및 새로 고침 방법 ADOX를 사용하여 Jet 테이블 연결
279245FIX: 기본 열 속성 설정 또는 Access 데이터베이스에 ADOX를 사용하여 값 확인 삭제
304323ACC2002: ADOX를 사용하여 SQL 통과 쿼리 만드는 방법
275252ACC2000: Jet 데이터 형식 통해 ADOX 사용하여 테이블 만들기 방법
252908기본 키로 ADOX 통한 테이블 만드는 방법
230501ADO를 통해 Microsoft Access 데이터베이스 압축 방법

속성

기술 자료: 321328 - 마지막 검토: 2014년 2월 26일 수요일 - 수정: 1.4
본 문서의 정보는 다음의 제품에 적용됩니다.
  • Microsoft Visual Studio 6.0 Enterprise Edition
  • Microsoft ActiveX Data Objects 2.7
키워드:?
kbnosurvey kbarchive kbmt kbfile kbhowto KB321328 KbMtko
기계 번역된 문서
중요: 본 문서는 전문 번역가가 번역한 것이 아니라 Microsoft 기계 번역 소프트웨어로 번역한 것입니다. Microsoft는 번역가가 번역한 문서 및 기계 번역된 문서를 모두 제공하므로 Microsoft 기술 자료에 있는 모든 문서를 한글로 접할 수 있습니다. 그러나 기계 번역 문서가 항상 완벽한 것은 아닙니다. 따라서 기계 번역 문서에는 마치 외국인이 한국어로 말할 때 실수를 하는 것처럼 어휘, 구문 또는 문법에 오류가 있을 수 있습니다. Microsoft는 내용상의 오역 또는 Microsoft 고객이 이러한 오역을 사용함으로써 발생하는 부 정확성, 오류 또는 손해에 대해 책임을 지지 않습니다. Microsoft는 이러한 문제를 해결하기 위해 기계 번역 소프트웨어를 자주 업데이트하고 있습니다.

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