| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 848 人关注过本帖, 1 人收藏
标题:[求助] 连接ACESS数据库不正常,
只看楼主 加入收藏
hellomxf
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2012-12-7
结帖率:0
收藏(1)
已结贴  问题点数:20 回复次数:3 
[求助] 连接ACESS数据库不正常,
各位好:我的部分源代码如下:


void CDlgShowHistoryData::OnInitADOConn()
{
        
        HRESULT hr;
        try
        {
                hr = m_pConnection.CreateInstance("ADODB.Connection");///创建Connection对象
                if(SUCCEEDED(hr))
                {
                        CString strConnect = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\\MyHFData\\20121115.MDB;Persist Security Info=False";
                        ///上面一句中连接字串中的Provider是针对ACCESS2000环境的,对于ACCESS97,需要改为:Provider=Microsoft.Jet.OLEDB.3.51;  }
                        //使用Open方法连接数据库
                        hr = m_pConnection->Open((_bstr_t)strConnect,"","",adModeUnknown);///连接数据库
                }
        }
        catch(_com_error e)///捕捉异常
        {
                AfxMessageBox("连接数据失败,请检查数据库路径是否正确!");
        }

        ::CoInitialize(NULL);
}

void CDlgShowHistoryData::FindDataFormAccess(_bstr_t strSQL)
{
        //连接数据库
        OnInitADOConn();
        //设置查询字符串
        _bstr_t bstrSQL = strSQL;                        //"select * from YSDATA order by 通道编号 desc";
        //创建记录集指针对象实例
//        m_pRecordset.CreateInstance(__uuidof(Recordset));//该句也可以使用
        m_pRecordset.CreateInstance("ADODB.Recordset");//代替
        //打开记录集
//        m_pRecordset->Open(bstrSQL,m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockPessimistic,adCmdText);
//        _variant_t((IDispatch *)theApp.m_pConnection,true)
        m_pRecordset->Open(bstrSQL,_variant_t((IDispatch *)m_pConnection,true),adOpenDynamic,adLockPessimistic,adCmdText);
        while(!m_pRecordset->adoEOF)
        {
                m_ListShowHisData.InsertItem(0,"");
                m_ListShowHisData.SetItemText(0,0,(char*)(_bstr_t)m_pRecordset->GetCollect("DTU编号"));
                m_ListShowHisData.SetItemText(0,1,(char*)(_bstr_t)m_pRecordset->GetCollect("通道编号"));
                m_ListShowHisData.SetItemText(0,2,(char*)(_bstr_t)m_pRecordset->GetCollect("日期"));
                m_ListShowHisData.SetItemText(0,3,(char*)(_bstr_t)m_pRecordset->GetCollect("时间"));
                //将记录集指针移动到下一条记录
                m_pRecordset->MoveNext();
        }
        //断开数据库连接
        ExitConnect();
}

第一次运行,一切正常
void CDlgShowHistoryData::OpenAcessDataToList()
{

        m_ListShowHisData.SetBkColor(RGB(255,240,242));
        m_ListShowHisData.SetTextBkColor(RGB(255,240,242));
        
        m_ListShowHisData.SetHeaderFontHW(16,0);         //设置头部字体高度,和宽度,0表示缺省,自适应
        m_ListShowHisData.SetHeaderBKColor(180,180,255,0); //设置头部背景色
        
        m_ListShowHisData.InsertColumn(0,_T("DTU编号"),LVCFMT_CENTER,100);
        m_ListShowHisData.InsertColumn(1,_T("通道编号"),LVCFMT_CENTER,80);
        m_ListShowHisData.InsertColumn(2,_T("日期"),LVCFMT_CENTER,110);
        m_ListShowHisData.InsertColumn(3,_T("时间"),LVCFMT_CENTER,80);

        AfxOleInit();
        _bstr_t bstrSQL = "select * from YSDATA order by 通道编号 desc";
        FindDataFormAccess(bstrSQL);

}

但第二次查询时就出错
//查询数据
void CDlgShowHistoryData::OnBtnQuery()
{
        // TODO: Add your control notification handler code here

                CTime tTime;
                tTime = CTime::GetCurrentTime();
                CString str;
                CString strTemp1,strTemp2,strTemp3;
                strTemp1.Format("%4d-",tTime.GetYear());
                if (tTime.GetMonth() > 9)
                {
                        strTemp2.Format("%2d-",tTime.GetMonth());
                }
                else
                {
                        strTemp2.Format("%d-",tTime.GetMonth());
                }
               
                if (tTime.GetDay() > 9)
                {
                        strTemp3.Format("%2d",tTime.GetDay());
                }
                else
                {
                        strTemp3.Format("%d",tTime.GetDay());
                }
               
                str = strTemp1 + strTemp2 + strTemp3;
                strTemp1 = "select * from YSDATA where 日期 = '"+str+"'";//order by 通道编号 desc
                _bstr_t bstrSQL = (_variant_t)strTemp1;// "select * from YSDATA where 日期 = 'str' order by 通道编号 desc";
                m_ListShowHisData.DeleteAllItems();
                FindDataFormAccess(bstrSQL);

}

弹出错误提示为


错误的位置在执行  m_pRecordset->Open(bstrSQL,_variant_t((IDispatch *)m_pConnection,true),adOpenDynamic,adLockPessimistic,adCmdText);
这一句,但是为什么第一次执行就可以,两者之间的差别就是执行的SQL命令不一样。请各位高手帮忙分析一下原因,怎么修改,谢谢各位了。
搜索更多相关主题的帖子: 源代码 False 
2012-12-07 13:07
红色警戒
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:19
帖 子:444
专家分:2967
注 册:2005-11-20
收藏
得分:20 
查询语句中日期前后要加个#号吧, where 日期 = #2012-12-06 10:10:10#,试试看

2012-12-07 20:47
hellomxf
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2012-12-7
收藏
得分:0 
我试试,谢谢了
2012-12-10 09:25
hellomxf
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2012-12-7
收藏
得分:0 
刚试过了,加上#号,一切都没问题了,谢谢。
2012-12-10 09:46
快速回复:[求助] 连接ACESS数据库不正常,
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016322 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved