排序后的DBGrid列地址

时间:2018-10-04 21:34:30

标签: c++ sorting dbgrid

我正在编写一个使用C ++ Berlin检查通用SQLite数据库的程序。我有一个OnTitleClick事件,该事件在对字段进行升序或降序排序之间进行切换。我的问题是,当我单击“ ClassName”列标题时,该列的地址会更改,这会导致程序出错。单击任何其他列按预期工作。我用sqlite3.exe查看了“ ClassName”字段中的数据,一切看起来都很好。

为帮助进行故障排除,我添加了Edit1 TEdit控件来监视“列”地址中的更改。

我编写了另一个小型测试程序来解决问题,但问题仍然存在。

注意:数据库和其他数据库中的其他SQLite表中也会出现此问题。出现问题的字段始终会出现问题。没有问题的字段永远不会出现问题,因此它不是随机的。该问题似乎也与数据类型无关。某些具有整数类型的字段和某些具有varchar类型的字段会出现问题,但并非所有具有这些字段的字段都会出现问题。

以下控件为主要形式:     数据库网格     TEdit

以下控件位于DataSource文件中:     FDPhysSQLiteDriverLink1     FD连接     FD查询     数据源

除了设置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整数主键非空,ClassName Varchar(255)非空,DayOfWeek整数CHECK(DayOfWeek在0和6之间)非空,SGActive布尔默认值1非空,ModifiedBy Varchar(25),ModDate double)

当在此表中单击“ MemberInfoID”列标题时,为什么对数据库进行排序的代码会覆盖“列”地址?

我知道列地址应该在第一次单击列标题时更改,但在以后的单击中不会更改。

关于... 伯爵·斯泰利

0 个答案:

没有答案