いつもお世話になっています。
TADOQueryを使用して下記のようにデータ検索をしようとしていますが、取得対象のレコードがない場合に、最後のCloseで「BOFとEOFのいずれかがTureになっているか、または現在のレコードが削除されています。要求された操作には、現在のレコードが必要です。」とのメッセージのエラーがでます。
プロパティの設定などでエラーを回避する方法はないでしょうか?
with ADOQuery1 do
begin
Close;
SQL.Clear;
SQL.Add('Select * ');
SQL.Add(' From SSS');
SQL.Add(' Where AA = ''Z''');
try
Open;
First;
except
on E:Exception do
begin
end;
end;
Close; //←ここでエラー
end;
Firstでエラーになっているとか・・・
Open;
if not EOF then begin
end;
途中で送ってしまいました。。。
Firstでエラーになっているとか・・・
Open;
if not EOF then begin
First;
end;
Close;
では、どうでしょう?
違ってたらすみません・・・
ご回答ありがとうございます。
ただ残念ながら
if not EOF then
First;
を入れてみてもダメでした。
どうもデータが1件も取得できなかった場合か、EOF=True の場合にエラーが出ているようです。
そのため、データが取得できた場合でも、
while not EOF do
begin
〜
end;
で取得データを全てなめた後でCloseの場合もエラーになります。
原因がつかめません・・・。
あ、ちなみに使用しているDelphiのバージョンは5です。
私は下記のようにしていますが、
ゼロ件の場合でも特に問題は発生していません。
WinXP + D7 + Jet4.0/mdb
WinVISTA + D2007 + Jet4.0/mdb
どちらでも問題ないようです。
var
Wstr: String;
begin
Wstr := '';
Wstr := Wstr + 'SELECT *';
Wstr := Wstr + ' FROM SSS';
Wstr := Wstr + ' WHERE AA = ''Z''');
ListBox1.Clear;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add(Wstr);
ADOQuery1.Open;
if (ADOQuery1.Eof) then
else
begin
ADOQuery1.First;
while not ADOQuery1.Eof do
begin
ListBox1.Items.Add(ADOQuery1.FieldByName('AA').AsString);
ADOQuery1.Next;
end;
end;
ADOQuery1.Close;
Label1.Caption := '(' + IntToStr(ListBox1.Count) + '件)';
end;
CODE GEARの登録ユーザー向けダウンロードから、Delphi 5 ADOExpress Update Packをダウンロードして実行してください。
> このアップデートによって解決される問題
>
> MDAC 2.6 との互換性
> -------------------
>
> このアップデートにより、MDAC 2.6 上で実行される
> ADOExpress アプリケーションの問題が修正されます。
> 具体的には、空のデータセットを閉じる際に「EOF と
> BOF の両方が True であるか、現在のレコードが削除
> されました。要求された操作は現在のレコードが必要
> です」というエラーが発生するというものです。
> 同様のエラーは、編集操作のキャンセル時にも発生
> します。アップデートが完了したら、アプリケーション
> を再構築してください。
Delphi側のバグだったのですね・・・。
上記のものをアップデートしたら正常に動きました。
助かりました。ありがとうございました。
ツイート | ![]() |