我正在使用 Delphi 11.2 和 FireDac 將資料讀取和寫入 Microsoft Access 資料庫。我希望能夠根據 delphi 中的(雙)值將資料庫中的數值設定為 NULL。我目前正在從資料庫中讀取值作為字串
myQuery.FieldByName('myNumericField').AsString
如果我找到空字串,則進入我的 delphi 物件欄位并將應用程式級別的雙精度值設定為 NAN。當我將它們寫回資料庫并且用戶尚未在應用程式級別設定值時,該值顯然在資料庫中也設定為 NAN,但不是 NULL,這將是首選。
有人知道通過firedac在(Microsoft Access或可能任何其他)資料庫中將雙/數字欄位設定為NULL的可行方法嗎?
非常感謝您的幫助!
我目前正在使用的更新和插入的簡化代碼示例
更新:
dbMain.ExecSQL('update MyTable set ' 'myNumericField = :P1 ' 'where myIDField = :P2', [myDataObject.myDoubleValue, myDataObject.myId]);
插入:
dbMain.ExecSQL
('insert into MyTable(myIDField, myNumericField) '
'values(:P1, :P2)',
[myDataObject.myId, myDataObject.myDoubleValue]);
uj5u.com熱心網友回復:
嘗試這樣的事情:
var
varValue: Variant;
if IsNan(myDataObject.myDoubleValue) then
varValue := Null
else
varValue := myDataObject.myDoubleValue;
dbMain.ExecSQL('update MyTable set myNumericField = :P1 where myIDField = :P2', [varValue, myDataObject.myId]);
或者:
if IsNan(myDataObject.myDoubleValue) then
dbMain.ExecSQL('update MyTable set myNumericField = NULL where myIDField = :P1', [myDataObject.myId])
else
dbMain.ExecSQL('update MyTable set myNumericField = :P1 where myIDField = :P2', [myDataObject.myDoubleValue, myDataObject.myId]);
或者:
var
Params: TFDParams;
Param: TFDParam;
Params := TFDParams.Create;
try
Param := Params.Add('P1', ftFloat);
if IsNan(myDataObject.myDoubleValue) then
begin
Param.Bound := True;
Param.Clear;
end else
Param.Value := myDataObject.myDoubleValue;
Params.Add('P2', myDataObject.myId);
dbMain.ExecSQL('update MyTable set myNumericField = :P1 where myIDField = :P2', Params);
finally
Params.Free;
end;
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/516718.html
標籤:德尔福萤火虫
