gpt4 book ai didi

delphi - While循环从查询遍历记录集的问题

转载 作者:行者123 更新时间:2023-12-03 18:36:28 24 4
gpt4 key购买 nike

我通过查询返回的数据进行迭代时遇到问题。我正在使用Delphi XE2和MS Access作为DBMS。

我尝试遍历记录集的每个播放中都有问题,它将只处理第一个记录,然后跳过其余记录,查询是正确的,因为我使用了RecCount函数,并且它返回正确的记录数,但是While循环不遍历记录,仅循环一次并继续。

以下是部分编码:

DB : TADOQuery; //Where DB is this

//Only retrieves the OrderIDs belonging to that username as the Object searchs for its own information using the orderID
DB.Close;
DB.SQL.Text := 'SELECT OrderID FROM tblOrders WHERE Username = ' + '''' + pUsername + '''';
DB.ExecSQL;
DB.Open;

ShowMessage(IntToStr(DB.RecordCount));
fCount := 0;
while NOT(db.Eof) AND (fCount < 10) do
Begin
Inc(fCount);

fArr[fCount] := TOrder.Create(DB.FieldByName('OrderID').AsInteger); //Creating of the object

DB.Next;
end;

DB.Close;


这就是代码,如您所见,ShowMessage返回记录计数,并返回3(该用户名的正确记录数)。但是循环只重复一次,我不明白为什么。

谢谢


编辑

这段代码似乎阻止了由于某种原因而导致的循环迭代,如果没有它,则循环迭代并返回所有正确的值。在@Alexandre的帮助下

fArr[fCount] := TOrder.Create(DB.FieldByName('OrderID').AsInteger); <-- Error


为了解决这个问题,这就是我的代码现在最终的样子,它可以正常工作。

var
OrderArr : ARRAY[1..10] of Integer;
k, iIndex : Integer;
begin
opendb('DB.mdb');

//Only retrieves the OrderIDs belonging to that username as the Object searchs for its own information using the orderID
DB.Close;
DB.SQL.Text := 'SELECT OrderID FROM tblOrders WHERE Username = ' + '''' + pUsername + '''';
DB.Open;
DB.DisableControls;

fCount := 0;
try
DB.First;
while not DB.EOF do
begin
// do something here with each record
Inc(fCount);

OrderArr[fCount] := DB.FieldByName('OrderID').AsInteger;
DB.Next;
end;
finally
DB.EnableControls;
end;

for k := 1 to fCount do
Begin

fArr[k] := TOrder.Create(OrderArr[k]);

End;


这似乎可行,我不知道为什么它不能在第一个循环中与create一起使用。希望有人可以继续帮助

谢谢

最佳答案

请尝试这种模式。它必须按预期工作,否则代码中确实存在错误。请注意,一旦您要打开查询,则不要执行DB.ExecSQL,而不执行诸如INSERT,DELETE或UPDATE之类的其他语句。
另外,如果您的DataSet(DB)未附加到可视控件,请考虑将循环包含在DisableControls和EnableControls调用中。当您在ADO DataSet中有许多记录时,这会对循环速度产生巨大影响。

DB: TADOQuery;

DB.Close;
DB.SQL.Text := 'SELECT OrderID FROM tblOrders WHERE Username = ' + '''' + pUsername + '''';
DB.Open;
DB.DisableControls;
try
DB.First;
while not DB.EOF do
begin
// do something here with each record
DB.Next;
end;
finally
DB.EnableControls;
end;

关于delphi - While循环从查询遍历记录集的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24808772/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com