您的位置:首页 > 数据库

数据库(mdb)、表、字段的自动创建,以及如何得到数据库中所有表的名字

2008-03-04 17:06 627 查看
首先需要:


#pragma warning (disable: 4146)




#import "c:Program FilesCommon Filessystemadomsadox.dll"


#import "c:Program FilesCommon FilesSystemadomsado15.dll" no_namespace rename("EOF", "adoEOF")


rename("LockTypeEnum", "locktypeenum") rename("DataTypeEnum","datatypeenum")


rename("FieldAttributeEnum","fieldattributeenum") rename("EditModeEnum","editmodeenum")


rename("RecordStatusEnum","recordstatusenum") rename("ParameterDirectionEnum","parameterdirectionenum")




#pragma warning (disable: 4146) // 头尾加入这两句是为了使编译时不出现那一大串warning

创建mdb:


CFileStatus status;


if (!CFile::GetStatus(m_OutputPath,status)) //如果数据库不存在




...{


ADOX::_CatalogPtr pCatalog(__uuidof(ADOX::Catalog));


_bstr_t sql = "Provider=Microsoft.Jet.OLEDB.4.0;data source=" + xxxPathxxx;


try




...{


pCatalog->Create(sql);


}


catch(_com_error &er)




...{


AfxMessageBox(_bstr_t(er.Description()));


return;


}


}

得到数据库中所有的表的名字:


//得到数据库里的所有表名


CArray<CString,CString&> TableNames;


pRecordset = pConnection->OpenSchema(adSchemaTables);


_variant_t vt, vttype;


while (!pRecordset->adoEOF)




...{


vt = pRecordset->GetCollect(_bstr_t("TABLE_NAME"));


vttype = pRecordset->GetCollect(_bstr_t("TABLE_TYPE"));


if (vt.vt!=VT_NULL && vttype.vt!=VT_NULL && _bstr_t(vttype)==_bstr_t("TABLE"))




...{


CString aTable = (char*)_bstr_t(vt);


aTable.TrimRight();


if (!aTable.IsEmpty())


TableNames.Add(aTable);


}


pRecordset->MoveNext();


}

插入一个表并定义里面的字段:


_bstr_t sql = "CREATE TABLE "+ tableName +"(" + fieldname + " char(50))";


// 注意tableName和fieldname不能是含有空格的字符串


try




...{


pConnection->Execute(sql,NULL,adCmdText);


}


catch(_com_error &er)




...{


AfxMessageBox(_bstr_t(er.Description()) + "/n " +sql);


return;


}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: