环境:DELPHI6、ORACLE 816,项目组开发机系统:WIN2K和WINXP。数据模型设计:power designer 9
说来话长,11月份,我们在开发过程中发生了一件很奇怪的事情:ORACLE中有个别表(使用BDE连接控件)在个别机器上不能正常显示数据。系统(DELPHI/SQL EXPLORER)提示的是数据(或日期)格式不正确。但是用SQL PLUS却没有任何问题。在一头雾水,走投无路的情况下,我们又偶然发现,使用ADO能够解决这些问题!加上时间紧迫,于是项目组不假思索,立刻换成了清一色的ADO接口。
本来以为从此就平安无事了。谁知在项目即将结束的12月底,同样的情况发生在了ADO上面:几乎就是那些当初不能在BDE上面显示的数据表,如今在ADO上面也罢工了!而且情况更恐怖:如果不能正常显示的ADO数据集被OPEN,系统会有三种反应:1ADO报错:未指定的错误;2delphi报错:xxxx内存错误,oooo不能为”READ“;3没有任何东西报任何错误,delphi直接退出来。而且每次任取其一,不可预测………………
我们开始怀疑,是不是部分机器系统真的出了问题?
于是我们用剩余没有问题的机器完成剩余的代码,编译拿到其他地方(指项目小组以外的那些机器,包括客户的工作机)执行,发现这个问题非常普遍。几乎就没有能够正常运行的机器(其他机器一样的也有很多种反应)!
从下周一算起,我们只有一周的时间了。法律无情啊!万般无奈之余,我明知道这个问题根本不可能很完整的描述,还是试着贴上来。请大家根据我写的情况,帮我把把脉。万分感谢大家了!
总结一下。我们需要解决的问题主要在这些地方:
1 到底是数据本身有问题还是delphi的兼容上有问题?
2 如果是数据本身有问题,要怎么样才能解决?换数据库?
3 如果是delphi的兼容问题,那么要怎么做才能屏蔽这些兼容不足?换开发工具是肯定没有时间了…………
4 会不会还可能有其他我想不到的地方出了错?
这个事情给我们项目组的打击非常的大。因为我们就算是再努力工作,如果老是被迫要和这些莫名其妙的问题作斗争,谁的积极性都会被消磨的。所以作为小组的一员,我真的希望能够有高手给我们指条明路,让同伴们早日走出这段苦难。真的,再次谢谢大家了!

