2

我将Delphi 7FibPlus组件一起使用。其中之一是TpFIBQuery

我正在使用通用表从表中加载数据

select * from TableName where Key = 1

返回的字段之一是 type BLOB(Text)

我似乎无法informatie使用以下 3 种方式中的任何一种将值放入字符串列表:

Informatie.Text := FieldByName('Informatie').AsString  // Returns the string 'BLOB'
Informatie.Text := BlobAsString('Informatie')          // Returns ''
BlobToStrings('Informatie',Informatie)                 // Returns ''

我已使用 Database Workbench 确认表中的字段确实包含保存的文本。

任何人 ?

4

2 回答 2

2

在尝试了@jiang的解决方案后,产生了同样的错误,我终于找到了罪魁祸首。

原来这是我的错误(通常是,你只需要找到它)。

原来我在处理/读取原始查询的字段期间的某个时候将读取事务设置为 False 。

  • 我在另一个表中执行查找以获取查询中整数值的描述。
  • 此查找查询使用相同的读取事务,并False在查找描述后将此事务设置为。
  • 返回原始查询后,读取整数和字符串字段没有问题(尽管已将读取事务设置为 False),但使用 ...AsString 方法将 BLOB 字段读取到字符串中会产生错误或返回 'BLOB' .

显然,我需要在读取操作开始时将读取事务设置为 True,并在所有读取事务之后将其设置为 False。这是将 Paradox BDE 应用程序转换为 Firebird of Sqlserver 应用程序时的主要变化。


无论如何,我很高兴我找到了解决方案。希望它也能帮助其他人。

于 2012-03-24T06:28:08.733 回答
1

通常,我喜欢这样

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 对象。也从表中选择 * 是不好的坏习惯。这种习惯最终会让你头疼不已。

于 2012-03-24T02:50:29.060 回答