小弟用Delphi 5.0 (Build 5.62)在Win2K编写了一个3层的程序,数据库用Oracle 8.15,不在本机。客户端用SocketConnection、ClientDataSet、DataSource连接服务层。
服务端就只有Database1、Query、DataSetProvider。在程序中有一个保存按钮,它的事件有这么一段代码:
ClientDataSet.CommandText:='insert into MMS_STOCKEQUIP(PINDEX,PNAME,PNAMENO,PTYPE,PMEASURERANGE,PVERACITYCLS,PFRACTNAME,PFACTORYNO,PLEAVEFACTDATE,PINITNO,PSTARTDATE,PNO,PSTOCLPLAC,PSTOCKPLACNO,PCHECKPLAC,PCHECKPLACNO,PCHECKCYC,PKINDNAME,PKIND,PSUBKINDNAME,PSUBKIND,PVALIDTIME)values('+tmpInsertstr+','''+strESPname+''','''+tmpESPnameNo+''','''+strESPtype+''','''+strESPmeasurerange+''','''+strESPveracitycls+''','''+strESPfractname+''','''+tmpESPfractnameNo+''',To_Date('''+strESPleavefactdate+''',''YYYY-MM-DD'''+'),'''+strESPinitno+''',To_Date('''+strESPstartdate+''',''YYYY-MM-DD'''+'),'''+strESPno+''','''+strESPstockplac+''','''+tmpESPstockplacNo+''','''+strESPcheckplac+''','''+tmpESPcheckplacNo+''','''+strESPcheckcyc+''','''+strESPkind+''','''+tmpESPkindNo+''','''+strESPsubkind+''','''+tmpESPsubkindNo+''',To_Date('''+strESPvalidtime+''',''YYYY-MM-DD'''+'))';当我按下F9以后,编译器报错:
String literals may have at most 255 elements
Could not compile used unit 'aa.pas'这是怎么回事呀??要怎么解决??BTW:
如果我将上面的那个SQL语句中的字段改为:
ClientDataSet.CommandText:='insert into MMS_STOCKEQUIP(PINDEX,PNAME,PNAMENO,PTYPE,PMEASURERANGE,PVERACITYCLS,PFRACTNAME,PFACTORYNO,PLEAVEFACTDATE,PINITNO,PSTARTDATE,PNO,PSTOCLPLAC,PSTOCKPLACNO,PCHECKPLAC,PCHECKPLACNO,PCHECKCYC,PKINDNAME,PKIND,PSUBKINDNAME,PSUBKIND,)values('+tmpInsertstr+','''+strESPname+''','''+tmpESPnameNo+''','''+strESPtype+''','''+strESPmeasurerange+''','''+strESPveracitycls+''','''+strESPfractname+''','''+tmpESPfractnameNo+''',To_Date('''+strESPleavefactdate+''',''YYYY-MM-DD'''+'),'''+strESPinitno+''',To_Date('''+strESPstartdate+''',''YYYY-MM-DD'''+'),'''+strESPno+''','''+strESPstockplac+''','''+tmpESPstockplacNo+''','''+strESPcheckplac+''','''+tmpESPcheckplacNo+''','''+strESPcheckcyc+''','''+strESPkind+''','''+tmpESPkindNo+''','''+strESPsubkind+''','''+tmpESPsubkindNo+''')';就不会出错,但是加上一个字段和这个字段的值就会出错。救救偶吧

解决方案 »

  1.   

    delphi中字符串类型长度不能超过256,你看看是不是你ClientDataSet.CommandText的值长度是不是大于256
      

  2.   

    to tiexinliu(铁心刘),我用ShowMessage(IntToStr(Length(ClientDataSet.CommandText)))
    的结果是421。呵呵,我对存储过程不太了解,只好用笨办法了。我用一个Insert+一个Updata来解决了。
      

  3.   

    可以把这段SQL拆为多段,每段存在一个字符串变量中,最后再将这些段加到一起赋给CommandText。
      

  4.   

    我也遇到过,不过我用的是Adoquery,后来我把语句拆开分成几段,一段一段的赋值,可以通过。你可以想办法拆开喽!
      

  5.   

    to snowfog(秋风舞) 试过了,不行的。:)