解决方案 »

  1.   

    你数据库的日期的格式是什么 datatime ?
    如果不是 换成这个试试 实话实说ORACLE  不是特别熟 看来你真很急 如果我说的不是 发消息给其他版竹
      

  2.   

    duxin:我的日期格式就是DATE型的
      

  3.   

    我也碰到过一个表中的数据,莫名其妙就丢失了。   :)ADO访问Oracle是会有问题,李维建议千万不要用ADO访问Oracle.使用BDE.使用BDE,使用不同的方法吧。 没有解决不了的问题,就怕你不去试!
      

  4.   

    哎呀,我們也是用的oracle8.1.6+delphi6+ado
    還沒有發現你的問題
      

  5.   

    偶用的是oracle9+delphi7+dbexpress
      

  6.   

    俺 也 見過用的也是ADO+oracle
      

  7.   

    俺 也 見過用的也是ADO+oracle
      

  8.   

    随便说一下:希望能对你们有所帮助.
    ----------------------------
    如果是BDE+DELPHI的话,注意一下本地机器的日期格式,程序开始运行的时候用:
    DateSeparator := '-';
    ShortDateFormat := 'yyyy-mm-dd';
    LongDateFormat := 'yyyy-mm-dd HH:mm:ss';
    初始化一下.
    我碰到过我的客户机器的日期分隔格式为"/"出错,按照上面做了就解决了.
    >>ORACLE中有个别表(使用BDE连接控件)在个别机器上不能正常显示数据
    -->你当初应该把这些出问题的数据找出来,或者说总结追踪一下,是什么类型的数据才会出错.
    ps:应该不用怀疑oracle数据库有问题,肯定是你的程序有问题.
      

  9.   

    谢谢大家的关心。我已经争取到了时间,头头答应过年前解决了………………
    但事情还是要解决,我来回答大家的问题吧!
    LVOLCANO:如果真的是这个问题的话…………我只有辞职,找家不用d版的公司啦!
    edgethinking:你说的不同方法指哪方面呢?
    BoningSword:你的格式初始化我试过了,依然报错。ado还是报内存错误,然后退出。bde错误信息如下:
    Project Project1.exe raised exception class EDBEngineError with message 'General SQL error.[oracle][odbc]Invalid datetime format.'.process stopped.use step or run to continue.
    希望对大家有帮助
      

  10.   

    哥们,这样试一试,在sql 中转化时间
    select * from table where datem=to_date('时间的字符格式','yyyy-MM-dd hh24:mi:ss')
    ado 中我使用的时候也是有很多的时间问题,用这样的一般可以解决,
    好运!!!
      

  11.   

    qhlkj:恰好被你说中了!我们的数据的确是以前的老系统里面导出来的。但是你的方法实在是不太可能办到…………每张表都有10万多条记录啊!
      

  12.   

    'General SQL error.[oracle][odbc]Invalid datetime format非法的时间格式估计是DELPHI与ORACLE之间的时间转换有问题
      

  13.   

    LVOLCANO:可是…………有一部分机器没有这个问题啊!大家的delphi都是一样的,操作系统也没有什么特别的地方
      

  14.   

    我只知道在Access中处理日期跟SQl Server中不一样,例:
    Access:
    select * from Sample where SampleDate=#2004-01-12#
    Sql Server:
    select * from Sample where SampleDate='2004-01-12'
    不知道在oracle中存不存在这样的问题,你试试吧。
      

  15.   

    armyguo:是的,我都用to_date来处理的。
      

  16.   

    请楼主检查一下操作系统的日期格式和分割符,控制面板->区域选项->日期
    看看有问题的机器和没问题的机器设置是否一样
      

  17.   

    最好去查一下出错表的数据,我估计是这个表里的数据问题,在从其他系统导出来,可能其以前的数据就有不对的啊,现在导到Oracel中的数据也就有错了啊,先去检查数据的错误,再去运行程序。从有可能出现的地方找问题,直到问题的解决。
      

  18.   

    wj964124:有个问题我想不通:导入的程序也是我们写的,也是用的ado。如果是原来的数据有误,为什么能够不报错地导入进去呢?
      

  19.   

    qhlkj:您指哪方面的?如果指接口,我们用的ado和bde;如果指网络,客户端和服务器在同一个公司网中,但是ip地址不是同一个网段的。使用icp协议连接
      

  20.   

    look一下数据库里时间的结构先,及有可能在采用非中国方式,导入数据的时候系统不会判断,而且也会默认此格式为正确格式。但数据访问的时候如果格式与程序不一致,则会提示错误。再有,ADO的不同版本对于数据库的处理可能不完全一样。如果在系统开发过程中安装使用了系统升级包,也会出现问题。
      

  21.   

    我正在做的项目和你的类似
    DELPHI7、ORACLE 9i 、WIN2K、XP,power designer 9 但我使用的是BDE,数据也是导入的,你确信在导入数据时没出错吗?有同样遭遇很想帮你,祝好运!
      

  22.   

    'General SQL error.[oracle][odbc]Invalid datetime format
    上句按字面意思是:普通的(一般的)SQL错误..[oracle][odbc] 有病的时间格式可是…………有一部分机器没有这个问题啊!大家的delphi都是一样的,操作系统也没有什么特别的地方好奇怪哦,这个我也就不知道了,数据导入出现错误或者哪里的SQL字段定义出问题,不妨就按照提示来仔细检查错误
      

  23.   

    我以前也碰到BDE +Oracle时而会出错(不只是时间问题),有时重做系统会好的,以后换用ODAC没有出现问题,建议试试!!
      

  24.   

    我也出现过,是日期格式不兼容或者是乱字符,程序打开后用dbedit根本不能显示日期,而一直报错,用异常的方法处理一下,遇到这样的异常,就删除这个日期数据,由用户再来输入。后来发现是一台电脑有病毒录入时保存产生了不正常的日期数据,以及从数据表导入导出数据时也有产生,具体情况我也正在跟踪之..
      

  25.   

    忘记提一下,上面不是用dbedit一显示日期的,是用RX日期数据控件,用dbgrid也出现了这样的错误,如果用edit自己来赋值则不会出现这样的问题
      

  26.   

    Project Project1.exe raised exception class EDBEngineError with message 'General SQL error.[oracle][odbc]Invalid datetime format.'.process stopped.use step or run to continue.执行这个内容时有时间限制条件吗?如果有,不用时间限制条件还出错吗?出错相同吗?(是数据库中的记录出错还是查询语句出错了?可能得先搞清楚)相同执行条件,有能正常运行的机器吗?是不是不管运行多少次都不会报错?个人意见:如果有能正常运行的机器(相同查询条件),且不管运行多少次都不会报错,首先考虑为病毒作怪
      

  27.   

    大家这么热心,我很感动,这几天一直在苦苦钻研。终于有了一定的进展,现在汇报给大家:首先,我们项目组不能显示的机器都重装了,并且,使用能显示及其上面的oracle安装文件安装oracle客户端。至此,不能显示的机器目前为止能够用ado显示了!只是有些时候有些地方要报e_fail错误。我在网上查到,这个问题好像是ado自身的问题,基本无解。可是同时,bde的错误提示依然存在。后来大富翁里有人建议我在数据库执行:
    alter session set nls_date_format='yyyy-mm-dd'。后来Invalid datetime format这个提示倒是没有了,却出来一个新的错误提示:
    general sql error.
    [oralce][odbc]restricted data type attribute violation.
    而且,我在google上基本上搜索不到这条错误信息的相关资源,难道没有几个人遇到这种问题?
      

  28.   

    alter session set nls_date_format='yyyy-mm-dd' 每次都要在数据库OPEN的时候执行,当CLOSE的时候,就恢复原样了restricted data type attribute violation.
    受限的数据类型属性违例不解,不解帮你顶
      

  29.   

    delphi 与oracle 之间有缝
    结合的并不是很好
    我用DELPHI7+ORACLE817
    有很多时候ORACLE的错误DELPHI无法正常显示
    不用BDE和ADO
    用第三方控件ODAC
    已经使用了一段时间
    还没有发现非常严重的问题
    使用ODAC的速度也非常快
    它只对ORACLE
    不行你就换上试一试
    下载的地方很多
    如果以前使用BDE改过来不是很困难
    应该是可以的
      

  30.   

    我也在用Delphi 开发oracle9i 用的是doa,还没遇到过你这样的问题楼上已经说了很多了我想最可能的就是你自己的程序出了问题,不要遇到什么不对就怪这些工具(当然不排除这些可能性),作为一个程序员,最要紧的是检查自己。
      

  31.   

    最好去查一下出错表的数据,我估计是这个表里的数据问题,在从其他系统导出来,可能其以前的数据就有不对的啊,现在导到Oracel中的数据也就有错了啊,先去检查数据的错误,再去运行程序。从有可能出现的地方找问题,直到问题的解决。
      

  32.   

    我用delphi6.0+Interbase6.5作练习时也是遇到如此的状况,可是提示信息有所不同。General SQL error.
    Column unknown
    BIRTHDAY
    Client SQL dialect 1 does not support reference to DATE datatype.会不会是dialect 3才能支持DATE类型?
    可是我又不知道在哪里设置。同病相怜,偶也发一篇。
      

  33.   

    我曾用Delphi5+Oracle+BDE开发过ERP,没遇到你说的问题,因为我的日期用的是字符类型。
      

  34.   

    我也遇到过类似的问题,整个感觉就是莫名其妙, 我是delphi7.0+oracle8i+bde
    程序刚调试好的时候挺顺的没有出现问题,可是在其它机子上用同样的方法建立了bde联接,一运行程序就出错后来发展到本机也出错,不解???
      

  35.   

    是D版本的ORANCLE吧,一般是没有问题的啊,你可以这样,ADO不改变,做一个ODBC试一下,ODBC是老牌连接了,应该不会有什么问题,建议ADO升级到2.8
      

  36.   

    有可能是Oracle中表的日期格式不同,你試著將日期格式在sql中轉換格式,然後再讀取.我們
    公司也是用的oracle+delphi7/delphi6+bde/ado/odac多了,但是沒有你說的這種情況亞
      

  37.   

    我做过进销存,日期格式不是用的datetime,用的是char,没出现什么问题;
    不用datetime的原因是各种计算机上日期格式不同,所以干脆用char,只是在程序启动时约束一下日期格式,输入日期后再转换成日期格式;
    楼主的问题没遇过,祝你好运!!
      

  38.   

    非常同意 zz791224(长发飘飘)的观点
    本人在设计数据库时如果用到日期时都用以下几种格式表示:
    yyyymmdd
    yyyy-mm-dd
    yyyymmddhhmiss
    yyyy-mm-dd hh:mi:ss
    而且字符也能比较,且不存在系统兼容性问题
      

  39.   

    字段类型的问题,BDE与ADO处理不一样。BDE只能处理有限的类型,ADO处理的类型更多一些。