我正在使用Delphi7和FibPlus组件。其中一个是CCD_ 1。
我正在从带有通用的表中加载数据
select * from TableName where Key = 1
返回的字段之一的类型为BLOB(Text)
。
我似乎无法使用以下三种方法中的任何一种将值放入字符串列表informatie
中:
Informatie.Text := FieldByName('Informatie').AsString // Returns the string 'BLOB'
Informatie.Text := BlobAsString('Informatie') // Returns ''
BlobToStrings('Informatie',Informatie) // Returns ''
我已经使用数据库工作台确认,表中的字段确实包含保存的文本。
有人吗?
通常,我喜欢这个
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对象。而且从表中选择*是不好的做法。这种习惯最终会导致你持续头痛。
在尝试了@jiang的解决方案后,我终于找到了罪魁祸首。
事实证明,这是由于我的部分造成的错误(通常是,你只需要找到它)。
事实证明,在处理/读取原始查询的字段期间,我曾将读取事务设置为False。
- 我在另一个表中执行查找,以获得查询中整数值的描述
- 此查找查询使用相同的读取事务,并在查找描述后将此事务设置为
False
- a返回到原始查询后,读取整数和字符串字段没有问题(尽管读取事务已设置为False),但使用。。。AsString方法产生错误或返回"BLOB"
显然,我需要在读取操作开始时将读取事务设置为True,并在所有读取事务之后将其设置为False。当您将Paradox BDE应用程序转换为SQL Server的Firebird应用程序时,这是主要的更改。
不管怎样,我很高兴我找到了解决方案。希望它也能帮助其他人。