新手迷茫中,谁帮我看看,谢谢~!
刚刚接触ADO数据库编程,做一个ADO操作ACCESS的例子,遇到下面问题,谁能帮帮我,谢谢
当用户点击列表框时,把相应数据显示在变量为m_edit1,m_edit2文本框中,可以编译通过但鼠标点击列表框时会错误,为什么阿?
void CMYno1Dlg::OnSelchangeList1()
{
_RecordsetPtr m_pRecordset;
int curSel = m_list.GetCurSel();
_variant_t var;
m_pRecordset->MoveFirst();
m_pRecordset->Move(long(curSel));
var = m_pRecordset->GetCollect("Name");
if(var.vt != VT_NULL)
m_edit1 =(LPCSTR)_bstr_t(var);
var = m_pRecordset->GetCollect("Age");
if(var.vt != VT_NULL)
m_edit2 = (LPCSTR)_bstr_t(var);
UpdateData(false);
}
问题点数:0、回复次数:5Top
1 楼pinel()回复于 2005-03-03 12:39:21 得分 0
你的m_pRecordset是空的呀,要先connect一个数据库,open一个表Top
2 楼T97102003(池塘里的水手)回复于 2005-03-03 12:42:03 得分 0
点击列表直接把列表里的值显示不就行了。
Top
3 楼islcy(中毒)回复于 2005-03-03 12:50:06 得分 0
"点击列表直接把列表里的值显示不就行了"
也行啊,这个是别人的例子里面的,我想知道他是怎么做的Top
4 楼islcy(中毒)回复于 2005-03-03 12:54:30 得分 0
“你的m_pRecordset是空的呀,要先connect一个数据库,open一个表“
在OnInitDialog()连接数据库了阿,下面的是,找了些文章还是不懂
BOOL CMYno1Dlg::OnInitDialog()
{
CDialog::OnInitDialog();
// 初始化COM,创建ADO连接等操作
AfxOleInit();
//添加一个指向Connection对象的指针
_ConnectionPtr m_pConnection;
m_pConnection.CreateInstance(__uuidof(Connection));
// 在ADO操作中建议语句中要常用try...catch()来捕获错误信息
try
{
// 打开本地Access库Demo.mdb
m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Demo.mdb","","",adModeUnknown);
}
catch(_com_error e)
{
AfxMessageBox("数据库连接失败,确认数据库Demo.mdb是否在当前路径下!");
return FALSE;
}
_RecordsetPtr m_pRecordset;
m_pRecordset.CreateInstance(__uuidof(Recordset));
// 在ADO操作中建议语句中要常用try...catch()来捕获错误信息,
// 因为它有时会经常出现一些意想不到的错误。jingzhou xu
try
{
m_pRecordset->Open("SELECT * FROM DemoTable",// 查询DemoTable表中所有字段
m_pConnection.GetInterfacePtr(), // 获取库接库的IDispatch指针
adOpenDynamic,
adLockOptimistic,
adCmdText);
}
catch(_com_error *e)
{
AfxMessageBox(e->ErrorMessage());
}
_variant_t var;
CString strName,strAge;
try
{
//察看表是否为空
if(!m_pRecordset->BOF)
m_pRecordset->MoveFirst();
else
{
AfxMessageBox("表内数据为空");
}
// 读入库中各字段并加入列表框中
while(!m_pRecordset->adoEOF)
{
var = m_pRecordset->GetCollect("Name");
if(var.vt != VT_NULL)
strName = (LPCSTR)_bstr_t(var);
var = m_pRecordset->GetCollect("Age");
if(var.vt != VT_NULL)
strAge = (LPCSTR)_bstr_t(var);
m_list.AddString( strName + " --> "+strAge );
m_pRecordset->MoveNext();
}
// 默认列表指向第一项,同时移动记录指针并显示
m_list.SetCurSel(0);
}
catch(_com_error *e)
{
AfxMessageBox(e->ErrorMessage());
}
Top
5 楼pinel()回复于 2005-03-04 09:22:35 得分 0
你在OnInitDialog()里的_RecordsetPtr m_pRecordset;是函数体内的局部变量,而OnSelchangeList1() 函数的同名变量其实无关,你应该把它放在类声明中作为类变量。这是变量作用域问题,C++的基本问题,多看书吧.Top




