Я пишу программу, которая проверяет универсальные базы данных SQLite, используя C ++ Berlin.У меня есть событие OnTitleClick, которое переключается между сортировкой поля по возрастанию или по убыванию.Моя проблема заключается в том, что, когда я нажимаю на заголовок столбца «ClassName», адрес столбца изменяется, что приводит к ошибкам в программе.Нажатие на любой другой столбец работает как ожидалось.Я посмотрел на данные в поле «ClassName» с sqlite3.exe, и все выглядит хорошо.
Чтобы помочь в устранении неполадок, я добавил элемент управления Edit1 TEdit, чтобы наблюдать изменения в адресе «Столбца».
Я написал еще одну небольшую тестовую программу для устранения проблемы, и проблема по-прежнему возникает.
Примечание: проблема также возникает в других таблицах SQLite в базе данных и в других базах данных.Поля, которые демонстрируют проблему, всегда демонстрируют проблему.Поля, которые не отображают проблему, никогда не отображают проблему, поэтому она не случайна.Проблема также, кажется, не зависит от типа данных.Некоторые поля с целочисленными типами и некоторые поля с типами varchar представляют проблему, но не все поля с этими полями представляют проблему.
Следующие элементы управления находятся в основной форме: DBGrid TEdit
в файле DataSource находятся следующие элементы управления: FDPhysSQLiteDriverLink1 FDConnection FDQuery DataSource
Кроме установки драйвера и базы данных FDConnection, добавления SQL-кода в FDQuery и связывания DBGrid, DataSource и DataSet, все остальные свойства являются значениями по умолчаниюзначения.
Этот код ниже - весь код, который я написал.Остальное генерируется C ++ Berlin.
void __fastcall TForm2::DBGridDataTitleClick(TColumn *Column) {
Edit1->Text = int(Column);
AnsiString ColumnFieldName = Column->FieldName;
if ((ColumnToSort != NULL) && (ColumnToSort == Column))
SortAsc = !SortAsc;
else
SortAsc = true;
UnicodeString SQLString = "SELECT * From SSClass";
SQLString += " ORDER BY ";
SQLString += ColumnFieldName;
if (!SortAsc)
SQLString += " DESC";
/*
if I return here, the column address does not get overwritten.
If I comment the 'return' line out, the 'ClassName' column address is
overwritten in the following code:
*/
return;
DataModule3->FDQueryData->Close();
DataModule3->FDQueryData->SQL->Text = SQLString;
DataModule3->FDQueryData->Open();
ColumnToSort = Column;
}
Вот определения полей: CREATE TABLE SSClass (SSClassID Integer PRIMARY KEY NOT NULL, ClassName Varchar (255) NOT NULL, DayOfWeek Integer CHECK (DayOfWeek BETWEEN 0 AND6) NOT NULL, SGActive Boolean DEFAULT 1 NOT NULL, ModifiedBy Varchar (25), ModDate double)
Почему код для сортировки базы данных перезаписывает адрес «Столбец» при нажатии на заголовок столбца «MemberInfoID»в этой таблице?
Я знаю, что адрес столбца должен изменяться при первом нажатии на заголовок столбца, но не при последующих щелчках.
С уважением ... Earl Staley