- ベストアンサー
Access_VBA_記述方法
AccessVBAの記述方法で悩んでいます。 複数のテーブルを順読みして、レコードの更新/追加/削除のプログラムを作成していますが、順読みなので何も入っていないテーブルのレコードも読みに行ってしまいデバックとして出てしまいます。 EOFやNULLをどうにかして判断条件として記述してみましたが、やはり上手くいきませんでした。 レコードでの判断条件では無く、テーブル内にレコードが存在するかどうかという判断文と条件文の記述方法がありましたら、どうか教えて下さい。 宜しくお願い致します。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
○案1 Dim cnt cnt = Dcount("*", "[テーブル名]") If cnt > 0 Then ' レコードがあるテーブルになにかする End If とDcount関数を使えばどうでしょうか。 ○案2 また複数のテーブルが同じフィールドを含むならば ユニオンクエリで1つのテーブルにしてから扱うことも 簡単だと思います。
その他の回答 (5)
- keikan
- ベストアンサー率42% (75/176)
On error goto nanigasi: で、例外処理したらいかが?^^
お礼
早急な対応ありがとうございました。
AccessVBAは長いこと使っていないので全部忘れました(^^; で、「判断文」ではありませんが、そもそも 「何も入っていないテーブル」を読みに行かないようにすれば良いと考えます。つまりクエリーで「当該箇所にデータがある」ものだけをより分けて、それに対して順にやりたい処理をして行けば。
- Gin_F
- ベストアンサー率63% (286/453)
If rs.EOF Then Exit Sub とかでは?
お礼
Subプロシージャ内でExitSubを使う?・・・のかちょっと調べてみます。参考にさせて頂きます。 ありがとうございます。
- O_cyan
- ベストアンサー率59% (745/1260)
レコード件数を取得するには SQLステートメントを定義してカレントデータベースを変数に代入する。SQLステートメントを実行してレコードセットを開く。 Dim myDB As Database Dim myRS As DAO.Recordset Dim mySQL1 As String mySQL1 = "SELECT COUNT(*) FROM テーブル名 ;" Set myDB = CurrentDb Set myRS = myDB.OpenRecordset(mySQL1, dbOpenDynaset) これでmyRSにレコード件数がカウントされるのでmyRSを使ってレコード件数が0なら処理しない。1より大きければ処理する。 これでどうでしょう。
お礼
とても適切な説明で初心者の私でも分かる内容でした。 補足でも記載させて頂きましたが、補足のアドバイスがあればお願いします。 ありがとうございます。
補足
ご親切な回答感謝致します。 実際に試しに記述してみましたが、myRSの型が一致しないとデバックが出てしまいました。 Msgboxでレコード件数を確認しようと考えていたのですが、それもエラーとして出力されます。 `>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Function *****() Dim myDB As Database Dim myRS As DAO.Recordset Dim mySQL1 As String mySQL1 = "SELECT COUNT(*) FROM 1000;" Set myDB = CurrentDb Set myRS = CurrentDb.OpenRecordset(mySQL1, dbOpenDynaset) MsgBox myRS End Function `>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> FUNCTIONプロシージャがいけないのでしょうか? 手が空いている時にでも構いませんので、上記の件で補足のアドバイスがあれば宜しくお願い致します。
- taka451213
- ベストアンサー率47% (436/922)
こんにちは。 SELECT COUNT(*) を使えばいいのでは? 全体がわからないので、こんな事しか書けなくてすみません・・・。 (^^ゞ
お礼
早急な対応ありがとうございます。 COUNT関数を使う事が分かりましたので、参考にさせて頂きます。
お礼
誠に有難うございました。 Dcount関数を使うのですねっ!! 実際にやりまして現象を確認したところ出来ました。 有難うございました。