一个简单的问题,兄弟们帮看看错哪了

vgy12304 2009-12-28 06:13:56
ado.cpp

ado::ado()
{
AfxOleInit();//初始化com
m_connection=NULL;
strConnection = _T("Provider=SQLOLEDB.1;Data Source=MFC;Initial Catalog=mdb"); //数据连接字符串
sqluid="sa";
sqlpsw="123456";
m_connection.CreateInstance(__uuidof(Connection)); //创建connection对象
openConn();
}

ado::~ado()
{
closeConn();
}

_RecordsetPtr ado::getRecordset(_bstr_t sql)
{
_ConnectionPtr conn=getConn();
_RecordsetPtr m_recordset;
m_recordset.CreateInstance("ADODB.Recordset"); //创建Recordset对象的实例
m_recordset->Open(sql,_variant_t((IDispatch*)conn,true),adOpenStatic,adLockOptimistic,adCmdText);
return m_recordset;
}

_ConnectionPtr ado::getConn()
{
if(isOpen()==FALSE)
{
openConn();
}
return m_connection;
}


void ado::openConn()
{
try
{
m_connection->Open(strConnection,sqluid,sqlpsw,adModeUnknown);
}
catch (_com_error &e)
{
AfxMessageBox("数据库连接失败,请检查数据库设置");
ExitProcess(0);
}
}

BOOL ado::isOpen()
{
if(m_connection->GetState())
{
return TRUE;
}
else
{
return FALSE;
}
}

void ado::closeConn()
{
if(isOpen())
m_connection->Close();
}

BOOL ado::executeSql(LPCTSTR sql)
{
_variant_t RecordsAffected;
_ConnectionPtr conn=getConn();
ASSERT(conn != NULL);
ASSERT(strcmp(sql, _T("")) != 0);
try
{
conn->CursorLocation = adUseClient;
conn->Execute(sql,&RecordsAffected,adCmdText);
return TRUE;
}
catch (_com_error &e)
{
AfxMessageBox("执行失败");
return FALSE;
}

}


adminlist.cpp中

BOOL adminlist::OnInitDialog() ---->这里执行正常
{
CDialog::OnInitDialog();
sqlText="select * from admin";

show(sqlText);
return TRUE;
}

void adminlist::OnChangeAdminNameSelect() ---->这里执行错误了,并且还是那个运行时错误,兄弟们帮看看错在哪里
{
UpdateData(true);
CString SQL;
SQL.Format("select * from admin where adminname='%s'",m_select);
m_list1.DeleteAllItems(); //清空列表控件
// SQL="select * from admin where adminname='luocheng'";
AfxMessageBox(SQL);
show(_bstr_t(SQL)); //重新载入信息
}



void adminlist::show(_bstr_t sql)
{

//读取数据
ado adoo;
m_recordset=adoo.getRecordset(sql);
int i;
i=0;
while(!m_recordset->adoEOF)
{
vid=m_recordset->GetCollect("id");
vUsername = m_recordset->GetCollect("adminname"); //用户名
vpsw = m_recordset->GetCollect("password"); //密码
vpower=m_recordset->GetCollect("power"); //角色
vlastlogintime=m_recordset->GetCollect("lastlogintime"); //最后登录时间
vlastloginIP=m_recordset->GetCollect("lastloginIP"); //最后登录ip


m_list1.InsertItem(i,vid); //插入第一个数据,即第0条数据。先插入,然后在修改其他的信息。
m_list1.SetItemText(i,1,vUsername); //修改第0条数据的其他信息。
m_list1.SetItemText(i,2,vpsw);
m_list1.SetItemText(i,3,vpower);
m_list1.SetItemText(i,4,vlastlogintime);
m_list1.SetItemText(i,5,vlastloginIP);
i=i+1;
m_recordset->MoveNext();///移到下一条记录
}

m_recordset->Close(); //关闭数据集
m_recordset=NULL;
}
...全文
94 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
vgy12304 2009-12-28
  • 打赏
  • 举报
回复
13楼的,就是这个问题,AfxOleInit不是能自动创建和释放的吗,晕啦,谢谢了
快乐鹦鹉 2009-12-28
  • 打赏
  • 举报
回复
噢,把AfxOleInit();//初始化com
这句放到你的应用程序类的初始化函数中调用一次试试。重复调用是不是有问题。
vgy12304 2009-12-28
  • 打赏
  • 举报
回复
报oleinit.cpp
line 54错误
快乐鹦鹉 2009-12-28
  • 打赏
  • 举报
回复
getRecordset函数中增加try...catch...看看
快乐鹦鹉 2009-12-28
  • 打赏
  • 举报
回复
你可以在show函数中增加TRACE语句,就可以在debug窗口中看到具体执行到哪条语句。同时也可以在getRecordset函数中增加TRACE,就可以看到崩溃时具体的运行状况了。
vgy12304 2009-12-28
  • 打赏
  • 举报
回复
回6楼的,看不到,重试就死机了,整个vc编辑器都被强制关闭
快乐鹦鹉 2009-12-28
  • 打赏
  • 举报
回复
别估计啊。你点重试了没有啊
vgy12304 2009-12-28
  • 打赏
  • 举报
回复
组建时,是通过的,void adminlist::OnChangeAdminNameSelect()时出错了,估计99%出在ado.cpp里面,单独执行一个都是正常的,先执行一次show(_bstr_t sql)正常,再执行就错误了
Fireway2008 2009-12-28
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 vgy12304 的回复:]
错误提示:MIcrosoft Visual C++ Debug Library
dubug Assertion Faoled!
program: .......code.exe

终止  重试  忽略
[/Quote]
点击 重试
然后在菜单那里 Debug -〉break。
就可以看内部错之前都执行过什么东西。
快乐鹦鹉 2009-12-28
  • 打赏
  • 举报
回复
应该是“重试”
vgy12304 2009-12-28
  • 打赏
  • 举报
回复
错误提示:MIcrosoft Visual C++ Debug Library
dubug Assertion Faoled!
program: .......code.exe

终止 重试 忽略
快乐鹦鹉 2009-12-28
  • 打赏
  • 举报
回复
就是说debug下调试时没有问题,直接运行就错误么?
那在debug下直接运行的话,如果出现错误,会有界面弹出,选择“调试”看看断点在哪里
vgy12304 2009-12-28
  • 打赏
  • 举报
回复
回复2楼的,OnChangeAdminNameSelect() 也没错,单独执行,可以运行的
快乐鹦鹉 2009-12-28
  • 打赏
  • 举报
回复
void adminlist::OnChangeAdminNameSelect() ---->这里执行错误了,并且还是那个运行时错误,兄弟们帮看看错在哪里
====
运行错误提示是什么啊?
这个函数你调试了吗?错误点在哪一句啊?

4,018

社区成员

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

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