• ベストアンサー

レコード件数が0件なら印刷をしない。

おはようございます。 アクセス2000でVBAを書いています。 あるテーブル(テーブルA)を元にレポート(レポートB)を作成しました。テーブルAのレコード件数が0件の時、印刷をさせたくないのですが、うまく書けません。IF文で分岐したいのでよろしくお願いします。 ちなみにテーブルAには顧客ID、カナ氏名、漢字氏名等が入っています。 誰か、助けて~!

noname#12495
noname#12495

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

  • ベストアンサー
  • vantage
  • ベストアンサー率60% (310/514)
回答No.2

一例として・・・ If DCount("顧客ID", "テーブルA") > 0 Then 'レコードがあるときの処理 Else 'レコードがないときの処理 End If あるいは・・・ If DCount("顧客ID", "テーブルA") = 0 Then 'レコードがないときの処理 End If 'あとはそのまま続行 詳しくはヘルプで「DCount」を調べてください。

noname#12495
質問者

お礼

いやぁ~出来ました!ホント、みなさんの知識には頭が下がります。ペコリ! ありがとうございました。

その他の回答 (3)

  • happypoint
  • ベストアンサー率36% (521/1422)
回答No.4

こちらが参考になるのではないでしょうか。 Access Q&A Library

参考URL:
http://www.akj.co.jp/aug/qa/ans0001-0050/1094.html
noname#27115
noname#27115
回答No.3

Aテーブルを対象に作成したレコードセットを myRSとおいた場合、 IF myRS.Recordcount=0 then 印刷しない Else 印刷する End IF でいける気がしますが、、、

noname#4564
noname#4564
回答No.1

  > 件数が0件の時、印刷をさせたくないのです '******** Form ******** Private Sub cmdPrint_Click() On Error Goto ErrLine DoCmd.OpenReport "ReportName", Args...... Exit Sub ErrLine: DoCmd.Hourglass False Select Case Err.Number '2212 プリンタが無効。 '2501 印刷中止。 Case 2212, 2501 DoCmd.CancelEvent Case Else 'その他のエラー。 Beep Call MsgBox(CStr(Err.Number) & ":" _ & vbCrLf & Err.Description _ & vbCrLf & vbCrLf & "エラーが発生しました。", _ vbCritical, "エラー") End If End Sub '******** Report ******** Private Sub Report_NoData(Cancel As Integer) Beep Call MsgBox("印刷対象となるレコードがありません。", vbExclamation) Cancel = True End Sub

