在一个对话框的初始化函数中可以打开一个记录集。如下代码[
code=C/C++]
m_pRecordset.CreateInstance("ADODB.Recordset");
…………
…………
sCmd.Format("SELECT * FROM TAB_S WHERE USER_NAME= '%s' AND (S_INTIME BETWEEN #%s# AND #%s#) ",g_name,strstime,stretime);
[/code]然后我在该对话框类的另外一个函数中有如下代码:(错误提示是无效指针),在对话框的初始化函数中可以操纵记录集,为什么啊?
是不是一个m_pRecordset不能open两次啊?try
{
CString sCmd;
sCmd.Format("SELECT * FROM TAB_S WHERE S_NO='%d' ",m_listkey);
m_pRecordset->Open(_bstr_t(sCmd),_variant_t((IDispatch*)theApp.m_pConnection,true),adOpenStatic,adLockOptimistic,adCmdText);
}
catch(_com_error e)///捕捉异常
{
CString errstring;
errstring.Format("%s%s","打开结果集失败:",e.ErrorMessage());
AfxMessageBox(errstring);///显示错误信息
}
code=C/C++]
m_pRecordset.CreateInstance("ADODB.Recordset");
…………
…………
sCmd.Format("SELECT * FROM TAB_S WHERE USER_NAME= '%s' AND (S_INTIME BETWEEN #%s# AND #%s#) ",g_name,strstime,stretime);
[/code]然后我在该对话框类的另外一个函数中有如下代码:(错误提示是无效指针),在对话框的初始化函数中可以操纵记录集,为什么啊?
是不是一个m_pRecordset不能open两次啊?try
{
CString sCmd;
sCmd.Format("SELECT * FROM TAB_S WHERE S_NO='%d' ",m_listkey);
m_pRecordset->Open(_bstr_t(sCmd),_variant_t((IDispatch*)theApp.m_pConnection,true),adOpenStatic,adLockOptimistic,adCmdText);
}
catch(_com_error e)///捕捉异常
{
CString errstring;
errstring.Format("%s%s","打开结果集失败:",e.ErrorMessage());
AfxMessageBox(errstring);///显示错误信息
}
我把整个程序和数据库放到下面的链接上,大侠帮帮们帮帮小弟,看看是哪里出了问题。
Http://www.zhangxiuhua.cn/GetFile.asp?GetId=081111122509V7IhD
{
AfxMessageBox(e.Description());
}
先提个无关紧要的建议:
[1]*****************************************if (name==m_username&&password==m_userpassword)
{
m_pMf->m_blogin=true;
m_pMf->m_bSZ=true;
m_pMf->GetMenu()->GetSubMenu(2)->EnableMenuItem(0,MF_ENABLED ); //�ı���֧ѡ����״̬
// m_pRecordset->Close();
g_name=m_username;
MessageBox("��½�ɹ�");
EndDialog(1);
}
m_pRecordset->MoveNext();
return;
******************************************
这个return 让我才知道原来的密码和帐号都是1……而且输错还没提示,改改去~!呵呵[2]你的m_pRecordset很多地方都用到,但是我建议你专门些个操作数据库的类~类的构造函数和析构函数这样写,如下。
******************************************
CADOOper::CADOOper()
{
try
{
m_pConnection.CreateInstance(__uuidof(Connection));
m_pConnection->Open(_bstr_t(Provider), "", "", adModeUnknown);
}
catch (_com_error e)
{
AfxMessageBox(e.Description(), MB_OK);
exit(0);
} c.CreateInstance(__uuidof(Recordset));
m_CurrentRecord = -1;
m_hDC = NULL;
}CADOOper::~CADOOper()
{
m_pConnection->Close();
}
*************************************************这样你每次要操作数据库的时候就类似这样用就可以了~也不会出现那些错误提示……看眼睛@@
比如你以后在CADOOper里些了执行SQL语句的函数,你就
CADOOper ADOoper;
ADOoper.Open("select * from where 1=1");
这样去用就可以了,清晰明了~方便Debug~
现在在上班偷偷给你回帖呢~呵呵
sCmd.Format("SELECT * FROM TAB_S WHERE S_NO='%d' ",m_listkey);仔细看看~是一个很低级的错误~数字在SQL语句中不加单引号~sCmd.Format("SELECT * FROM TAB_S WHERE S_NO = %d ",m_listkey);**************************************************************这个查询按钮的函数void CDlgSZ::OnButtonSearchbydate()
{
...
CDlgResult dlgresult;
UpdateData();
dlgresult.m_stime=m_SSTime;
dlgresult.m_etime=m_SETime;
dlgresult.DoModal();
...
}我建议~CDlgResult这个类定义成全局的好~不知道大家是不是都是这样的?*******************************************************
附赠你一个操作数据库的类,里面带一个open功能的函数~CADOOper::CADOOper() // 构造函数里面这样写
{
try
{
m_pConnection.CreateInstance(__uuidof(Connection));
m_pConnection->Open(_bstr_t(Provider), "", "", adModeUnknown);
}
catch (_com_error e)
{
AfxMessageBox(e.Description(), MB_OK);
exit(0);
}c.CreateInstance(__uuidof(Recordset));
m_CurrentRecord = -1;
m_hDC = NULL;
}CADOOper::~CADOOper() // 析构函数里面这样写
{
m_pConnection->Close();
} BOOL CADOOper::OpenRecord(CString strSQL) // 这个类的成员函数,功能就是打开执行SQL语句。注意:有open就有close,close我没写,如果感兴趣你自己来吧~
{
ASSERT(!strSQL.IsEmpty()); // SQL���䲻��Ϊ��
try
{
// ִ��SQL�õ���¼��
m_pRecordset->Open(_bstr_t(strSQL), m_pConnection.GetInterfacePtr(),
adOpenDynamic, adLockOptimistic, adCmdText);
}
catch (_com_error e)
{
ShowError(e.Description());
return FALSE;
} return TRUE;
}最后例子:CADOOper ADOper;
CString SQL;
SQL.Format("select * from table where num = %d", m_MyNum);
ADOper.OpenRecord(SQL);
ADOper.CloseRecord(); // 这个函数你要自己写了~
*********************************
那个错误改成单引号就不提示那个错误了,但是再往后我就没断点看了……
…………………………
大哥,我要是个女的我就嫁给你了。
真的不知道该怎么感谢你,我把这个帖子追加了100分,算是一点小小的心意吧。
当然我也知道大侠不是为了那点分数而帮助小弟,可是我觉得还是应该追加一下分数,要不我今天晚上肯定又要睡不着觉了,呵呵。
打了二十几分中打了这点字,不知道说什么话感谢你,高中语文不咋好。
qq是82853589,大侠留个联系方式吧,小弟很想和你交个朋友,o(∩_∩)o...