UnicodeString Delete方法(32位Win和iOS / Android之间的结果不同)

时间:2018-10-21 21:37:56

标签: firemonkey c++builder c++builder-tokyo

我正在C ++ Builder(Tokyo 10.2.3)中构建一个简单的FMX应用程序,该应用程序显示来自SQLite数据库的议程数据。我添加了TComboBox,以便用户过滤显示的内容。组合框在运行时添加了以下项目(这些是委员会名称):

Show PSSC
Show TD
Show RRMS

我正在使用组合框向数据库上的SQL查询添加过滤器。数据集具有一个字段committee,每行数据都属于这三个委员会(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位Windows mystring中正是如此。如果我从组合框中选择“显示PSCC”,那么mystring会以“ PSCC”结尾,并且查询效果很好。但是,当我在iOS或Android上运行时,mystring最终会出现“ SSCC”。无论选择什么,首字母都会变成S。我一生都无法找出原因。

我之所以发布,是因为我只是好奇这个“ S”在iOS或Android而不是32位Win上的原始代码中如何显示。

p.s。只需在Firemonkey表单上使用TFDConnectionTFDQueryFDPhysSQLiteDriverLink

1 个答案:

答案 0 :(得分:0)

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

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

mystring = mystring.Delete0(0, 5);

此代码在Windows,iOS和Android上的工作原理相同。感谢雷米(Remy)的一篇旧文章:UnicodeString::Delete Method