我正在使用 Delphi 7 和 FibPlus 组件。其中一个是TpFIBQuery
。
我正在使用通用
从表中加载数据select * from TableName where Key = 1
返回的其中一个字段属于BLOB(Text)
。
我似乎无法使用以下3种方式之一将值放入字符串列表informatie
中:
Informatie.Text := FieldByName('Informatie').AsString // Returns the string 'BLOB'
Informatie.Text := BlobAsString('Informatie') // Returns ''
BlobToStrings('Informatie',Informatie) // Returns ''
我已确认使用Database Workbench表中的字段确实包含已保存的文本。
任何人?
答案 0 :(得分:2)
在尝试出现同样错误的@jiang解决方案之后,我终于找到了罪魁祸首。
原来这是一个错误,因为我的部分(通常是,你只需要找到它)。
原来我在处理/读取原始查询的字段期间将读取事务设置为False 。
False
。 显然,我需要在读取操作开始时将读取事务设置为True,并在所有读取事务之后将其设置为False。当您将Paradox BDE应用程序转换为Firebird of Sqlserver应用程序时,这是一个重大更改。
无论如何,我很高兴我找到了解决方案。希望它也会帮助其他人。
答案 1 :(得分:1)
usualy,我喜欢这个
var
sl: TStrings; // blob IS NOT string!
ms: TMemoryStream;
begin
sl := TStringList.Create;
ms := TMemoryStream.Create;
try
q.FieldByName('x').SaveToStream(ms);
ms.Position := 0;
sl.LoadFromStream(ms);
// do what ever you want with sl here
// and here too
finally
sl.Free;
ms.Free;
end; // try..finally
end;
请注意,q是您的TpFibQuery对象。 也 select * from table是糟糕的不良做法。 这种习惯最终会让你持续头痛。