delphi+sqlserver开发的一个系统,在本机(windows xp)和另外一台机器(windows 2003 server)上没有问题,但是在windows 7和另外一台windows xp上却有问题,出错为“operation not applicable”。
代码如下:
网上找了下原因,有下面这么多可能正确的答案:
1)sql太复杂
2)不能用Open应该用execsql
3)只要SQL的表中出现Datatime类型的列,就一定会出现上述 的错误。难道这是dbExpress的BUG???,打上dbExpress的补丁或升级
4)把数据库中 DATATIME 类型改为 SmallDATATIME
5)临时想到,还有可能是Window 7中的时间格式是否是标准格式,因为之前碰到过window7默认格式是 2011/09/01,我们需要的是2011-09-01
对于解决问题的帖子:
http://www.delphibbs.com/delphibbs/dispq.asp?lid=2697500
6)网上找的
query1.close;
query1.SQL.Clear;
query1.SQL.add( 'select username, room, idnum, oprtime, action from dianbaolg where
username=:mypar order by oprtime ');
query1.ParamByName( 'mypar ').asstring:=edit1.Text;
query1.open
上面语句执行的时候出现同样的问题,但下面的语句就OK了,可能是时间格式化或者按照时间排序的问题。
query1.close;
query1.sql.text := 'select * from dianbaolg
where username like ' ' '+ '% '+edit1.text+ '% '+
' ' ' and oprtime between ' ' '+
formatdatetime( 'yyyy-mm-dd ',datetimepicker1.date-1)+ '% '+
' ' ' and ' ' '+formatdatetime( 'yyyy-mm-dd ',datetimepicker2.date)+ '% '+
' ' ' order by oprtime ';
query1.Open;
7)ClientDataSet的FieldDefs时间字段从ftTimeStamp->ftDateTime
http://ktop.no-ip.org/topic.asp?TOPIC_ID=34833
8)midas.dll版本问题
http://topic.csdn.net/u/20090703/09/5781A478-FA67-42E9-AEA1-E49B9D0BAE79.html
9)我估计是缺少什么文件的,或者数据库的驱动有冲突。
因为90%以上的电脑是很正常,没有任何错误,只有几台电脑上出现这个问题
在Google搜索好似是Datetime类型字段问题,今天我已经把所有关联的Datetime类型字段都改成varchar了。
可是问题还一样。出现如题的错误,无法打开数据集
10)把midas.dll拷贝到目录c:/WINDOWS/system32/ 下
开始->运行->cmd->Regsvr32 c:/WINDOWS/system32/midas.dll
http://bbs.2ccc.com/topic.asp?topicid=343164
11)在其中一个单元模块加上uses MidasLib
初步问题解决了:
开发中用 TSQLConnection+TSQLQuery+TDataSetProvider+TClientDataSet
时,应该在设计的时候让TSQLConnection的Active启动一下并设置true,然后再改为false,这样的目的是让其它控件在设计的时候感应下真实数据库的字段,并在部署客户端的时候不至于报这种错误。
原先那台访问出错的Window xp机器,没有做任何改变,重启注册下midas.dll就OK了,但是另外一台win 7重启注册了还没用,程序做了小调整(TSQLConnection的Active启动一下并设置true),所有机器都可以了!
最终解决:
只要在一个单元中添加 uses MidasLib,这样的话就不需要Midas.dll,上面的解决办法都是浮云,只有第11个方法才能解决各种操作系统环境上的问题!!!