我用delphi作三层结构时,用edit1.text框传递数值给存储过程保存时,传中文时都要被丢掉一半。如我给edti1.text赋值’显示目录’,但存到数据库时是’显示’,’目录’2个字被丢掉了,在传到中间层时还是完整的,好象是由中间层传到数据库时被丢掉的。
请问各位大虾是什么原因?传英文就没问题。

解决方案 »

  1.   

    我使用的是delphi7开发,基于Midas的三层架构 ,客户端用TSocketConnection连接的.
      

  2.   

    我以前做的都是使用Tdbedit,Tdatasoure來連接數據源,通過ClientDateSet1.ApplyUpdate(0)來保存就沒有這個問題。我現在是用edit1.text 的值傳到後端存儲過程就有這個問題。
      

  3.   

    一个VCL的BUG...
    ADODB.PAS
    的这个函数实现上的错误
    function VarDataSize(const Value: OleVariant): Integer;
      

  4.   


      請問大蝦halfdream(哈欠) ,那怎樣才能解決這個問題呢?
      

  5.   

    如果没有必要连接到INTEGERT上去的话,建议用DCOM,SOCK经常丢失数据包的,很不稳定
      

  6.   

    定义方法的数据操作
    应用程序服务器的操作
    procedure Ttestapp.mm(UserName,PassWord);
    begin
     ADODataSet1.Close;
     ADODataSet1.CommandText:='select Legal_power from UserManage where UserName='''+UserName+''' and PassWord='''+PassWord+'''';
     ADODataSet1.Open;
    end;客户端调用:procedure TForm1.BitBtn1Click(Sender: TObject);
    begin
    UserName:=edit1.text;
    PassWord:=edit2.text;
    DataModule2.APPS.mm(UserName,PassWord);
    ClientDataSet1.close;
    DataModule2.ClientDataSet1.Open;
    //剩下的就是你对返回数据集的处理了
    end;
      

  7.   

    最早这个BUG我是两年前听说的,前些天看见有人也在问这问题,
    我自己跟踪一下,确定也是这函数的BUG,
    CSDN论坛一个朋友告诉我,他很早就发MAIL给BORLAND报告了这个BUG。。却从D5,D6,D7都有这个BUG,呵,真是过份。
    function VarDataSize(const Value: OleVariant): Integer;
    begin

    把这句    Result := Length(PWideString(@TVarData(Value).VOleStr)^);
    改成:    Result := Length(Value);

    end;然后重新编译ADODB。PAS单元。
    可用命令行方式编译:
    dcc32 adodb.pas
      

  8.   

    刚从GOOGLE搜索到
    http://www.588188.com/netbook/tech/delphi/html/delphi.ohchina.155.htm
      

  9.   

    你确定你编译后的单元DCU文件替换了原来的吗?
      

  10.   

    To 哈欠:
       老兄,問題出現在我沒有替換掉原來的DCU文件,現問題已解決,非常感謝你。
    馬上結貼。