我使用德爾福柏林。如何複製一個ftBlob與firedc arrayDML
我正在嘗試使用ArrayDML將FireDac查詢(連接到數據庫)的數據複製到另一個FireDac查詢(連接到另一個數據庫)的功能/過程。第一個數據庫是firebird,另一個是MSSQL,但在另一個情況下,兩個數據庫都是Firebird。
到目前爲止,所有的數據類型都工作正常,除了ftBlob。
這裏是函數體:
while not querySource.Eof do begin
paramPosition := -1;
Inc(mIndex);
for i := 0 to querySource.FieldCount - 1 do begin
Inc(paramPosition);
// daca exista o valoare
if querySource.FieldByName(querySource.Fields[i].FieldName).AsVariant <> Null then begin
case querySource.Fields[i].DataType of
ftDateTime, ftDate, ftTime, ftTimeStamp : queryInsert.Params[paramPosition].AsDateTimes[mIndex] := querySource.FieldByName(querySource.Fields[i].FieldName).AsDateTime;
ftFloat, ftCurrency, ftBCD, ftFMTBcd : queryInsert.Params[paramPosition].AsFloats[mIndex] := querySource.FieldByName(querySource.Fields[i].FieldName).AsFloat;
ftSmallint, ftInteger, ftLargeint : queryInsert.Params[paramPosition].AsIntegers[mIndex] := querySource.FieldByName(querySource.Fields[i].FieldName).AsInteger;
ftString : queryInsert.Params[paramPosition].AsStrings[mIndex] := querySource.FieldByName(querySource.Fields[i].FieldName).AsString;
ftBlob, ftMemo, ftGraphic : queryInsert.Params[paramPosition].AsBlobs[mIndex] := querySource.FieldByName(querySource.Fields[i].FieldName).AsVariant;
end;
end;
end;
BLOB值不從源複製正確的值。
如何在這種情況下使用arrayDML?任何解決方法?
嘗試使用'AsAnsiString'而不是'AsVariant'。或者調用[AssignFieldValue](http://docwiki.embarcadero.com/Libraries/Tokyo/en/FireDAC.Stan.Param.TFDParam.AssignFieldValue),因爲我看不到代碼中的DML數組好處。或者忘記這一切,並使用現成的解決方案:) – Victoria
我還沒有使用arrayDML,但我敢肯定,這不是用blob工作的方式。看看你需要如何與Delphi一起使用blob工作 - http://docwiki.embarcadero.com/RADStudio/Tokyo/en/Support_for_Blob_Streaming_in_FireDAC。也可以看看來自embarcadero的TFDQuery批處理示例http://docwiki.embarcadero.com/CodeExamples/Tokyo/en/FireDAC.TFDQuery.Batch_Sample – RBA
@RBA,DML索引參數'AsBlobs'預計與'AsBlob'相同。 – Victoria