首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

使用adoquery查询access数据库的有关问题!

2012-03-23 
使用adoquery查询access数据库的问题!!!我使用adoquery代码查询数据库,结果显示在datagrid中,我加入了处理

使用adoquery查询access数据库的问题!!!
我使用adoquery代码查询数据库,结果显示在datagrid中,我加入了处理鼠标滚轮事件的函数,如果在datagrid中滚动鼠标,选中的数据库会在第一条和最后一条切换,这是关闭窗口,会报错:
      BOF   或   EOF   中有一个是“真”,或者当前的记录已被删除,所需的操作要求一个当前的记录。

    大概的代码如下:

    查询数据函数如下:
OldProc   =   DBGrid1-> WindowProc;    
    DBGrid1-> WindowProc   =   NewProc;
    //前两行代码作用:使得鼠标滚轮响应我自己的事件
    Left=0;
    Top=0;
    AnsiString   mySql   =   "select   ID   as   编号,DeviceSN   as   安全U盘编号,UserName   as   用户名,OuName   as   单位名称   from   SecUInfo ";
    DM-> qrySecUInfo-> Connection   =   DM-> ADOConnection1;
    DM-> DSSecUInfo-> DataSet   =   DM-> qrySecUInfo;
    DM-> qrySecUInfo-> Close();
    DM-> qrySecUInfo-> SQL-> Clear();
    DM-> qrySecUInfo-> SQL-> Add(mySql);
    DM-> qrySecUInfo-> Open();
    TLocateOptions   Opts;
    Opts.Clear();
    Opts   < <   loCaseInsensitive;
    DBGrid1-> DataSource   =   DM-> DSSecUInfo;
********************************************
我的自定义鼠标滚轮事件函数:
void   __fastcall   TForm1::NewProc(TMessage   &Message)
{

    if   (Message.Msg   ==   WM_MOUSEWHEEL)
    {
        int   z   =   GET_WHEEL_DELTA_WPARAM(Message.WParam);
        Message.Msg   =   WM_VSCROLL;
        if   (z   >   0)
            Message.WParam   =   SB_LINEUP;
        else
            Message.WParam   =   SB_LINEDOWN;
    }
    OldProc(Message);
}
************************************************************
但是如果同样的代码用在bcb6中就不会有这样的错误!
是不是bcb5的bug啊??请高手指教!!

[解决办法]
应该是mdac数据库引擎有误,升级一下就没事了,碰到过这种问题
MDAC是微软的东东
[解决办法]
嗯 ,一升级BCB6就发现这个BUG了,升级一下MDAC就OK了
[解决办法]
楼上正解,该BUG我最早见到的时候是在BCB5
将BCB5打是补丁以后,就没有这个错误了。

倒没注意BCB6也有这个错。

热点排行