web-dev-qa-db-ja.com

実行時エラー3021-現在のレコードがありません

クエリの結果をテキストボックスにリンクしたいのですが、次のエラーが発生します。コードは次のとおりです。

Dim rst As DAO.Recordset
Set rst = CurrentDb.OpenRecordset("SELECT XValue, YValue,Wert FROM tb_DCM_Daten WHERE (FzgID=" & Forms!frm_fahrzeug!ID & " AND Name='" & List2.Value & "')")
Text10.Text = rst!XValue //error in this line

それはc.a20レコードを返す必要があります

なぜこのエラーが発生し、どうすれば解決できますか?

4
Kaja

エラーの考えられる理由の1つは、NameがAccessの予約語であるため、次を使用する必要があることです。

... & " AND [Name]='" & ...

rst.EOFを使用する前に、rst!XValueをテストすることもできます。つまり、クエリが少なくとも1つの行を返しているかどうかを確認するには、コードを追加します。

If rst.EOF Then
    MsgBox "The Recordset is empty."
End If

.OpenRecordset呼び出しの直後。 Recordset isが空の場合は、上記のコメントで@GregHNZが説明しているように、SQLステートメントを確認する必要があります。

8
Gord Thompson

これを引き起こす可能性のあるもう1つの追加点は、「予約語」フィールドを持つ結果セットのセットを返すことです。次に例を示します。

「Customers」テーブルのフィールド名は次のようになります。

Custnum  | Date | Custname

Dateフィールドはほとんどのデータベースの予約語であることがわかっています

したがって、を使用してレコードを取得するとき

SELECT * FROM Customers

これにより「現在のレコードがありません」が返される可能性があるため、代わりにそのテーブルのすべてのフィールドを選択し、次のようにフィールドの選択を最小限に抑えます。

SELECT custnum, custname FROM Customers
1
jovenb

通常、私はこれを行います。 Accessで新しいクエリを作成し、SQLビューに切り替えて、そこにコードを貼り付け、[デザイン] >> [ファイル名を指定して実行]に移動します。

SELECT XValue, YValue,Wert FROM [tb_DCM_Daten] WHERE [FzgID]=12 AND [Name]='ABC';

クエリ構文が正しい場合は結果が表示されます。そうでない場合は、エラーmssgがどこが間違っているかを示します。私は以前よりもはるかに複雑なクエリをデバッグしていましたが、これが私が行った方法です。それでもエラーが発生する場合は、試してみてください

Dim sql as String
sql = "SELECT...."
Set rst = CurrentDb.OpenRecordset(sql)

もう1つの考えられる理由は、テーブル名である可能性があります。あなたのテーブル名は正確には何ですか?テーブルに空白が含まれている場合は、この[DCMDaten]のようにする必要があります。

1
Nexus

上記の解決策を無駄に試した後、別の解決策を見つけました:AccessテーブルのYes/NoフィールドをNullにすることはできません( allenbrowne.com/bug-14 を参照)

私の状況は少し異なりましたが、「現在の記録はありません」しか得られませんでした。 GROUPBYを使用してクエリを実行するとエラーが発生し、[はい/いいえ]フィールドを一時的に削除した後にクエリが機能しました。

しかし、私の[はい/いいえ]フィールドには、驚くべきことにNullが含まれていませんでした。しかし、トラブルシューティングの結果、クエリ結果にNull Yes/No値が実際に入力されている関連エラーが見つかりました。関連するエラーを修正すると、結果のNull Yes/No値が排除され、このエラーが排除されました。

0
wadlooper