数据库操作小结

1.ADO之 "IDispatch error #3092"错误
在采用ADO访问ACCESS数据库的时候,会出现IDispatch error #3092错误
可能原因的访问执行的SQL语句错误,可以检查一下SQL语句。
2.创建Access数据库文件和创建表
创建Access数据库文件有两种方法,一种是用CDaoDatabase类,用法如下,但是只能创建Microsoft.Jet.OLEDB.3.0版本以下的Access
代码如下:
CDaoDatabase mDataBase;
try
{
CTime ctime;
ctime = CTime::GetCurrentTime();
CString strdata;
strdata = ctime.Format("%Y%m%d%H%M%S");
DataBasePath = ".//DataBase//本地数据库"+strdata+".mdb";
mDataBase.Create(DataBasePath,dbLangGeneral,dbVersion30);


CDaoTableDef m_DaoDef(&mDataBase);
m_DaoDef.Create(_T("列车机车号"));//在刚刚创建的mdb文件中创建一个数据表
//创建字段
m_DaoDef.CreateField(_T("运行机车号"),dbText,50,dbVariableField);
m_DaoDef.CreateField(_T("ID"),dbLong,10,dbAutoIncrField);
m_DaoDef.Append();
m_DaoDef.Close();
mDataBase.Close();


if(File.Open(FilePath,CFile::modeRead,NULL)==NULL)
{
AfxMessageBox("配置文件不存在!",MB_OK);
return FALSE;
}
else
{
File.Close();
DataBasepath = DataBasePath;
WritePrivateProfileString("DataBasePath","Path",DataBasepath.GetBuffer(0),FilePath);
}
}
另一种方式,用_CatalogPtr创建,可以创建3.0版本或以上的Access文件.创建表的方法用_ConnectionPtr,然后执行SQL语句执行,方法如下
引入两个数据库相关的动态链接库
#import "c:\Program Files\Common Files\System\ado\msadox.dll" 
#import "C:\\Program Files\\Common Files\\System\\ado\\msado15.dll" no_namespace rename("EOF","adoEOF")
首先进行组件的初始化,::CoInitialize(NULL);和::CoUninitialize();然后如下
//创建数据库文件
ADOX::_CatalogPtr mDataBase=NULL;
HRESULT hr;
try
{
hr = mDataBase.CreateInstance(__uuidof (ADOX::Catalog)); //创建对象
if(SUCCEEDED(hr))
{
CTime ctime;
ctime = CTime::GetCurrentTime();
CString strdata;
strdata = ctime.Format("%Y%m%d%H%M%S");
DataBasePath = ".\\DataBase\\本地数据库"+strdata+".mdb";
CString path;
path.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s",DataBasePath);
mDataBase->Create((_bstr_t)path);
///创建表
_ConnectionPtr mDataBaseCon;
hr = mDataBaseCon.CreateInstance(__uuidof(Connection));//创建Connection对象
if(SUCCEEDED(hr))
{
CString path;
path.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s",DataBasePath);
hr = mDataBaseCon->Open(path.GetBuffer(0),"","",adModeUnknown);///连接数据库
CString strSql;
strSql = "CREATE TABLE 列车机车号(运行机车号 NVARCHAR(50),ID AUTOINCREMENT PRIMARY KEY)";
mDataBaseCon->Execute((_bstr_t)strSql, NULL, adCmdText);
}
}
}
catch(_com_error &e)
{
AfxMessageBox(e.ErrorMessage()); 
CString strError;
strError.Format("数据库文件操作失败:%s!",e.ErrorMessage());
AfxMessageBox(strError,MB_OK);
return FALSE;
}
3.不同版本的数据库需要用对应的版本的Provider方法打开,不然会出错。


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值