初级数据库编程问题,刚接触这个,不太会啊!

tonybaobao 2003-10-26 08:53:43
问题1:为何以下代码执行多次(就是多次按了这个Button)会出现死机情况?这些代码是一个Button的OnClick事件触发的。

代码如下:
void CADODemoDlg::OnBnClickedButton4()
{
// TODO: 在此添加控件通知处理程序代码
m_list.DeleteAllItems();
m_pConnection.CreateInstance(_uuidof(Connection)); //初始化Connection指针
m_pRecordset.CreateInstance(_uuidof(Recordset));//初始化Recordset指针
try
{
m_pConnection->Open("DSN=MS Access Database","","",0);
m_pRecordset->Open("SELECT * FROM 学生信息", // 查询表中所有字段
m_pConnection.GetInterfacePtr(), // 获取库接库的IDispatch指针
adOpenDynamic,
adLockOptimistic,
adCmdText);

_variant_t var;
CString strName,strNum,strSex,strAge;

if(!m_pRecordset->BOF)
m_pRecordset->MoveFirst();
else
{
VERIFY("表内数据为空");

}

// 读入库中各字段并加入列表框中
int i=0;
while(!m_pRecordset->adoEOF)
{
var = m_pRecordset->GetCollect("学号");
if(var.vt != VT_NULL)
strNum = (LPCSTR)_bstr_t(var);
var = m_pRecordset->GetCollect("姓名");
if(var.vt != VT_NULL)
strName = (LPCSTR)_bstr_t(var);
var = m_pRecordset->GetCollect("年龄");
if(var.vt != VT_NULL)
strAge = (LPCSTR)_bstr_t(var);
var = m_pRecordset->GetCollect("性别");
if(var.vt != VT_NULL)
strSex = (LPCSTR)_bstr_t(var);
m_list.InsertItem(i,strNum);
m_list.SetItemText(i,1,strName);
m_list.SetItemText(i,2,strAge);
m_list.SetItemText(i,3,strSex);
i++;

m_pRecordset->MoveNext();
}
m_pRecordset->Close();
m_pConnection->Close();
}
catch(_com_error e)
{
AfxMessageBox(e.ErrorMessage());
}
m_pConnection= NULL;
m_pRecordset=NULL;
}

问题2:我家里系统是XP专业版的,为什么装不上sql2000?安装的时候,他提示我说此系统上无法安装服务器端,只能安装客户端。结果导致我一直无法建立数据库。
...全文
35 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
tonybaobao 2003-10-28
  • 打赏
  • 举报
回复
呵呵,终于自己解决了。代码执行一次是没有问题,但是多次对记录集进行操作的化,就要考虑记录集的关闭和打开的问题了!不能多次关闭,当然也不能在没有打开的时候就关闭。谢谢各位了,结贴!
tonybaobao 2003-10-27
  • 打赏
  • 举报
回复
呵呵~~我也刚从网上知道原来xp只能装开发办或者个人版。企业版和标准版似乎要在服务器版本的操作系统中安装的。谢谢楼上的兄弟!
不知道第一个问题谁能为我解决一下吗?数据库方面实在太菜了……
tonybaobao 2003-10-27
  • 打赏
  • 举报
回复
hoho~~昨晚download了一个sql2000 4in1的版本!今天起来装好了,爽啊!^_^
希望今天能有朋友帮我把第一个问题给解决了,谢谢!
tonybaobao 2003-10-27
  • 打赏
  • 举报
回复
我在vckbase里面看到过一篇ado编程的文章,上面说m_pRecordset->Close();m_pConnection->Close();不能多次关闭,说多次关闭会出错。我想是不是因为我多次按了button键后,多次关闭了连接和记录集的关系?那有谁能和我说说,倒是一个数据库应用程序里面,什么时候该关闭连接?如果我只用到一个数据源的话,是不是只要在退出程序的时候关闭连接?其他查询操作后,是不是没有关闭连接的?
jeffil 2003-10-27
  • 打赏
  • 举报
回复
你的代码没有问题,我在我的机器上编译运行了是可以的。这说明是你的数据库系统可能没有弄好。


你可以得到错误的原因,把CATCH块修改为如下既可以:
catch(_com_error e)
{
AfxMessageBox(e.ErrorMessage());
AfxMessageBox(e.Source());
AfxMessageBox(e.Description());
}
hexi1981 2003-10-26
  • 打赏
  • 举报
回复
xp专业版是用于办公客户端的操作系统,不是用于服务器的,建议你装一个sql 2k的开发版.

4,011

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 数据库
社区管理员
  • 数据库
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