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が、もっとエレガントな方法はありますか?

私の実際のコードでは、2 つのOpen()呼び出しは別々の Web リクエストにあります。を呼び出すときにフィールド値を明示的にリセットする方法はありますClose()か?

これを読んで、少し考えてくれてありがとう。

4

0 に答える 0