问题如下:将一个Memo的内容保存到数据库。
aSQL:= 'update Y set Fstring = :pS where ID=2';//Fs字段是long varchar
with Query do
begin
  Close;
  SQL.Clear;
  SQL.Add(aSQL);
  ParamByName('pS').AsString:= Memo.Text;
  ExecSQL;
end;问题来了,如果Memo.Text不是很长,可以成功保存;但是如果Memo.Text很长,保存就会出错。请教各位大侠,对于这样的很长的字符,如何保存到数据库的long VarChar字段中。分不够再加!!!!!!!!!!

解决方案 »

  1.   

    ParamByName('pS').asmem:= Memo.Text;
    要确定你的数据库列够长
      

  2.   

    将数据库里的字段改为text看看。
      

  3.   

    你用的数据库是什么,如果你用的是SQL2000或ORACEL不存在你的问题,你只要将类型调大就行啦,比如VARCHR2(10000)
      

  4.   

    SQL2000 VARCHAR类型的最大长度为80000
      

  5.   

    用Text或Binary啦,存的东西可达到GB级
      

  6.   

    这么多分,看着都爽了。
    Test应该是正解了,来凑个热闹的。
      

  7.   

    DB2的数据库,这个字段是不能更改的。
    凡是说要改数据库字段长度的,都没有理解我的问题。
    我的问题不是数据库的字段不够长,而是,SQL中的ParamByName('pS').AsString的AsString:=Memo.Text的时候,报错!
      

  8.   

    报什么错,对话框出来后你用ctrl+c把错误信息截下来贴出来
      

  9.   

    我load了一个113k的文本也没错阿
      

  10.   

    我要保存的字符共有1982个中文字,
    我的DB2数据库字段的类型TYPE = LONG VARCHAR, 长度LENGTH=32700。
    所以我想不应该是字段长度不够的原因。
      

  11.   

    我试的不是db2没问题,说明就不是delphi的问题了
      

  12.   

    你用的是BDE连接/操纵数据库,是吗?
    你这样看看:将DataBase控件的连接字串的
    BLOB SIZE 参数设置得大一些,如64,它默认的是32单位是K
      

  13.   

    话框出来后你用ctrl+c把错误信息截下来贴出来
      

  14.   

    当然是Delphi的错!
    我不是说了嘛,是AsString赋值的错!ParamByName('pS').asmem:= Memo.Text;是不对的。  
     
      

  15.   

    对于内容多的最好用TBlobField进行赋值
      

  16.   

    我想出错的原因是因为memo的内容太长导致了SQL语句也变的很长,这样就产生了问题。
    所以你试着用流试试,对Fstring字段的更新使用 
    var
         fS:TMemoryStream;
    begin
    fs:=TMemoryStream.Create;
    Memo1.Lines.SaveToStream(fs);
    fs.Position:=0;
    DataSet1.FieldByName('a').Assign(fs);
    fs.Free;
    end;
      

  17.   

    你的大量的数据的存取和读出最好用流的格式来存取.下为例子. 
    var
        str:Tstringstream;
    begin
        str:=TStringStream.Create('');
        memo1.lines.SaveToStream(str);
        query1.Sql.text := 'Insert into Table (FBlob) value ( :FBlob) ';
        with Query1.Parambyname('Fblob') do begin
             DataType := ftBlob;     //定义为Blob参数
             ParamType := ptInput ;  //定义为输入参数
         End;     Query1.Parambyname('Fblob').LoadFromStream(str,ftBlob) ;  //取二进制数据.
         Query1.ExecSQL ;  //传入数据.
      

  18.   

    如果太长就应该用Blob字段。
      

  19.   

    aSQL:= 'update Y set Fstring = :pS where ID=2';//Fs字段是long varchar
    with Query do
    begin
      Close;
      SQL.Clear;
      SQL.Add(aSQL);
      ParamByName('pS').Value:= Memo.Text;//Here is 'Value',not 'asstring'
      ExecSQL;
    end;
      

  20.   

    FieldByName('pS').asString:= Memo.Text;
      

  21.   

    楼上的说的都几乎是同一个方法,如果这种方法行不通的话,为什么不换种方法呢?提供一下我的方法,你试试看怎么样?FieldByName('pS').Assign(Memo1.Lines);