• ベストアンサー

Access_VBA_記述方法

AccessVBAの記述方法で悩んでいます。 複数のテーブルを順読みして、レコードの更新/追加/削除のプログラムを作成していますが、順読みなので何も入っていないテーブルのレコードも読みに行ってしまいデバックとして出てしまいます。 EOFやNULLをどうにかして判断条件として記述してみましたが、やはり上手くいきませんでした。 レコードでの判断条件では無く、テーブル内にレコードが存在するかどうかという判断文と条件文の記述方法がありましたら、どうか教えて下さい。 宜しくお願い致します。

  • HCR
  • お礼率87% (14/16)

質問者が選んだベストアンサー

  • ベストアンサー
  • angband
  • ベストアンサー率51% (86/168)
回答No.5

○案1 Dim cnt cnt = Dcount("*", "[テーブル名]") If cnt > 0 Then ' レコードがあるテーブルになにかする End If とDcount関数を使えばどうでしょうか。 ○案2 また複数のテーブルが同じフィールドを含むならば ユニオンクエリで1つのテーブルにしてから扱うことも 簡単だと思います。

HCR
質問者

お礼

誠に有難うございました。 Dcount関数を使うのですねっ!! 実際にやりまして現象を確認したところ出来ました。 有難うございました。

その他の回答 (5)

  • keikan
  • ベストアンサー率42% (75/176)
回答No.6

On error goto nanigasi: で、例外処理したらいかが?^^

HCR
質問者

お礼

早急な対応ありがとうございました。

noname#182251
noname#182251
回答No.4

