编译没有毛病,但打开后总是显示"读取数据库失败",求助!!!!!

依安县刘海生 2004-10-31 02:15:08


以下是,BuildingInfoDlg.cpp : 实现文件内容,
编译没有毛病,但打开后总是显示-------"读取数据库失败",
在"BOOL CBuildingInfoDlg::OnInitDialog()"中实现,这个程序是照书打的,
但不知道是哪出了毛病?
请高手指教一二,谢谢!!!!!!


// BuildingInfoDlg.cpp : 实现文件
//

#include "stdafx.h"
#include "BuildingInfo.h"
#include "BuildingInfoDlg.h"
#include "DlgProxy.h"
#include ".\buildinginfodlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif


// 用于应用程序“关于”菜单项的 CAboutDlg 对话框

_variant_t vName,vDate,vID,vPrice,vAddress,vDev;
bool m_bAutoSave;
int m_nCurrentSel;

//.....代码省略!!!!!!!!!!!!!

IMPLEMENT_DYNAMIC(CBuildingInfoDlg, CDialog);
CBuildingInfoDlg::CBuildingInfoDlg(CWnd* pParent /*=NULL*/)
: CDialog(CBuildingInfoDlg::IDD, pParent)
, m_nID(0)
, m_sName(_T(""))
, m_strAdd(_T(""))
, m_strDev(_T(""))
, m_nPrice(0)
, m_tDate(COleDateTime::GetCurrentTime())
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
m_pAutoProxy = NULL;
}

//.....代码省略!!!!!!!!!!!!!


// CBuildingInfoDlg 消息处理程序

BOOL CBuildingInfoDlg::OnInitDialog()
{
CDialog::OnInitDialog();
//m_pRecordset.CreateInstance("ADODB.Recordset");为什么创建数据库失败!!!!!!!!???????????????????????????????

// 将\“关于...\”菜单项添加到系统菜单中。

m_cDelItem.EnableWindow(false);
::SendMessage(m_Reallist.m_hWnd,LVM_SETEXTENDEDLISTVIEWSTYLE,LVS_EX_FULLROWSELECT,LVS_EX_FULLROWSELECT);
m_Reallist.InsertColumn(0,"楼盘 ID",LVCFMT_LEFT,60);
m_Reallist.InsertColumn(1,"楼盘名称",LVCFMT_LEFT,100);
m_Reallist.InsertColumn(2,"价格",LVCFMT_LEFT,60);
m_Reallist.InsertColumn(3,"开盘日期",LVCFMT_LEFT,100);
m_Reallist.InsertColumn(4,"楼盘地点",LVCFMT_LEFT,150);
m_Reallist.InsertColumn(5,"楼盘开发商",LVCFMT_LEFT,150);
int nItem;
//_variant_t vName,vDate,vID,vPrice,vAddress,vDev;
try
{
m_pRecordset.CreateInstance("ADODB.Recordset");
m_pRecordset->Open("SELECT * FROM realestate",_variant_t((IDispatch*)theApp.m_pConnection,true),adOpenStatic,adLockOptimistic,adCmdText);
// m_bSuccess=TRUE;
while(!m_pRecordset->adoEOF)
{
vID=m_pRecordset->GetCollect("索引");
vName=m_pRecordset->GetCollect("楼盘名称");
vAddress=m_pRecordset->GetCollect("楼盘地点");
vDev=m_pRecordset->GetCollect("楼盘开发商");
vPrice=m_pRecordset->GetCollect("价格");
vDate=m_pRecordset->GetCollect("开盘日期");
nItem=m_Reallist.InsertItem(0xffff,(_bstr_t)vID);
m_Reallist.SetItem(nItem,1,1,(_bstr_t)vName,NULL,0,0,0);
m_Reallist.SetItem(nItem,2,1,(_bstr_t)vPrice,NULL,0,0,0);
m_Reallist.SetItem(nItem,3,1,(_bstr_t)vDate,NULL,0,0,0);
m_Reallist.SetItem(nItem,4,1,(_bstr_t)vAddress,NULL,0,0,0);
m_Reallist.SetItem(nItem,5,1,(_bstr_t)vDev,NULL,0,0,0);
m_pRecordset->MoveNext();
}
}
catch(_com_error e)
{
AfxMessageBox("读取数据库失败!");//=======出问题的方???????????????????
}

// IDM_ABOUTBOX 必须在系统命令范围内。
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);
}
}

