0

我正在 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 "用..DeleteUnicodeString mystring

mystring = Form1->cmbBoxFilters->Selected->Text;
mystring = mystring.Delete(1, 5);
query->SQL->Text = "SELECT * FROM mtgs WHERE weekday = '" + myday + "' AND committee = '" + mystring + "'";

这就是正在发生的事情,在 32 位 Windowsmystring中正是它应该的样子。如果我从组合框中选择“显示 PSCC”,则以mystring“PSCC”结束,查询效果很好。但是,当我在 iOS 或 Android 上运行时,mystring会出现“SSCC”。所选择的任何内容的第一个字母都变成了 S。我一生都无法弄清楚为什么。

我发帖是因为我只是好奇这个“S”是如何出现在我在 iOS 或 Android 上的原始代码中而不是 32 位 Win 上的。

ps 只需在我的 Firemonkey 表单上使用TFDConnectionTFDQuery和。FDPhysSQLiteDriverLink

4

1 回答 1

0

因此,编译器似乎有所不同,移动编译器(iOS/Android)从 0 开始索引,而桌面编译器(Windows/OSX)从 1 开始索引。感谢 GSerg 指出这一点。

这是一个为所有平台明确使用 0 索引的解决方案。唯一的变化是0您看到添加到括号的末尾.Delete和括号内:

mystring = mystring.Delete0(0, 5);

此代码在 Windows、iOS 和 Android 上的工作方式相同。感谢 Remy 的旧帖子:UnicodeString::Delete Method

于 2018-10-21T22:00:14.947 回答