在WINDOWS平台,通过ADO连接数据库,应该是最标准的。但是由于使是通过COM技术实现的,问题就变得复杂了许多。同时,也因为许多开源的编译器不支持或者不是很好地支持COM技术,给我们学习、开发带来了一些困难。
在这里,我们讨论使用BorlandC++FreeCompiler5.5通过ADO来访问ACCESS文件。原本,BCC55对COM的支持也不是很好,许多COM的支持文件都没有,所以,需要另外从SF上下载BCC的SDK,当前版本是0.0.7.1,请自行下载。
此外,我们不打算通过import"...\msado15.dll"的办法来使用ADO,而是用过使用adoint.h的办法来使用ADO。
#includeInitguid.h
#includeadoid.h//ADOGUID’s
#includeadoint.h//ADOCLASS
再引用对COM的支持。不过,感觉上,假如不用COM中的BSTR转换成char的函数,和ADOConnection中的错误处理,可以不引用下面的COM的(未进行严格测试)。反正影响不大,因为WINDOWS总有COM的支持的,起码目前的WINDOWS是,也就用了。
#includecomutil.h
#pragmacomment(lib,"comsupp.lib")//inbccsdkpackage
好了,定义ADO相关的变量:
ADOFieldpFld;
ADOFieldspFlds;
ADORecordsetpRs;
ADOConnectionpConn;
然后,初始化COM、创建ADOConnection、ADORecordset实例:
::CoInitialize(NULL);
CoCreateInstance(CLSID_CADOConnection,NULL,
CLSCTX_INPROC_SERVER,IID_IADOConnection15,(LPVOID)&pConn);
CoCreateInstance(CLSID_CADORecordset,NULL,
CLSCTX_INPROC_SERVER,IID_IADORecordset,(LPVOID)&pRs);
打开ADO连接:
pConn-〉Open((_bstr_t)L"Provider=Microsoft.Jet.OLEDB.4.0;DataSource=Contract_me_data.mdb",
L"",
L"",
adConnectUnspecified);
打开数据集:(sql是variant类型、hr是HRESULT类型,请自行定义)
hr=pRs-〉Open(sql,(_variant_t)pConn,adOpenStatic,adLockOptimistic,adCmdText);
if(SUCCEEDED(hr)){
//處理數據
}
使用时,要判断是否EOF和BOF。
获取数据时,有一种方法是先得到Fields,再获得指定的Field,再根据Fieldr的get_Value(&value)方法得到数据;另一种方法是,直接通过ADORecordset的get_Collect(index,&value)来得到数据。如果不想得到字段的相关属性,用后一种方法是很直接的。 |
|