Адрес столбца DBGrid после сортировки - PullRequest
0 голосов
/ 05 октября 2018

Я пишу программу, которая проверяет универсальные базы данных 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

...