関連するQ&A

  • DCountでテーブルのレコード件数を取得するには

    アクセスのテーブル1に何件レコードがあるかをvbaのDCountで取得したいのですが Sub a() MsgBox DCount("テーブル1") End Sub すると、引数は省略できません。(Error 449)になります。 フィールドは件数あり、レコードが入ってたり入ってなかったりするし、主キーはありません。 アクションクエリの削除クエリですべてのレコードを削除したりするので レコード件数が0件なのか、レコードがはいってるかをDCountで取得できればなー と思うのですが、どうすればいいでしょうか?

  • 顧客ごとの情報を1レコードにする

    お助けください。 Win2K、Access2000です。 テーブルAに顧客情報(氏名、生年月日等) テーブルBに購入した商品(1商品1レコード) このAとBにはともに顧客固有のIDがついています。 それをKeyにして顧客の情報と購入商品(複数)を1レコードにしたいのです。 VBAは少しわかります。(でも素人同様です。) レコードセットとかDAOとかでしょうか? 優しくお願いします。

  • 複数のテーブルの レコード件数所得

    sql初心者です。 php sql4.1を使って テーブルA・テーブルBの総レコード件数を所得がうまくできません。 テーブルAの◇◇が○○の含むレコード件数を所得は SELECT count(*) FROM テーブルA WHERE ◇◇ LIKE ○○ でできました。 テーブルA・テーブルBの◇◇が○○の含むレコード件数を所得はどうすればいいのでしょうか? よろしくお願いいたします.

    • ベストアンサー
    • MySQL
  • SQL GROUPで件数の一番多いレコードのみ取る

    SQL GROUPで件数の一番多いレコードのみ取る ORACLE10です。 次のようなテーブルがあります。 USER -----------テーブル名 ID,NAME,DATA----列名 1,A,any 1,A,any 1,B,any 2,C,any 3,D,any このテーブルから、IDをGROUPにして、さらに、一番使用頻度の多いNAMEを取得したいのです。 表示したいのは、IDとNAMEです。 つまり、取得結果例は次のようになります。 取得結果例 ID,NAME----列名 1,A 2,C 3,D SQL文をどのように作れば可能でしょうか? ちなみに、IDやNAMEのマスタテーブルはありません。 自分では、「(select ID, NAME, count(*) from USER group by ID, NAME) COUNT」で、COUNTを内部テーブルにして、グループ内で一番多いcount(*)をmaxで取得してみようかと思ったんですが、そこからアイデアが出ませんでした。

  • Access2000 複数レコードを1つにするには・・・?

    お世話になります。 テーブルAに顧客の予約状況があります。 例えば、顧客ID「001」の人が11月10日と11月12日と11月15日なんて予約があって現在はそれぞれが1レコードとしてDBに格納され3レコード持っています。しかし紙に出力する際には1顧客1行にしたいので、どうにかこの3レコードを1レコードとする方法はないでしょうか? DBレイアウトとしては顧客ID、予約1、予約2、予約3・・・のようにです。最大5つぐらいを想定しています。 VBAはなんとなくわかりますが、DAOなどはほとんどわかりません。 こんな説明でわかってもらえましたでしょうか? 是非、ご教授ください。

  • レコード件数が返らない理由がわからない

    テーブル1にはレコードが5件入ってるのですが Private Sub レコード件数() Dim strSQL As String Dim rs As DAO.Recordset strSQL = "SELECT * FROM テーブル1;" Set rs = CurrentDb.OpenRecordset(strSQL, dbOpenDynaset) Debug.Print rs.RecordCount End Sub これをすると1が返るのですがなぜでしょうか? レコードの数が返ると思ってるのですが違うのでしょうか?

  • Access2002で任意のレコードのみをレポートで印刷したい

    http://oshiete1.goo.ne.jp/qa5272888.html の続きです。 テーブルは下記のとおりです。(計4つ) 1.顧客テーブル(データ投入済み) ・顧客ID(テキスト) ・顧客名(テキスト) ・フリガナ(テキスト) 2.納品書テーブル(データはフォームから自動生成) ・納品書ID(オートナンバー) ・納品日付(日付) ・顧客ID(テキスト) 3.注文テーブル(データ投入済み) ・注文ID(テキスト) ・顧客ID(テキスト) ・納品書ID(テキスト) ・数量(数値) ・摘要(テキスト) ・選択(Yes/No) 4.商品マスター(データ投入済み) ・商品ID(テキスト) ・商品名(テキスト) ・単価(数値) 以上の4つのテーブルでテストDBを作っています。 上述したとおり、フォームで、 1.新規レコードの作製 2.納品日付入力 3.コンボボックス(従業員名、カナ)をコンボボックスで選択 という手順を踏み、納品書番号が自動的に振られるフォームまで作成できました。 これを元に、レポートとして、 ・顧客を選択 ・納品書番号を選択 して、選択したレコードをレポートに表示したい、という質問です。 前の質問で、下記ご回答を得ております。 --------------------------------------------------------------- 1.納品書の一覧 以前作成した「納品書番号」のレコードソースを SELECT 納品書テーブル.納品書ID, 納品書テーブル.納品日付, 納品書テーブル.顧客ID FROM 納品書テーブル ORDER BY 納品書テーブル.納品書ID DESC; に変更して、新しいものが先に見えるようにします 2.フォームのプロパティで「データ」の「追加の許可」を「いいえ」にします。 3.ウィザードが起動したら「フォームの操作」「フォームを開く」と進み、「納品書番号(選択)」を開くようにします。これでいつでも新規納品書を作成できます 4.「納品書番号」フォームのイベントで「アクティブ時」を「[イベント プロシージャ]」にし編集ボタン(…)を押して、以下のようにします Private Sub Form_Activate() Me.Requery End Sub これで新規納品書作成後に「納品書番号(選択)」を閉じると、最新の納品書が表示されます 5.レポート「納品書」の作成 レコードソースは SELECT 納品書テーブル.納品書ID, 納品書テーブル.納品日付, 従業員マスタ.従業員名 FROM 従業員マスタ INNER JOIN 納品書テーブル ON 従業員マスタ.従業員ID = 納品書テーブル.顧客ID WHERE (((納品書テーブル.納品書ID)=[Forms]![納品書番号]![納品書ID])); 6.レポートにフィールドリストから「納品書ID」「従業員名」などを貼り付けます 7.「納品書番号」をデザインモードで開き、ボタンを追加し「納品書」レポートをプレビューで開くようにします。これで任意の納品書が印刷できるようになります 8.実際のレポートは納品書番号に対応するアイテムが並ぶ必要がありますが、これはレコードソース(クエリ)を拡張することでもできるし、親子レポートにすることでも可能です。色々試してください --------------------------------------------------------------- fuuten_no_nekoさん、ありがとうございました。 これまでは「フォーム」に関する質問で、今回は「レポート」に関するものに進んできましたので、新規の質問にしたほうがよいとのアドバイスを受け、この質問を立ち上げます。 なお、「今ここまでできている」という部分は、補足に記述します。 どうぞよろしくお願いします。

  • MS ACCESS 2003 サブレポート機能でメインレコードと関係の

    MS ACCESS 2003 サブレポート機能でメインレコードと関係のないレコードも表示される どなたかアクセスに詳しい方、教えて頂けませんでしょうか。 MS ACCESS 2003 にて、帳票印刷システムを構築しております。 ・請求ヘッダテーブル・・・顧客ID、顧客会社名、顧客氏名、住所 等 ・請求明細テーブル・・・顧客ID、請求明細名、単価、数量、小計 等 となっております。 こちらの状態で、顧客ID別(1人ずつ)に、紙面の上部に請求ヘッダテーブルの情報を羅列し、 紙面の下部に表形式で請求明細テーブルを表示するような形式の「レポート」を作成したいと考えております。 そこで、メインレポート/サブレポート機能を使って、上記を実現したいと思い、以下のような手順でトライしているのですが、サブレポート部分(デザインビューで見た場合の「詳細」部分)に、でメインレポート部分の顧客IDの請求明細データではないレコード(違う顧客IDの請求明細)まで表示されてしまいます。 ■リレーションを作成 ・メニュー「ツール」⇒「リレーションシップ」にて、請求ヘッダ-請求明細をひもづけ。 ・参照整合性にチェック。 ・結合の種類は「請求明細の全レコードと請求ヘッダの同じ結合フィールドのレコードだけを含める」。 ■レポートを作成 ・レポート⇒新規作成⇒レポートウィザードでレポートを作成。請求ヘッダのみの情報で作成。 ・デザインビューの詳細部分にて、サブレポートを呼び出し。請求明細テーブルを選択し、顧客ID、請求明細名、単価、数量、小計 等を選択。 上記のようにすると、顧客IDとは関連なく(正しい詳細データもそうでないデータも合わせて)10件の請求明細データが表示されます。 また顧客ID=1の場合も、次のページの顧客ID=2の場合もすべて同じ10件の明細データが現れます。 インプレスのアクセス本を参照しながら作業しているのですが、詳しくない分非常に苦労しております。 どなたか、なにとぞよろしくお願いいたします。

  • SQLiteで最も古いレコードのみの削除

    AndoroidでDBを使うのですが、考える動作のSQL文が作成できません。 テーブルTESTは以下のカラムを持ちます  ・ID - primary key not null  ・VALUE - not null テーブルTESTは最大で10件のレコードを保持します、11件目のレコードが発生したら 最も古い1件目のレコードを削除してから、11件目のデータを新しい10件目のデータとして テーブルに保存します。 そのために「最も古いレコード1件のみを削除する」というSQLを作成したいのですが、 考えたSQL文が正しくないと怒られてしまいます。 delete from TEST as A, (select * from TEST LIMIT 1)as B where A.ID=B.ID; この動作を1つのSQL文で行うのは不可能なのでしょうか?

  • 抽出したレコードの件数が0の場合、エラーを表示させたい。

    宜しくお願い致します。 サブフォーム(レコードソースは[Q_データ]) で抽出したデータの件数が0の時、MSGBOXで「該当するデータはありません」と表示させたいのです。 >IF DCOUNT("ID","Q_データ")=0 Then >MSGBOX "該当するデータがありません" 上記を応用していままで表示させていました。 しかし、今回はサブフォームのレコードソースを 場合によって[Q_データ]だったり[Q_データ2]であったり[Q_データ3]であったりと、時と場合によって レコードソースを変更できる仕組にしてしまいました。 どのレコードソースの時にも件数が0件の場合は「該当するデータはありません」と表示させたいのですが どうすればいいでしょうか。 ちなみに全てのクエリは同じテーブルから作られています。

専門家に質問してみよう