代码之家  ›  专栏  ›  技术社区  ›  relayman357

unicodeString删除方法(32位win与iOS/android结果不同)

  •  0
  • relayman357  · 技术社区  · 6 年前

    我在C++Builder(东京102.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位窗口中发生的事情 mystring 完全是应该的。如果我从组合框中选择“显示pscc”,则 字符串 结果是“pscc”,查询效果很好。但是,当我在iOS或Android上运行时 字符串 最后是“SSCC”。无论选择什么,第一个字母都会变成一个S。我不知道为什么。

    我发帖是因为我很好奇这“S”是如何出现在我的iOS或Android原始代码中的,而不是32位的赢家。

    P.S.只是使用 TFDConnection , TFDQuery FDPhysSQLiteDriverLink 在我的消防钥匙表上。

    1 回复  |  直到 6 年前
        1
  •  0
  •   Remy Lebeau    6 年前

    因此,它看起来像是编译器中的一个区别,移动编译器(iOS/android)从0开始索引,桌面编译器(windows/osx)从1开始索引。感谢GSERG指出这一点。

    这里有一个解决方案,它显式地对所有平台使用0索引。唯一的变化是 0 你看到添加到 .Delete 在括号内:

    mystring = mystring.Delete0(0, 5);
    

    此代码在Windows、iOS和Android上的工作方式相同。感谢雷米的一篇老文章: UnicodeString::Delete Method