2014-10-28 81 views
3

我正在使用Delphi XE7和FireDAC來訪問SQLite。SQLite FireDAC尾隨空格

當我將數據放入TEXT字段時,任何尾隨空格或#0字符都會被截斷。

有沒有什麼我可以改變SQLite或FireDAC讓它保留尾隨的空白?

// The trailing spaces after Command don't come back from SQLite. 
fFireDACQuery.ParamByName(kSQLFieldScriptCommands).AsString := 'Command   '; 
+1

設置['FormatOptions.StrsTrim'(http://docwiki.embarcadero.com/Libraries/XE7/en/FireDAC。 Stan.Option.TFDFormatOptions.StrsTrim)屬性設置爲False。 – TLama 2014-10-28 16:04:23

+0

P.S.不要從StrsTrim屬性的初始描述中混淆。有一個說明*「對於SQLite,此屬性適用於所有字符串列,包括ftMemo,ftWideMemo,ftString,ftWideString,ftFixedChar和ftFixedWideChar。」*這就是您的情況。 – TLama 2014-10-29 09:38:49

+0

聽起來像一個很好的答案,那麼爲什麼把它作爲評論發佈,而不是在下面的「你的答案」下? – 2014-10-29 19:10:46

回答

2

禁用StrsTrim屬性。該屬性被描述爲:從尾隨字符串值空間和從二進制值零個 字節

TFDFormatOptions.StrsTrim

控制去除。

而且它似乎是要存儲二進制數據而不是文本。如果這是正確的,最好定義您的字段數據類型,例如作爲BINARY[255]爲255字節的固定長度二進制字符串(255是您使用的最大長度ShortString)。這樣的現場

參數值,那麼你將獲得這種方式:

var 
    Data: RawByteString; 
begin 
    ReadByteDataSomehow(Data); 

    FDQuery.FormatOptions.StrsTrim := False; 
    FDQuery.SQL.Text := 'INSERT INTO MyTable (MyBinaryField) VALUES (:MyBinaryData)'; 
    FDQuery.ParamByName('MyBinaryData').AsByteStr := Data; 
    FDQuery.ExecSQL; 
end;