// 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
// 执行此操作
SetIcon(m_hIcon, TRUE); // 设置大图标
SetIcon(m_hIcon, FALSE); // 设置小图标

// TODO: 在此添加额外的初始化代码
HRESULT hr;
try
{
hr=m_pConnection.CreateInstance("ADODB.Connection");
if(SUCCEEDED(hr))
{
hr=m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=realestate.mdb","","",adModeUnknown);
}
}
catch(_com_error e)
{
CString errormessage;
errormessage.Format("连接数据库失败\r\n错误信息:%s",e.ErrorMessage());
AfxMessageBox(errormessage);
return false;
}

//m_pRecordset.CreateInstance("ADODB.Recordset");

return TRUE; // 除非设置了控件的焦点,否则返回 TRUE

}

//.....代码省略!!!!!!!!!!!!!

// End ==============================BuildingInfoDlg.cpp : 实现文件
...全文
115 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
gooyan 2004-11-03
  • 打赏
  • 举报
回复
1.stdafx.h中加入
#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","adoEOF")
2。app文件的InitInstance中加入
if(S_OK!=OleInitialize(NULL))
{
AfxMessageBox("初始化COM组件库错误");
}


下面就是数据库操作
_ConnectionPtr pConn;
_RecordsetPtr pRs;
CString strSQL;
pConn.CreateInstance(__uuidof(Connection));
pConn->CursorLocation=adUseClient;
strSQL="Provider=SQLOLEDB;Server=Gooyan;DataBase=SkillsBox;UID=sa;PWD=aaaaaaaa";
pConn->Open(_bstr_t(strSQL),"","",-1);

pRs.CreateInstance(__uuidof(Recordset));
pRs->CursorLocation=adUseClient;
pRs->PutActiveConnection(pConn.GetInterfacePtr());

pRs1.CreateInstance(__uuidof(Recordset));
pRs1->CursorLocation=adUseClient;
pRs1->PutActiveConnection(pConn.GetInterfacePtr());

strSQL="select * from catalog order by cataid";
pRs->Open(_bstr_t(strSQL),vtMissing,adOpenDynamic,adLockBatchOptimistic,adCmdText);

sony19791015 2004-11-02
  • 打赏
  • 举报
回复
up
oyljerry 2004-11-02
  • 打赏
  • 举报
回复
com是否初始化
chlchen 2004-11-02
  • 打赏
  • 举报
回复
我怀疑是COM等没有初始化哦!还有就是没有包含 msado15.dll.具体的,你看看哦
bluebohe 2004-11-02
  • 打赏
  • 举报
回复
//m_pRecordset.CreateInstance("ADODB.Recordset");为什么创建数据库失败!!!!!!!!????

无非是没初始化COM CoInitialize(NULL);或者是没有#import "C:\Program Files\Common Files\System\ADO\msado15.dll" \
no_namespace rename("EOF", "EndOfFile")
如果问题在不同机器上时好时坏,则是MDAC安装有问题
内存泄漏 2004-11-01
  • 打赏
  • 举报
回复
没有初始化COM吧。。。。。
在BOOL CBuildingInfoDlg::OnInitDialog()函数的第一行加如下语句试试看:
CoInitialize(NULL);
另外,别忘了最后调用CoUninitialize();
依安县刘海生 2004-10-31
  • 打赏
  • 举报
回复
请高手具体指点一下,谢谢!
bobob 2004-10-31
  • 打赏
  • 举报
回复
顶,不会
AkiraChing 2004-10-31
  • 打赏
  • 举报
回复
安裝mdac2.8看看問題有沒有解決
我的女神 2004-10-31
  • 打赏
  • 举报
回复
//m_pRecordset.CreateInstance("ADODB.Recordset");为什么创建数据库失败!!

是不是没有获得接品指针GetInterface....

4,011

社区成员

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

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