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()
か?
これを読んで、少し考えてくれてありがとう。