vc++ 用ado连数据库??
在vc++ 用ado连数据库?进行新增时有下面一段代码,我看了很久就是不清楚
不知道要从哪里下手,请各位朋友帮忙,
void CADOSample3Dlg::OnAddRecord()
{
long rgIndices[1];
VARIANT rgf;
VARIANT rgv;
COleVariant fld[3], val[3];
SAFEARRAYBOUND bound;
try
{
UpdateData(TRUE);
fld[0]="EmployeeID";
val[0]=m_lDlgID;
fld[1]="Name";
val[1]=m_strDlgName;
fld[2]="Address";
val[2]=m_strDlgAddress;
rgf.vt=VT_ARRAY|VT_VARIANT;
rgv.vt=VT_ARRAY|VT_VARIANT;
bound.cElements=3;
bound.lLbound=0;
rgv.parray=::SafeArrayCreate(VT_VARIANT,1,&bound);
if(rgv.parray==NULL)
AfxThrowMemoryException();
rgf.parray=::SafeArrayCreate(VT_VARIANT,1,&bound);
if(rgf.parray==NULL)
AfxThrowMemoryException();
for ( int i = 0; i < 3; i++)
{
rgIndices[0]=i;
::SafeArrayPutElement(rgf.parray, rgIndices, &fld[i]);
::SafeArrayPutElement(rgv.parray, rgIndices, &val[i]);
}
m_pRs->AddNew(&rgf,&rgv);
}
catch (_com_error &e)
{
GenerateError(e.Error(), e.Description());
}
}
问题点数:80、回复次数:7Top
1 楼hustwjz(刻苦学习,勤奋找工作)回复于 2002-01-08 21:08:07 得分 10
建议你先去看一本书
“teach youself database programming with visual c++ in 21 days"
那本书将的很详细Top
2 楼cainiaobus(jacky)回复于 2002-01-08 21:10:23 得分 0
谢谢,我手头上一本MFC Visual C++ 6 编程技术内幕
就象一个查询手册,一点都帮不上忙Top
3 楼masterz(www.fruitfruit.com)回复于 2002-01-08 21:19:33 得分 40
很短的程序,应该好看了吧
#include "stdafx.h"
#import "c:\\Program Files\\Common Files\\System\\ado\\msado15.dll" no_namespace rename("EOF", "EndOfFile")
int main(int argc, char* argv[])
{
printf("Use ADO to open C:\\tmp\\test.mdb database file!\n");
CoInitialize(NULL);
try
{
_ConnectionPtr pConn("ADODB.Connection");
_RecordsetPtr pRst("ADODB.Recordset");
pConn->Open("PROVIDER=MSDASQL;DRIVER={Microsoft Access Driver (*.mdb)};DBQ=C:\\tmp\\test.mdb;UID=;PWD=aaa;"
//pConn->Open("Provider= Microsoft.Jet.OLEDB.4.0;Data Source=C:\\tmp\\test.mdb;"//this is also OK
,"","",adConnectUnspecified);
//Open "users" table
pRst->Open("users", _variant_t((IDispatch *) pConn, true),
adOpenStatic, adLockReadOnly, adCmdTable);
FieldsPtr fds=pRst->GetFields();
printf("printf field name of the table\n");
for(int i=0;i<fds->GetCount();i++)
{
FieldPtr fd=fds->GetItem(_variant_t(short(i)));
printf("%s ",(LPCTSTR)fd->GetName());
}
printf("\n");
pRst->Close();
pConn->Close();
}
catch (_com_error &e)
{
printf("Description = '%s'\n", (char*) e.Description());
}
::CoUninitialize();
return 0;
}Top
4 楼cainiaobus(jacky)回复于 2002-01-08 21:33:58 得分 0
to masterz()
很好,谢谢
能否帮我解释一下下面几点
FieldsPtr fds=pRst->GetFields();
FieldPtr fd=fds->GetItem(_variant_t(short(i)));
printf("%s ",(LPCTSTR)fd->GetName());
Top
5 楼masterz(www.fruitfruit.com)回复于 2002-01-08 21:40:43 得分 0
FieldsPtr fds=pRst->GetFields();//得到field集合
FieldPtr fd=fds->GetItem(_variant_t(short(i)));//得到第(i)个字段
printf("%s ",(LPCTSTR)fd->GetName());//得到字段的名字Top
6 楼hanawu(hanawu)回复于 2002-01-08 23:36:24 得分 30
去www.vchelp.net查找“数据库“,里面有很详细的ADO中文教程Top
7 楼skt985(傻问天)回复于 2002-01-11 13:07:46 得分 0
45754关注! :)Top




