2014-10-28 42 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;