请问我用的是delphi 6  在数据插入数据库时,在汉字输入时出现截断,而是英语时没有这种现象,why? 解决问题一定给分。我用的是SQL SERVER 2000 字段是 varchar 长度255,可是我只是输入几个汉字,如'重庆移动',就会成'重庆',用到存储过程,是用sql 写的 
begin transaction
insert e_Register( 
  sOperatorName,  nOperatorID,
  nClientID,      sClientName,
  sItem,          sbrand,
  stype,          dDateTime,
  nStatus,        sFlag,
  sTableName,     bPaid, 
  bOwner,         bExigence,
  eCode ,         sArea)
values(
  :sOperatorName, :nOperatorID,
  :nClientID,     :sClientName,
  :sItem,         :sBrand,
  :stype,         :dDateTime,
  :nStatus,       :sFlag,
  :sTableName,    :bPaid, 
  :bOwner,        :bExigence,
  :eCode ,         :eArea )
select nID = max(nID) from e_Register
commit transaction

解决方案 »

  1.   

    ft,给出这段代码有什么用。
    你用sql的profile跟踪一下你的sql语句,是否在delphi中被截断,给出delphi中的代码。
      

  2.   

    控制一下连接存储过程的控件中参数的size
      

  3.   

    恕我眼拙,这是SQL SERVER 2000的语句么?
      

  4.   

    参数传递PAMTERS的时候好象是有这个问题;
      

  5.   

    1.
    不知是不是你写错了,sql插入记录
    insert into tablename(...) values(...)
    2.
    把varchar 类型,改为nvarchar 试试
      

  6.   

    Delphi 中不要用 Params 传递参数
    如果非要用,则用此函数转换一下:function ToCDSParamsString(s:string):string;
    var
      ws:WideString;
      i:Integer;
    begin
      ws:=s;
      for i:=1 to Length(ws) do
      begin
        if Ord(ws[i])>255 then
          s:=s+' ';
      end;
      Result:=s;
    end;
      

  7.   

    我遇到,  我解决。 在程序中一定要指定存储过程参数长度。  With ADO_SP do
        begin
          ProcedureName :='SP_OPE_SaveUser';
          with Parameters .AddParameter  do
            begin
              Name:='@ISBN';
              Size:=38;   //在这里一定要指定长度否则就不行。
              DataType := ftString;
              Direction := pdInput;
              Value := ISBN;
            end;
        .........
      

  8.   

    我看了一下,好像不是参数问题,用楼主的参数方法不用管参数的size
    会不会是数据库字段小了,只有两个汉字,字段大小不会是5或者6吧
      

  9.   

    你就试试: ZyxIp(绝望中的平静) 的办法,
    UP