Метод удаления UnicodeString (другой результат между 32-битным Win и iOS/Android)
Я создаю простое приложение FMX в C++ Builder (Токио 10.2.3), которое отображает данные повестки дня из базы данных 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
именно так, как и должно быть. Если я выберу "Показать PSCC" из выпадающего списка, то mystring
заканчивается "PSCC" и запрос отлично работает. Но когда я запускаю на iOS или Android mystring
заканчивается "SSCC". Первая буква того, что выбрано, становится буквой S. Я не могу понять, почему.
Я пишу, потому что мне просто интересно, как эта буква "S" отображается в моем исходном коде на iOS или Android, а не в 32-битном Win.
PS просто использую TFDConnection
, TFDQuery
, а также FDPhysSQLiteDriverLink
в моей форме Firemonkey.
1 ответ
Таким образом, это похоже на разницу в компиляторах: мобильные компиляторы (iOS/Android) индексируют с 0 и настольные компиляторы (Windows/OSX) индексируют с 1. Спасибо GSerg за указание на это.
Вот решение, которое явно использует 0-индексирование для всех платформ. Единственные изменения 0
Вы видите добавлено в конце .Delete
а также в скобках:
mystring = mystring.Delete0(0, 5);
Этот код работает одинаково на Windows, iOS и Android. Спасибо старому посту от Реми: UnicodeString:: Удалить метод