现在的位置: 首页 > 综合 > 正文

operation not applicable

2013年11月17日 ⁄ 综合 ⁄ 共 2018字 ⁄ 字号 评论关闭

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个方法才能解决各种操作系统环境上的问题!!!

抱歉!评论已关闭.