AccessVBAは長いこと使っていないので全部忘れました(^^; で、「判断文」ではありませんが、そもそも 「何も入っていないテーブル」を読みに行かないようにすれば良いと考えます。つまりクエリーで「当該箇所にデータがある」ものだけをより分けて、それに対して順にやりたい処理をして行けば。

  • Gin_F
  • ベストアンサー率63% (286/453)
回答No.3

If rs.EOF Then Exit Sub とかでは?

HCR
質問者

お礼

Subプロシージャ内でExitSubを使う?・・・のかちょっと調べてみます。参考にさせて頂きます。 ありがとうございます。

  • O_cyan
  • ベストアンサー率59% (745/1260)
回答No.2

レコード件数を取得するには 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より大きければ処理する。 これでどうでしょう。

HCR
質問者

お礼

とても適切な説明で初心者の私でも分かる内容でした。 補足でも記載させて頂きましたが、補足のアドバイスがあればお願いします。 ありがとうございます。

HCR
質問者

補足

ご親切な回答感謝致します。 実際に試しに記述してみましたが、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プロシージャがいけないのでしょうか? 手が空いている時にでも構いませんので、上記の件で補足のアドバイスがあれば宜しくお願い致します。

回答No.1

こんにちは。 SELECT COUNT(*) を使えばいいのでは? 全体がわからないので、こんな事しか書けなくてすみません・・・。 (^^ゞ

HCR
質問者

お礼

早急な対応ありがとうございます。 COUNT関数を使う事が分かりましたので、参考にさせて頂きます。

関連するQ&A

  • AccessVBAでレコードの索引方法は?

    AccessVBAでテーブル上のレコードを索引する方法を教えて下さい。 テーブルの項目の中に会社コード(文字形式)と個人番号(長整数型)が登録してあります。(他にも項目が登録されています。) 選択クエリで個人番号、会社コードの順に指定してあります。   この2つの項目をキーにして検索したいのですが、その具体的な方法を 教えていただけますでしょうか?。(具体的な記述) よろしくお願いします。

  • access・複数のテーブル・重複除外したデータ

    accessで複数のテーブルで重複しないレコードだけを抽出するSQL文を知りたいです。 フィールドは多数あり、「フィールドの内容が全て一致するレコード」以外のレコードを 重複しないレコードとして抽出したいと思っています。 テーブルは3つ以上ありますが、2つのテーブルで実行するSQL文でかまいません。

  • VBAによるレコードの追加について。

    同じテーブル構造をもつ2つのテーブルあり、Aという名前のテーブルにBという名前のテーブルの1レコードを1度に追加するには、ACCESS2003のVBAでは、どのように記述すればよいのでしょうか?イメージは、下記のとおりです。 Set TBL = DB.OpenRecordset("A", DB_OPEN_TABLE) Set TBL2 = DB.OpenRecordset("B", DB_OPEN_TABLE) Do Until TBL2.EOF TBL.AddNew TBL = TBL2 ‘← ココの記述が分かりません。 TBL2.MoveNext TBL.Update Loop

  • 複数レコードのテーブルであるレコードだけ増やしたい

    お世話になります。 複数レコードがあるテーブルにて、あるレコードだけカウントアップする為のSQL文はどのように記述すれば良いでしょうか? 要件: テーブル名'名簿'の No, 名前, 更新者, 備考に 01, 芥川龍之介, ほげ太, NULLを入力し 備考は書き込みさせるためとりあえずNULLを代入しておき 名前と更新者は同じで、Noの部分だけを01~10までカウントアップさせたい 何卒、ご教授のほど、宜しくお願いします。

  • ACCESS VBAでSeekメソッドの処理記述

    ACCESSでテーブルにIndexを定義しています。 (重複ありで) そのIndexに入っているデータAというのが3件ほどあり、それを全て検索して、処理したいのです。 そのためにseekを使って、最初のデータを検索し、次々のデータに行きたいのですが、その場合、対象データの1件目を検索して、次のレコードに移動するには、どのように記述すればよいのでしょうか。 本などには、 If rs.EOF thenのような書き方ばかりで1件の処理の場合のみのサンプルしかないのです。 よろしくお願いします。

  • 同じ値が存在しないレコードの抽出方法について

    下記のテーブルの中で、 b_tableテーブルのidフィールドの値が1つしかない(重複していない)フィールドを抽出したいと思います(この場合ですが、3002と3004を抽出したいです)。 その際、抽出条件を下記の【※※※ここに記述を追加※※※】に記述することで実現したいと思ったのですが、その場合どのようなsql文を書けば良いか分かりませんでした。 その為、このような場合、どのようなsql文を書けば良いかご存知の方がいらっしゃいましたら、ご教示の程、よろしくお願いします。 なお、【※※※ここに記述を追加※※※】に記述を追加したい理由ですが、既存のSQL文にこの条件を追加したいのですが、WHERE以前は別の部分に記述されており、その部分が変更できない為です。 なお、下記のWHERE以前の記述はあくまでサンプルであり、重複していないフィールドを抽出するSQL文と直接関係のない記述でしたら、変更していただいても大丈夫かもしれません(この点曖昧で申し訳ございません。移植元の記述ではテーブルを連結しているように見受けられたため、連結の仕方が多少変わる分には問題ないのかなと思っています。この点については実際にソースをご提示いただければ、それを元に移植させていただいた上で、ご回答差し上げたいと思います)。 ■SQL文 SELECT a.id FROM `a_table` AS a LEFT JOIN `b_table` AS b ON a.id = b.id WHERE 【※※※ここに記述を追加※※※】 ■a_tableテーブル CREATE TABLE IF NOT EXISTS `a_table` ( `auto_id` int(3) NOT NULL, `id` varchar(4) NOT NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8; INSERT INTO `a_table` (`auto_id`, `id`) VALUES (101, '3001'), (102, '3002'), (103, '3003'), (104, '3004'); ■b_tableテーブル CREATE TABLE IF NOT EXISTS `b_table` ( `auto_id` int(3) NOT NULL, `id` varchar(4) NOT NULL, `no` varchar(1) NOT NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8; INSERT INTO `b_table` (`auto_id`, `id`, `no`) VALUES (101, '3001', '1'), (102, '3001', '2'), (103, '3001', '3'), (104, '3002', '2'), (105, '3003', '1'), (106, '3003', '2'), (107, '3004', '1'); 以上、よろしくお願いします。

    • ベストアンサー
    • MySQL
  • ACCESS初心者です。

    色んな条件のクエリ(複数)を組み合わせてデータを抽出し、最終的にひとつのエクセルファイルを作成したいです。 エクセルファイルを作成するときはVBで記載したいと考えていますが、 できれば複数条件のクエリを一つのテーブルに蓄積して、そのテーブルからエクセルを作成しようと思っています。 ただし、複数のクエリは全てが同一のレイアウトではないかもしれません。 何か効率の良い方法をアドバイス下さい。

  • accessVBAでの入力データのチェック方法

    AccessVBAで、 テキストBOXの入力したときチェックをしたいのですが 例えばBOX名を金額として、この項目にテーブルの項目(整数型、規定値:0、入力規則 >0 興要求 はい)を設定して Private Sub 金額_Exit(Cancel As Integer) If 金額 = 0 Then if 金額 = null then if 金額 is null then で 空打ち(数値なしでEnterキーを押下)したとき上記IF文が反応しません フォームを編集モードで開いて入力するとき、レコードの終わりを過と追加モードに切り替わりますが、追加モードのとき項目に初期値を設定するため編集モードチェック出来ますか

  • SQLServer2000:SQL文の記述について

    いつもお世話になっております。 SQLServer2000でSQL文で素朴な疑問なのですが、 質問が3点ございます。 1:列の追加 ALTER TABLE 文で、フィールドを追加する際に、 "]"(かぎ括弧閉じ) がフィールド名に存在する場合、どのように記述すればよいのでしょうか。 2:レコードの追加 INSERT 文で追加するレコードの文字列中に "'" (シングルクオテーション) が値に存在する場合、どのように記述すればよいのでしょうか。 3:列の削除 ALTER TABLE でフィールドを削除する際に、 "#"(シャープ) がフィールド名の先頭に存在する場合、どのように記述すればよいのでしょうか。 ご存知の方がいらっしゃいましたら、 ご回答をよろしくお願いいたします。

  • Access初心者です

    Access2003を使って、あるアプリケーションを作ることになりました。 A  画面上部のキー項目を入力する B  Aのキーを元にテーブルに登録されたデータを検索し、  全データを画面中部に0~複数行スクロール表示させる  その下に、検索されたデータの数値合計欄を設け表示する C  画面下部には、データ追加欄があり入力後追加ボタンを押すと、  テーブルに追加され、画面中部に表示のデータが  自動的に表示更新される D  CTRLキーによって、取消し(初期画面)、印刷等の機能がある というものです。 初心者なので、多分一番基本的なAとBの作り方がわかりません。 Aのキー項目を入力して、入力ボタンを押すと、テーブルからデータを読み出して、真ん中の一覧が表示されます。 ヘッダー項目を入力し、テーブルを検索し、一致するデータ全レコードを同じ画面の中部に表示する。 画面サイズ等は変更無く、画面に収まらないような場合は、 スクロールさせたい。 数値の合計項目も合計値を表示させたい。 このあたり全般、どうやったら、できるのかよくわかりません。 シングルレコードの画面は、よく解ったのですが、一度に複数レコードを処理させたりするのは初めてで、多分初心者過ぎて、わからなくなっているのは解るのですが、時間がなく、とりあえず形だけでも急いで作る必要があります。 どなたか、わかりやすい作り方の説明をしてあるHPでもあれば、教えていただけませんでしょうか? いろいろ書きましたが、初心者向けに、解りやすい説明があるサイトなどを教えていただければ助かります。 宜しくお願いします。