7,714
社区成员
发帖
与我相关
我的任务
分享
void CAccessTestDlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
CString strDb = "d:\\test.mdb";
if(CreateMdb(strDb))
{
CreateTable("PRODUCT");
}
}
//创建ACCESS数据库
BOOL CAccessTestDlg::CreateMdb(CString strDBName)
{
CString strMdbConn = "Provider='Microsoft.JET.OLEDB.4.0';Data source = " + strDBName;
try
{
HRESULT hr = S_OK;
_CatalogPtr pCatalog = NULL;
_bstr_t cnnstring(strMdbConn);
TESTHR(hr = pCatalog.CreateInstance(__uuidof (Catalog)));
pCatalog->Create(cnnstring);
}
catch(_com_error e)
{
_bstr_t bstrDescription(e.Description());
CString strErro=CString(_T("创建ACCEESS数据库出错: "))
+ (LPCSTR)e.Description()
+ CString(_T("Create ACCESS DB error: "))
+ (LPCSTR)e.Description();
AfxMessageBox(strErro);
return FALSE;
}
return TRUE;
}
//创建数据库表-材料表
BOOL CAccessTestDlg::CreateTable( CString strTabName)
{
HRESULT hr = S_OK;
_CatalogPtr pCatalog = NULL;
_TablePtr pTableNew = NULL;
_IndexPtr pIndexNew = NULL;
_IndexPtr pIndex = NULL;
_ColumnPtr pColumn = NULL;
CString strConn,strDBName;
strDBName="d:\\test.mdb";
//strDBName=this->GetDBName(m_nDBYear);
CFileFind ff;
if(!ff.FindFile(strDBName))
{
AfxMessageBox("数据库不存在,请先在高级设置对话框中创建数据库!");
return FALSE;
}
strConn="Provider='Microsoft.JET.OLEDB.4.0';Data source = " + strDBName;
_bstr_t strcnn(strConn);
try
{
TESTHR(hr = pCatalog.CreateInstance (__uuidof(Catalog)));
TESTHR(hr = pTableNew.CreateInstance(__uuidof(Table)));
TESTHR(hr = pIndexNew.CreateInstance(__uuidof(Index)));
TESTHR(hr = pIndex.CreateInstance (__uuidof(Index)));
TESTHR(hr = pColumn.CreateInstance (__uuidof(Column)));
// 连接
pCatalog->PutActiveConnection(strcnn);
// 表名
pTableNew->Name = _bstr_t(strTabName);
pTableNew->ParentCatalog = pCatalog;
//
//m_pTableNew->Columns->Append("ContactId", ::adInteger,0);
//m_pTableNew->Columns->GetItem("ContactId")->Properties->GetItem("AutoIncrement")->Value = true;
// 加入字段
CString str;
str = _T("公司名称");//"公司名称";
pTableNew->Columns->Append(_variant_t(str), ADOCG::adVarWChar, 50);
pTableNew->Columns->GetItem(_variant_t(str))->Properties->GetItem("Jet OLEDB:Allow Zero Length")->Value =false; //将必填字段设置为否
str = _T("产品名称");//"产品名称";
pTableNew->Columns->Append(_variant_t(str), ADOCG::adVarWChar, 50);
pTableNew->Columns->GetItem(_variant_t(str))->Properties->GetItem("Jet OLEDB:Allow Zero Length")->Value =false;
str = _T("产品规格");//"产品名称";
pTableNew->Columns->Append(_variant_t(str), ADOCG::adVarWChar, 50);
pTableNew->Columns->GetItem(_variant_t(str))->Properties->GetItem("Jet OLEDB:Allow Zero Length")->Value =false;
//*
// 加入主键
pIndexNew->Name = "pryIndex";//"日期";
pIndexNew->Columns->Append(_variant_t(str), ADOCG::adVarWChar, 50);
pIndexNew->PutPrimaryKey(-1);
pIndexNew->PutUnique(-1);
pTableNew->Indexes->Append(_variant_t ((IDispatch*)pIndexNew));
//*/
// 加入表中
pCatalog->Tables->Append(_variant_t ((IDispatch*)pTableNew));
pCatalog->Tables->Refresh();
}
catch(_com_error &e)
{
_bstr_t bstrSource(e.Source());
_bstr_t bstrDescription(e.Description());
AfxMessageBox(e.Description());
return FALSE;
}
return TRUE;
}