vc用ado调用access
用mfc创建了一个基于对话框,编译通过了,但是运行提示
stdafx.h中这样
……//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
#endif // !defined(AFX_STDAFX_H__8634BE02_B702_4B0E_ACEB_69973718B17D__INCLUDED_)
#import "c:\program files\common files\system\ado\msado15.dll" no_namespace rename("EOF","adoEOF")
testDlg.h中这样:
……class CTestDlg : public CDialog
{
// Construction
public:
CTestDlg(CWnd* pParent = NULL); // standard constructor
_ConnectionPtr m_conn;
_RecordsetPtr m_rec;
其他:BOOL CTestDlg::OnInitDialog()
{
AfxOleInit();
CDialog::OnInitDialog();
m_conn.CreateInstance(_uuidof(Connection));
m_conn->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=mydb.mdb","","",adModeUnknown);
m_conn=NULL;
m_rec.CreateInstance(_uuidof(Recordset));
m_rec->Open("SELECT*FROM mytable",m_conn.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
运用:
void CTestDlg::OnAdd()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
_variant_t varname,varvalue;
m_rec->AddNew();
varname.SetString("姓名");
varvalue.SetString(m_sName) ;
m_rec->Update(varname,varvalue);
varname.SetString("性别");
varvalue.SetString(m_sSex);
m_rec->Update(varname,varvalue);
UpdateData(FALSE);
}
void CTestDlg::OnDelete()
{
// TODO: Add your control notification handler code here
m_rec->Delete(adAffectCurrent);
}
void CTestDlg::OnRead()
{
// TODO: Add your control notification handler code here
_variant_t vFieldValue;CString sname,ssex;
m_rec->MoveFirst();
vFieldValue=m_rec->GetCollect("姓名");
sname=(LPCSTR)_bstr_t(vFieldValue);
vFieldValue.Clear();
vFieldValue=m_rec->GetCollect("性别");
ssex=(LPCSTR)_bstr_t(vFieldValue);
m_rec->MoveNext();
m_sName=sname;m_sSex=ssex;
LVITEM lvi;
lvi.iItem=m_list.GetItemCount();
lvi.mask=LVIF_TEXT;
lvi.pszText=(LPSTR)(LPCSTR)sname;
lvi.iSubItem=0;
m_list.InsertItem(&lvi);
m_list.SetItemText(lvi.iItem,1,(LPSTR)(LPCTSTR)ssex);
UpdateData(FALSE);
}
编译通过了,但是提示c:\fixture_element\test\debug\msado15.tlh(407) : warning C4146: unary minus operator applied to unsigned type, result still unsigned
然后提示不能运行:
runtime error!说什么在一个unusual way
望指点!!谢谢
问题点数:40、回复次数:4Top
1 楼jbczj(人见人爱)回复于 2006-06-03 16:51:39 得分 0
用daoTop
2 楼jinxuliang(smielfox)回复于 2006-06-03 23:59:37 得分 5
是说你给一个无符号整数前面加了负号,返回值将仍然是无符号类型.也就是说变不为负数.Top
3 楼handsomerun(毛毛)回复于 2006-06-04 18:21:56 得分 30
【2】用#import指令引入ADO类型库
我们在stdafx.h中加入如下语句:(stdafx.h这个文件哪里可以找到?你可以在FileView中的Header Files里找到)
#import "c:\program files\common files\system\ado\msado15.dll" no_namespace rename("EOF","adoEOF")
这一语句有何作用呢?其最终作用同我们熟悉的#include类似,编译的时候系统会为我们生成msado15.tlh,ado15.tli两个C++头文件来定义ADO库。
几点说明:
(1) 您的环境中msado15.dll不一定在这个目录下,请按实际情况修改
(2) 在编译的时候肯能会出现如下警告,对此微软在MSDN中作了说明,并建议我们不要理会这个警告。
msado15.tlh(405) : warning C4146: unary minus operator applied to unsigned type, result still unsigned
Top
4 楼handsomerun(毛毛)回复于 2006-06-04 18:22:34 得分 5
至于运行出错,嗯,嗯,你跟踪一下,看执行到哪出错呢Top




