【问题标题】:SQLite FireDAC trailing spacesSQLite FireDAC 尾随空格
【发布时间】:2014-10-28 15:47:03
【问题描述】:

我正在使用 Delphi XE7 和 FireDAC 来访问 SQLite。

当我将数据放入 TEXT 字段时,任何尾随空格或 #0 字符都会被截断。

我可以在 SQLite 或 FireDAC 中进行更改以使其保留尾随空格吗?

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

【问题讨论】:

  • FormatOptions.StrsTrim 属性设置为 False。
  • P.S.不要与StrsTrim 属性的初始描述相混淆。有一条注释说 “对于 SQLite,此属性适用于所有字符串列,包括 ftMemo、ftWideMemo、ftString、ftWideString、ftFixedChar 和 ftFixedWideChar。” 这只是你的情况。
  • 听起来不错的答案,那为什么要发表评论,而不是在下面的“您的答案”下方?
  • 我已将 FormatOptions.StrsTrim 设置为 False,它修复了一些情况,但不是全部。错过的是那些在字符串末尾带有#0(作为字符)的那些。我使用的是 ShortStrings,因为 C 风格的字符串有自己的问题,字符串中的实际 #0。

标签: sqlite delphi firedac


【解决方案1】:

禁用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;

【讨论】:

    猜你喜欢
    • 2014-04-25
    • 2016-10-21
    • 2015-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-06
    相关资源
    最近更新 更多