读书人

数据库查询异常

发布时间: 2012-05-11 12:55:37 作者: rapoo

数据库查询错误
问题描述:
本工程是ado连接access2003的一个工程,SQL语句“SELECT * FROM stud_infoWHERE 学号 Like '**3**'”在access2003下查询下可以查到记录;但是运行该段程序总是显示“读取数据库失败!”,将除去open外的所有语句均加注,发现仍显示“读取数据库失败!”。
注:之前在CAdocodingDlg::OnInitDialog()下已使用过_RecordsetPtr对象 m_pRecordset。相关代码如下:
void CAdocodingDlg::Oninquire()
{
// TODO: Add your control notification handler code here
int nItem;
if(UpdateData())
{
if (m_sInquire.GetLength()>0)
{
m_userlist.DeleteAllItems();


try
{

if (!m_pRecordset->BOF)
{
m_pRecordset->MoveFirst();
}

m_pRecordset->Open(_variant_t("SELECT * FROM stud_infoWHERE 学号 Like '**3**'"),_variant_t((IDispatch*)m_pConnection),adOpenStatic,adLockOptimistic,-1);//直接用Recordset对象进行查询取得记录集
m_bSuccess = TRUE;
while(!m_pRecordset->EndOfFile)
{
vUserID = m_pRecordset->GetCollect("学号");
vUsername = m_pRecordset->GetCollect("姓名");
vUserAddress = m_pRecordset->GetCollect("地址");
vBirthday = m_pRecordset->GetCollect("出生日期");
nItem=m_userlist.InsertItem(0x65535,(_bstr_t)vUserID);//查阅资料,发现0x65535其实代表插在最后一行的意思,相当于-1;可是换成-1并不对???//返回新条目的index
m_userlist.SetItem(nItem,1,1,(_bstr_t)vUsername,NULL,0,0,0);
m_userlist.SetItem(nItem,2,1,(_bstr_t)vUserAddress,NULL,0,0,0);
m_userlist.SetItem(nItem,3,1,(_bstr_t)vBirthday,NULL,0,0,0);
m_pRecordset->MoveNext();
}
}
catch(_com_error e)//捕捉异常
{
AfxMessageBox("读取数据库失败!");///显示错误信息
}


}

}
}


BOOL CAdocodingDlg::OnInitDialog()
{
CDialog::OnInitDialog();

// Add "About..." menu item to system menu.

// IDM_ABOUTBOX must be in the system command range.
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);

CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}

// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE);// Set big icon
SetIcon(m_hIcon, FALSE);// Set small icon

// TODO: Add extra initialization here
m_cDelItem.EnableWindow(FALSE);
::SendMessage(m_userlist.m_hWnd, LVM_SETEXTENDEDLISTVIEWSTYLE,LVS_EX_FULLROWSELECT, LVS_EX_FULLROWSELECT);
/////////为列表控件添加列//////////////////////////////
m_userlist.InsertColumn(0,"学号",LVCFMT_LEFT,60);
m_userlist.InsertColumn(1,"姓名",LVCFMT_LEFT,100);
m_userlist.InsertColumn(2,"地址",LVCFMT_LEFT,60);
m_userlist.InsertColumn(3,"出生日期",LVCFMT_LEFT,100);
////////读取数据库中的信息添加到列表控件////
int nItem;

try
{
m_pRecordset.CreateInstance("ADODB.Recordset");
m_pRecordset->Open(_variant_t("SELECT * FROM stud_info"),_variant_t((IDispatch*)m_pConnection),adOpenStatic,adLockOptimistic,-1);//直接用Recordset对象进行查询取得记录集
m_bSuccess = TRUE;
while(!m_pRecordset->EndOfFile)
{
vUserID = m_pRecordset->GetCollect("学号");
vUsername = m_pRecordset->GetCollect("姓名");
vUserAddress = m_pRecordset->GetCollect("地址");
vBirthday = m_pRecordset->GetCollect("出生日期");
nItem=m_userlist.InsertItem(0x65535,(_bstr_t)vUserID);//查阅资料,发现0x65535其实代表插在最后一行的意思,相当于-1;可是换成-1并不对???//返回新条目的index
m_userlist.SetItem(nItem,1,1,(_bstr_t)vUsername,NULL,0,0,0);


m_userlist.SetItem(nItem,2,1,(_bstr_t)vUserAddress,NULL,0,0,0);
m_userlist.SetItem(nItem,3,1,(_bstr_t)vBirthday,NULL,0,0,0);
m_pRecordset->MoveNext();
}
}
catch(_com_error e)//捕捉异常
{
AfxMessageBox("读取数据库失败!");///显示错误信息
}


[解决办法]
是不是在OnInitDialog使用完m_pRecordset后没有关闭?

读书人网 >VC/MFC

热点推荐