重新运行具有空结果的查询时返回过时数据

时间:2014-06-27 11:43:53

标签: delphi firebird uib

我在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()时,有没有办法明确重置字段值?

感谢您阅读本文并投入其中的一些想法。

0 个答案:

没有答案