如何使用FibPlus中的TpFIBQuery组件读取BLOB(文本)字段



我正在使用Delphi7FibPlus组件。其中一个是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应用程序时,这是主要的更改。


不管怎样,我很高兴我找到了解决方案。希望它也能帮助其他人。

相关内容

  • 没有找到相关文章

最新更新