Delphi 使用列标题对DBGrid排序

Delphi 使用列标题对DBGrid排序,delphi,ms-access,Delphi,Ms Access,我正在使用Access数据库和Delphi7。我已经创建了一个DBGrid,并使用Adoquery来显示数据库,其中的列包含学生ID、名字和姓氏标题,以及数据库中确切的字段名格式。我有以下代码按升序对列标题进行排序 procedure TReportsForm.DBGrid2DblClick(Sender: TObject); var str1: String; begin str1 := DBGrid2.SelectedField.FieldName; ADOQuery1.Sort:= str

我正在使用Access数据库和Delphi7。我已经创建了一个DBGrid,并使用Adoquery来显示数据库,其中的列包含学生ID、名字和姓氏标题,以及数据库中确切的字段名格式。我有以下代码按升序对列标题进行排序

procedure TReportsForm.DBGrid2DblClick(Sender: TObject);
var
str1: String;
begin
str1 := DBGrid2.SelectedField.FieldName;
ADOQuery1.Sort:= str1+' ASC';
end;
当我按下firstname和lastname列标题时,排序工作正常。但是当我按下学生ID时,结果 我收到了错误信息

EOleException:参数类型错误、超出可接受范围或相互冲突


这个问题与数字和字符字段有关吗?如何解决这个问题?

我想我知道这个问题。 您可以看到,函数ADOQuery.Sort可以应用于“WideString”数据类型。在数据库中,检查学生ID的数据类型。如果将其设置为“number”,则显然无法对其应用ADOQuery.Sort,因为它是不兼容的数据类型。尝试将数据库中的student ID字段更改为“Text”数据类型,然后重试,看看是否有效。 还有一个快速提示:在数据库中,如果学生ID设置为“number”,那么将其更改为文本可能是值得的。因为它是主键(im假设),因此不会对学生ID执行任何计算,因此不需要将其存储为数字。
希望这有帮助!;)

您从未接受过上述答案,因此我认为这没有帮助。我想知道问题是否与字段名中的空格有关(例如“学生ID”)。如果是这样,解决方案是稍微更改代码:

ADOQuery1.Sort:= '[' + str1 + '] ASC';

干杯

此字段的数据类型是什么?数据类型为学生ID为数字,其余为文本。是否存在冲突的可能性以及如何避免冲突?您是否确认
str1
包含ID的正确字段名?@kobik如果它直接从数据网格读取字段名,我希望它是正确的字段名。我想有些事情是我们在这里看不到的,例如,
OnClick
事件或其他事件。