问题如下:将一个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字段中。分不够再加!!!!!!!!!!
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字段中。分不够再加!!!!!!!!!!
要确定你的数据库列够长
Test应该是正解了,来凑个热闹的。
凡是说要改数据库字段长度的,都没有理解我的问题。
我的问题不是数据库的字段不够长,而是,SQL中的ParamByName('pS').AsString的AsString:=Memo.Text的时候,报错!
我的DB2数据库字段的类型TYPE = LONG VARCHAR, 长度LENGTH=32700。
所以我想不应该是字段长度不够的原因。
你这样看看:将DataBase控件的连接字串的
BLOB SIZE 参数设置得大一些,如64,它默认的是32单位是K
我不是说了嘛,是AsString赋值的错!ParamByName('pS').asmem:= Memo.Text;是不对的。
所以你试着用流试试,对Fstring字段的更新使用
var
fS:TMemoryStream;
begin
fs:=TMemoryStream.Create;
Memo1.Lines.SaveToStream(fs);
fs.Position:=0;
DataSet1.FieldByName('a').Assign(fs);
fs.Free;
end;
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 ; //传入数据.
with Query do
begin
Close;
SQL.Clear;
SQL.Add(aSQL);
ParamByName('pS').Value:= Memo.Text;//Here is 'Value',not 'asstring'
ExecSQL;
end;