代碼如下:
--------------------------------------------  dbgrid1.DataSource.DataSet.First;
  while not dbgrid1.DataSource.DataSet.eof do
  begin
    menuid:=menuid+DBGrid1.Fields[0].AsString+',';
    dbgrid1.DataSource.DataSet.next;
  end;  with ADOQuery2 do
  begin
    Close;
    SQL.Clear;
    SQL.Add('update ut_authority set AuthorityManagement=:b where emp_id=:a');
    Parameters.ParamByName('a').Value:=Trim(Edit1.Text);
    Parameters.ParamByName('b').Value:=Trim(menuid);
    ExecSQL;
  end;----------------------------------------
困惑死我了,用存儲過程也是一樣的,請賜教!

解决方案 »

  1.   

    字段改成了1000,類型為varchar
    字串是下面這樣的字符串:
    M0100,M0101,M0102,M0103,M0104,M0105,M0106,M0107,M0108,P0101,P0102,M0200,M0201,M0202,M0300,M0301,M0302,M0000,M0001,M0002,M0003,M0004,M0005,M0401,M0402,M0403,M0404,M0405,M0406,M0407,M0408,M0409,M0410,M0501,M0502,M0503,M0504,M0505,M0506,M0507,M0508,M0509,M0510,M0511,在sql server裡可以寫進去,就是在delphi裡不行
      

  2.   

    可以把數據寫進sql server數據庫裡去,但只是長度為102的字符串
    如要把下列字符串寫進數據庫裡去時:
    M0100,M0101,M0102,M0103,M0104,M0105,M0106,M0107,M0108,P0101,P0102,M0200,M0201,M0202,M0300,M0301,M0302,M0000,M0001,M0002,M0003,M0004,M0005,M0401,M0402,M0403,M0404,M0405,M0406,M0407,M0408,M0409,M0410,M0501,M0502,M0503,M0504,M0505,M0506,M0507,M0508,M0509,M0510,M0511,
    只寫進
    M0100,M0101,M0102,M0103,M0104,M0105,M0106,M0107,M0108,P0101,P0102,M0200,M0201,M0202,M0300,M0301,M0302,
    其余的就沒有了
      

  3.   

    难道屎字符集
    --------
    不明白,我就是這樣
      
    menuid:='M0100,M0101,M0102,M0103,M0104,M0105,M0106,M0107,M0108,P0101,P0102,M0200,M0201,M0202,M0300,M0301,M0302,M0000,M0001,M0002,M0003,M0004,M0005,M0401,M0402,M0403,M0404,M0405,M0406,M0407,M0408,M0409,M0410,M0501,M0502,M0503,M0504,M0505,M0506,M0507,M0508,M0509,M0510,M0511,';
      with ADOQuery2 do
      begin
        Close;
        SQL.Clear;
        SQL.Add('update ut_authority set AuthorityManagement=:b where emp_id=:a');
        Parameters.ParamByName('a').Value:=Trim(Edit1.Text);
        Parameters.ParamByName('b').Value:=Trim(menuid);
        ExecSQL;
      end;也是一樣的。
      

  4.   

    Edit1.Text有长度限制是ansiString类型,应该长度是255
    换memo试一下
      

  5.   

    其实楼主能意识到是长度问题,如果长度不在数据库中限制了,那么肯定在你输入的地方给限制了,仔细思考下就可以想到的。
    -------------------------------
    1,數據庫中我字段類型為varchar(1000)
    2,輸入也沒限制直接賦值也是一樣的
    如下:menuid:='M0100,M0101,M0102,M0103,M0104,M0105,M0106,M0107,M0108,P0101,P0102,M0200,M0201,M0202,M0300,M0301,M0302,M0000,M0001,M0002,M0003,M0004,M0005,M0401,M0402,M0403,M0404,M0405,M0406,M0407,M0408,M0409,M0410,M0501,M0502,M0503,M0504,M0505,M0506,M0507,M0508,M0509,M0510,M0511,';
      with ADOQuery2 do
      begin
        Close;
        SQL.Clear;
        SQL.Add('update ut_authority set AuthorityManagement=:b where emp_id=:a');
        Parameters.ParamByName('a').Value:=Trim(Edit1.Text);
        Parameters.ParamByName('b').Value:=Trim(menuid);
        ExecSQL;
      end;
      

  6.   

    menuid你定义什么类型?别告诉我是String
    那你可以直接输出你的menuID看看,肯定是这个变量长度不够了
      

  7.   

    你贴出的代码应该没什么问题,我搭环境测试过了。按你所说的情况来看,有一种可能性,你的menuid变量是不是申明成了:
    var
      menuid : String[102];
      

  8.   

    var S: string;creates a variable S that holds a string. In the default {$H+} state, the compiler interprets string (when it appears without a bracketed number after it) as AnsiString. Use the {$H-} directive to turn string into ShortString.所以你定义的时候,直接定义成ansistring或者wideString