使用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也有这个错。