UnicodeString 删除方法(32 位 Win 和 iOS/Android 的结果不同)
UnicodeString Delete Method (different result between 32-bit Win and iOS/Android)
我正在 C++ Builder (Tokyo 10.2.3) 中构建一个简单的 FMX 应用程序,它显示来自 SQLite 数据库的议程数据。我添加了 TComboBox
让用户过滤显示的内容。该组合框在 运行 时添加了以下项目(这些是委员会名称):
Show PSSC
Show TD
Show RRMS
我正在使用组合框向数据库中的 SQL 查询添加过滤器。数据集有一个字段 committee
,每行数据属于这 3 个委员会(PSSC、TD、RRMS)之一。
下面是我将过滤器添加到查询中的代码。它在 32 位 Windows 上运行良好,但在 iOS 或 Android 上运行不佳。我所做的只是将 "Show "
与 .Delete
修剪为 UnicodeString mystring
.
mystring = Form1->cmbBoxFilters->Selected->Text;
mystring = mystring.Delete(1, 5);
query->SQL->Text = "SELECT * FROM mtgs WHERE weekday = '" + myday + "' AND committee = '" + mystring + "'";
这是正在发生的事情,在 32 位 Windows mystring
中,它应该是这样。如果组合框中的 i select "Show PSCC",则 mystring
最终为 "PSCC",查询效果很好。但是,当我 iOS 或 Android mystring
上 运行 结束时 "SSCC"。 selected 的第一个字母变成了 S。我想不通为什么。
我发帖是因为我很好奇这个 "S" 是如何出现在我在 iOS 或 Android 上的原始代码中的,而不是 32 位 Win。
p.s。只需在我的 Firemonkey 表单上使用 TFDConnection
、TFDQuery
和 FDPhysSQLiteDriverLink
。
因此,看起来编译器有所不同,移动编译器 (iOS/Android) 从 0 开始索引,桌面编译器 (Windows/OSX) 从 1 开始索引。感谢 GSerg 指出这一点.
这是一个针对所有平台明确使用 0 索引的解决方案。唯一的变化是您看到添加到 .Delete
末尾以及括号内的 0
:
mystring = mystring.Delete0(0, 5);
此代码在 Windows、iOS 和 Android 上的效果相同。感谢 Remy 的旧 post:
我正在 C++ Builder (Tokyo 10.2.3) 中构建一个简单的 FMX 应用程序,它显示来自 SQLite 数据库的议程数据。我添加了 TComboBox
让用户过滤显示的内容。该组合框在 运行 时添加了以下项目(这些是委员会名称):
Show PSSC
Show TD
Show RRMS
我正在使用组合框向数据库中的 SQL 查询添加过滤器。数据集有一个字段 committee
,每行数据属于这 3 个委员会(PSSC、TD、RRMS)之一。
下面是我将过滤器添加到查询中的代码。它在 32 位 Windows 上运行良好,但在 iOS 或 Android 上运行不佳。我所做的只是将 "Show "
与 .Delete
修剪为 UnicodeString mystring
.
mystring = Form1->cmbBoxFilters->Selected->Text;
mystring = mystring.Delete(1, 5);
query->SQL->Text = "SELECT * FROM mtgs WHERE weekday = '" + myday + "' AND committee = '" + mystring + "'";
这是正在发生的事情,在 32 位 Windows mystring
中,它应该是这样。如果组合框中的 i select "Show PSCC",则 mystring
最终为 "PSCC",查询效果很好。但是,当我 iOS 或 Android mystring
上 运行 结束时 "SSCC"。 selected 的第一个字母变成了 S。我想不通为什么。
我发帖是因为我很好奇这个 "S" 是如何出现在我在 iOS 或 Android 上的原始代码中的,而不是 32 位 Win。
p.s。只需在我的 Firemonkey 表单上使用 TFDConnection
、TFDQuery
和 FDPhysSQLiteDriverLink
。
因此,看起来编译器有所不同,移动编译器 (iOS/Android) 从 0 开始索引,桌面编译器 (Windows/OSX) 从 1 开始索引。感谢 GSerg 指出这一点.
这是一个针对所有平台明确使用 0 索引的解决方案。唯一的变化是您看到添加到 .Delete
末尾以及括号内的 0
:
mystring = mystring.Delete0(0, 5);
此代码在 Windows、iOS 和 Android 上的效果相同。感谢 Remy 的旧 post: