我要在richedit里插入一下文字。当文字大概超过几十个字的时候就会强行被截断。其中redtgj.Text是richedit.
with dm1.adoqrygj do
        begin
            close;
            sql.Clear;
            sql.Add('insert ypgj (gm,pym,gj) value(:a,:b,:c);
            parameters.ParamByName('a').Value := trim(edtgm.text);
            parameters.ParamByName('b').Value := trim(edtpym.text);
            parameters.ParamByName('c').Value := trim(redtgj.Text);
            execsql;
        end;
目前本人的解决办法有两个,一个是将trichedit控件换成tmemo,
parameters.ParamByName('c').Value := trim(memo1.Text);
另外一个方法就是将parameters.ParamByName('a').size := 256;
但我就是不明白,为什么tmemo里没有问题,而trichedit确会强行截取它认为“多余”的文字?

解决方案 »

  1.   

    请测试memo1.Text和redtgj.Text的长度是否相同
    可能是parameters在设置size前无法容纳redtgj.Text中的数据
      

  2.   

    richedit是带格式的,和memo不一样
      

  3.   

    可以這樣試試,用流方式存取
    保存:
    var
      Str: string;
      temStream: TMemoryStream;
    begin
      temStream := TMemoryStream.Create;
      RichEdit1.Lines.SaveToStream(temStream);
      str := 'select * from Table1';
      AdoQuery1.Close;
      AdoQuery1.SQL.Clear;
      AdoQuery1.SQL.Add(str);
      AdoQuery1.Open;
      AdoQuery1.Append;
      AdoQuery1.FieldByName('ID').AsInteger:= 3;
      TBlobField(AdoQuery1.FieldByName('RichEditText')).LoadFromStream(temStream);
      AdoQuery1.Post;
      temStream.Free;
    读取:
    var
      Str: string;
      temStream: TMemoryStream;
    begin
      temStream := TMemoryStream.Create;
      str := 'select * from Table1 ';
      AdoQuery1.Close;
      AdoQuery1.SQL.Clear;
      AdoQuery1.SQL.Add(str);
      AdoQuery1.Open;
      TBlobField(AdoQuery1.FieldByName('RichEditText')).SaveToStream(temStream);
      temStream.Seek(0,0);
      RichEdit1.Lines.LoadFromStream(temStream);
      temStream.Free;