程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> vc教程 >> vc下動態創建access數據庫的實現

vc下動態創建access數據庫的實現

編輯:vc教程

本文描述如何在VC下動態創建Access數據庫(mdb)文件,方法是用ADO和ADOX來操作數據庫,操作環境為winxp/VC6.0/Access2000。具體方法如下。    

   使用ADO前必須在工程的stdafx.h文件最後用直接引入符號#import引入ADO庫文件,以使編譯器能正確編譯。代碼如下:

#import "C:Program Filescommon filessystemadomsado15.dll" no_namespace rename("EOF","adoEOF")

  ADO類的定義是作為一種資源存儲在ADO DLL(msado15.dll)中,在其內部稱為類型庫。類型庫描述了自治接口,以及C++使用的COM vtable接口。當使用#import指令時,在運行時Visual C++需要從ADO DLL中讀取這個類型庫,並以此創建一組C++頭文件。這些頭文件具有.tli 和.tlh擴展名,讀者可以在項目的目錄下找到這兩個文件。在C++程序代碼中調用的ADO類要在這些文件中定義。

    程序的第三列指示ADO對象不使用名稱空間。在有些應用程序中,由於應用程序中的對象與ADO中的對象之間可能會出現命名沖突,所以有必要使用名稱空間。如果要使用名稱空間,則可把第三行程序修改為: rename_namespace("AdoNS")。第四行代碼將ADO中的EOF(文件結束)更名為adoEOF,以避免與定義了自己的EOF的其他庫沖突。 這裡直接引用一程序當中的一個函數作為例子來說明。

BOOL CConvertmdbDlg::Createmdb()
{
 WIN32_FIND_DATA fd;
 HANDLE hFind = FindFirstFile(m_mdbpath, &fd);
 if (hFind != INVALID_HANDLE_VALUE)
  return TRUE;
 
 ::CoInitialize(NULL);
 HRESULT hr = S_OK;
 
 try
 {
  ADOX::_CatalogPtr pCatalog = NULL;
  hr = pCatalog.CreateInstance(__uuidof (ADOX::Catalog));
 
  if(FAILED(hr))
  {
   _com_issue_error(hr);
  }
  else
  {
   pCatalog->Create(_bstr_t(m_strconn)); //Create mdb
  }
  //Create table
  m_pConn.CreateInstance(__uuidof(Connection));
  m_pConn->Open(_bstr_t(m_strconn), "", "", adConnectUnspecifIEd);
 
  _variant_t   RecordsAffected;
  CString strSql;
  BSTR bstrSQL;
 
  strSql = _T("CREATE TABLE AXISSave(ID INTEGER,X_Axis REAL,
   Y_Axis REAL,TestResult INTEGER)");
  bstrSQL = strSql.AllocSysString();
  m_pConn->Execute(bstrSQL, &RecordsAffected, adCmdText);
 }
 catch(_com_error &e) 
 {
  AfxMessageBox(e.ErrorMessage());

  m_pConn = NULL;
  ::CoUninitialize();
  return FALSE;
 }
 
 m_pConn->Close();

 m_pConn = NULL;
 ::CoUninitialize();
 
 return TRUE;
}

看如下語句 

ADOX::_CatalogPtr pCatalog = NULL;
  hr = pCatalog.CreateInstance(__uuidof (ADOX::Catalog));
 
  if(FAILED(hr))
  {
   _com_issue_error(hr);
  }
  else
  {
   pCatalog->Create(_bstr_t(m_strconn)); //Create mdb
  }

上面就是動態創建mdb文件的語句,其中m_strconn為如下格式的字符串,比如:

pCatalog->Create(_bstr_t("Provider=Microsoft.JET.OLEDB.4.0;Data source=C:\test.mdb"));

將在C盤跟目錄下創建一個test.mdb文件

  strSql = _T("CREATE TABLE AXISSave(ID INTEGER,X_Axis REAL,
   Y_Axis REAL,TestResult INTEGER)");
  bstrSQL = strSql.AllocSysString();
  m_pConn->Execute(bstrSQL, &RecordsAffected, adCmdText);

上面語句就是動態創建test.mdb數據庫中表的核心語句,它是利用Connection對象的Execute方法來執行SQL命令

上面例子創建一個名為AXISSave,字段分別為ID,X_Axis,Y_Axis,TestResult的表,注意不能創建字段index

創建之後就可以利用ADO庫三個智能指針:_ConnectionPtr、_CommandPtr和_RecordsetPtr進行數據庫的操作

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved