我有一個fkInternal
計算字段ftBlob
(在TClientDataSet
)包含在DataSnap客戶端應用程序中的斑點。檢測空/填充TBlobField失敗
該字段最初爲空,我們只在實際需要blob數據時填寫它*。
這是從服務器應用程序拉動數據的代碼:
var
lBlobStream: TStream;
lBlobField : TBlobField;
with DataSet do
begin
lBlobField := TBlobField(FieldByName(sExpItmFileFile)); // The fkInternalCalc blob
try
// Retrieve the blob stream (calculated field) separately when we don't yet have data:
if lBlobField.isNull then
begin
Edit;
lBlobStream := CreateBlobStream(lBlobField, bmWrite);
DownLoadAttachmentBlob(FieldByName(sExpItmFileID).Asinteger,lBlobStream);
Post;
...
end;
BLOB數據檢索細。
我的問題是與if lBlobField.isNull
測試:下次我們來這個代碼(該數據集保持在同一記錄,同時沒有ApplyUpdates
被稱爲這個值仍然是真的。
我也曾嘗試檢查屬性Size
,DataSize
,BlobSize
,他們都爲0。
我如何檢查我的TBlobField包含數據?
(還是我做錯了什麼在此代碼?)
*原因:我們不想把所有這些數據中;實際上加載TClientDataSet
與許多斑點給我們使用的RemObjects組件的'包太大'錯誤
編輯1:它可能與該字段的內容不「粘」 - 在另一部分直接在Post lBlobField.Value
後面的代碼是空的。
編輯2:這是一個包含3個嵌套表的查詢的數據集。 DataSet
是第三級TClientDataSet
並且這裏的數據blobs需要被寫到的fkInternalCalc字段(因此bmWrite
,Edit和Post),只有當它們實際需要時。它們通過DownLoadAttachmentBlob
通過單獨的客戶端 - 服務器通道檢索。這將獲取記錄ID作爲輸入並將blob數據放入第二個參數(lBlobStream
)。 (嵌套)數據集包含第三級表的所有其他字段(如ID sExpItmFileID
),但不包含其blob數據。 DownLoadAttachmentBlob
工作正常。
一旦blob被讀入calc字段,我們希望保留它(不會檢索兩次)。
很抱歉,如果只是噪音,但你儘管你似乎從中讀取創建模式'bmWrite'團塊流?此外,不知道'DownLoadAttachmentBlob()'究竟做了什麼,blobfield似乎是'ExpItmFileFile',但你將'ExpPItmFileID'傳遞給函數? –
@TomBrunberg對不起,混淆;-)請參閱編輯2. –
請勿使用*編輯1 *和*編輯2 *亂拋垃圾。通過查看[修訂歷史記錄](http://stackoverflow.com/posts/38588645/revisions),我們可以看到哪個編輯改變了什麼。只需編輯帖子並添加詳細信息,就好像您將它們寫在首位一樣。 –