我正在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 "
修剪.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
中正是如此。如果我从组合框中选择“显示PSCC”,那么mystring
会以“ PSCC”结尾,并且查询效果很好。但是,当我在iOS或Android上运行时,mystring
最终会出现“ SSCC”。无论选择什么,首字母都会变成S。我一生都无法找出原因。
我之所以发布,是因为我只是好奇这个“ S”在iOS或Android而不是32位Win上的原始代码中如何显示。
p.s。只需在Firemonkey表单上使用TFDConnection
,TFDQuery
和FDPhysSQLiteDriverLink
。
答案 0 :(得分:0)
因此,看起来在编译器中有所不同,移动编译器(iOS / Android)的索引从0开始,而桌面编译器(Windows / OSX)的索引从1开始。感谢GSerg指出了这一点。
这里是一个明确为所有平台使用0索引的解决方案。唯一的更改是您看到的0
添加到.Delete
的末尾以及括号内:
mystring = mystring.Delete0(0, 5);
此代码在Windows,iOS和Android上的工作原理相同。感谢雷米(Remy)的一篇旧文章:UnicodeString::Delete Method