作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我通过查询返回的数据进行迭代时遇到问题。我正在使用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;
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;
最佳答案
请尝试这种模式。它必须按预期工作,否则代码中确实存在错误。请注意,一旦您要打开查询,则不要执行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/
我是一名优秀的程序员,十分优秀!