MFC ADO连接Access用户管理添加新用户,RecordSet返回-1的有关问题
MFC ADO连接Access用户管理添加新用户,RecordSet返回-1的问题
本帖最后由 x21iaomi 于 2012-12-05 10:10:23 编辑 “添加”用户按钮代码如下
------最佳解决方案--------------------
RecordCount总是返回-1是因为没有该用户,没有该用户就写入数据库,你程序中
根本没有写入数据库,你直接 m_pRs->Close();了,sql.Format("insert into 用户表 values ( '%s','%s')",user,pass);只是一个格式化了的串,你根本没执行,所以每次总是返回-1.
------其他解决方案--------------------
你加没加AfxOleInit();这个函数,就是初始化OLE的函数
------其他解决方案--------------------
额,这个复制粘贴的错误,源程序里没有。用户表里只有用户1,密码1,我输入1,1的时候不提示已有该用户,输入2,2的时候,点该按钮,也没有将2,2添加要用户表里面去…………
------其他解决方案--------------------
问题解决,代码复制粘贴别人的就是不行,特别对于我这种新手…………正确代码如下
本帖最后由 x21iaomi 于 2012-12-05 10:10:23 编辑 “添加”用户按钮代码如下
void Xtgl::OnTj() //添加按钮RecordCount总是返回-1,注释掉“m_pRs=theApp.m_pCon->Execute((_bstr_t)sql,NULL,adCmdText);”使用“m_pRs->Open((_bstr_t)…………”点此按钮时程序崩溃,什么问题啊,怎样解决??
{
CString user,pass,confirm;
m_user.GetWindowText(user);
m_password.GetWindowText(pass);
m_password2.GetWindowText(confirm);
//判断操作员信息是否为空
if (user.IsEmpty() || pass.IsEmpty() || confirm.IsEmpty())
{
MessageBox("操作员信息不能为空!","提示");
m_user.SetFocus();
return;
}
//验证密码
if (pass!= confirm)
{
MessageBox("两次密码不一致!","提示");
return;
}
//验证用户是否存在
HRESULT hr;
try
{
hr=m_pRs.CreateInstance("ADODB.Recordset");
if(SUCCEEDED(hr))
{
CString sql;
sql.Format("select * from 用户表 where 用户名= '%s'", user);
m_pRs->CursorLocation = adUseClient;
m_pRs=theApp.m_pCon->Execute((_bstr_t)sql,NULL,adCmdText);
//m_pRs->Open((_bstr_t)sql,m_pCon.GetInterfacePtr(),adOpenKeyset,adLockOptimistic,adCmdText);
if (m_pRs->RecordCount>0)
{
m_pRs->Close();
MessageBox("该用户已存在","提示");
}
else //插入数据
{
m_pRs->Close();
sql.Format("insert into 用户表 values ( '%s','%s')",user,pass);
}
}
}
catch(_com_error e)
{
CString errorMessage;
errorMessage.Format("建立记录表错误\r\n错误信息:%s",e.ErrorMessage());
AfxMessageBox(errorMessage);
}
}
------最佳解决方案--------------------
RecordCount总是返回-1是因为没有该用户,没有该用户就写入数据库,你程序中
else //插入数据 { m_pRs->Close(); sql.Format("insert into 用户表 values ( '%s','%s')",user,pass); }
根本没有写入数据库,你直接 m_pRs->Close();了,sql.Format("insert into 用户表 values ( '%s','%s')",user,pass);只是一个格式化了的串,你根本没执行,所以每次总是返回-1.
------其他解决方案--------------------
你加没加AfxOleInit();这个函数,就是初始化OLE的函数
------其他解决方案--------------------
额,这个复制粘贴的错误,源程序里没有。用户表里只有用户1,密码1,我输入1,1的时候不提示已有该用户,输入2,2的时候,点该按钮,也没有将2,2添加要用户表里面去…………
------其他解决方案--------------------
问题解决,代码复制粘贴别人的就是不行,特别对于我这种新手…………正确代码如下
void Xtgl::OnTj() //添加按钮
{
CString user,pass,confirm;
m_user.GetWindowText(user);
m_password.GetWindowText(pass);