我在Delphi 2010应用程序中使用uib。我在具有不同参数的多个执行中重用了TUIBQuery组件。当参数值返回空数据集时,对Fields的访问将返回过时数据。
这是我做的伪代码表示/摘录:
// 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()
调用是在单独的Web请求中。当我调用Close()
时,有没有办法明确重置字段值?
感谢您阅读本文并投入其中的一些想法。