使用poFetchBlobsOnDemand时,检查是否已获取blob字段的正确方法

Fab*_*mes 6 delphi tclientdataset delphi-xe

我有一个带有几条记录的TClientDataSet,我希望o加载所有记录,但是按需加载blob字段,一次加载一个.

我注意到调用FetchBlobs两次获取blob两次,并且检查字段的IsNull属性总是返回False.

所以,我迄今发现的唯一的解决办法是访问属性一样的价值或BlobSize如果斑点尚未获取抛出一个异常EDBClient与消息"一滴也没有被取出",因此,如果这引发异常我叫FetchBlobs .

有没有更好的方法来做到这一点?

  try
    cdsIMG.BlobSize;
  except
    on E: EDBClient do
      cds.FetchBlobs;
  end;
Run Code Online (Sandbox Code Playgroud)

Ser*_*yuz 2

如果您必须知道 blob 的数据是否已被检索,我相信 TOndrej 的答案将是正确的选择。但你不必..

\n\n

poFetchBlobsOnDemand在“DataSetProvider”选项中设置并FetchOnDemand在“ClientDataSet”上设置时,行为已经如您所描述的那样。即,客户端数据集FetchBlobs仅在尚未检索到 blob 数据且仅在需要时调用。

\n\n

来自“ Provider.TProviderOption Enumeration ”:

\n\n
\n

poFetchBlobsOnDemand \xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0BLOB 字段不包含在数据包中。[...] 如果客户端数据集的 FetchOnDemand 属性为 true,则客户端会自动请求这些值。[...]

\n
\n