1

我在 Delphi 2010 应用程序中使用 uib。我在具有不同参数的多个执行中重用了一个 TUIBQuery 组件。当参数值返回空数据集时,对字段的访问返回陈旧数据。

这是我所做的伪代码表示/摘录:

// Open query for a set of parameter values 
Q.Params.ByNameAsInteger[aParamName] := 1;
Q.Open;
// For this parameter value data is returned, access the first record:
i := Q.Fields.ByNameAsInteger[aFieldName];
Q.Close;

// Open query for a different set of parameter values 
Q.Params.ByNameAsInteger[aParamName] := 2;
Q.Open;
// For this parameter value there is no data on the DB.
j := Q.Fields.ByNameAsInteger[aFieldName];
Q.Close;

我在最后一个之后得到的Open()

Q.Eof = true
Q.Bof = true
i = j // Some non-null value

所以它确实知道结果集是空的,但仍然返回当按名称访问字段时旧参数值的结果集不为空时查询的 aFieldName 的值。

我宁愿让它NULL (or 0 as I access AsInteger())为该领域提供一个。

我的解决方法是测试Eof=Bof=true,但有更优雅的方法吗?

在我的真实代码中,这两个Open()调用是在单独的网络请求中。有没有办法在我调用时显式重置字段值Close()

感谢您阅读本文并为此付出一些思考。

4

0 回答 0