【发布时间】:2018-11-13 20:51:27
【问题描述】:
我正在使用 Delphi 2010。我有一个名为 tblUserInfo 的 Microsoft Access 数据库,其中有一个名为 NUMOFREPORTS 的字段,其中包含 11 个数字。我需要搜索数据项并找到最大数量并将其存储在变量中。 我的计划是将数据库中的值分配给一个整数数组,然后对数组进行排序以找到最大值。
这是我目前所拥有的:
i:=1;
while NOT tblUserInfo.eof do
begin
arrNumOfReps[i]:= tblUserInfo['NUMOFREPORTS'];
tblUserInfo.Next;
INC(i);
end;
NumOfReps:= arrNumOfReps[1];
for I := 1 to length(arrNumOfReps) do
begin
if arrNumOfReps[i] > NumOfReps then
begin
NumOfReps:= arrNumOfReps[i];
end;
showmessage(inttostr(NumOfReps));
end;
当我运行该程序时,它不起作用并在NumOfReps:= arrNumOfReps[1]; 处中断,并且我收到一条错误消息,显示“访问冲突”。
有人对我的代码或替代解决方案有任何更正吗? 谢谢
【问题讨论】:
-
您的做法完全错误。您应该对您的表使用 Select Max(
-
正如@MartynA 所指出的,让数据库来完成这项工作。并阅读:stackoverflow.com/questions/17308246/access-violation-in-delphi,看看 Mason Wheeler 的回答。
-
为什么要以最慢的方式执行此操作?只需执行
select max(NUMOFREPORTS) from tblUserInfo即可。接受@MartynA 的建议 -
我感觉
select count(NUMOFREPORTS) from tblUserInfo更适合您。如果您有删除历史记录的空白怎么办?MAX与COUNT无关。
标签: arrays database delphi delphi-2010