過去ログ

                                Page     321
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
   通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫   
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
 ▼IFを使った抽出のしかた  すみれ 03/6/26(木) 0:29
   ┣Re:IFを使った抽出のしかた  イケガミ 03/6/26(木) 0:46
   ┗Re:IFを使った抽出のしかた  こうちゃん 03/6/26(木) 8:43
      ┗Re:IFを使った抽出のしかた  すみれ 03/6/26(木) 21:28
         ┗Re:IFを使った抽出のしかた  すみれ 03/6/28(土) 1:36
            ┗Re:IFを使った抽出のしかた  こうちゃん 03/6/29(日) 15:39
               ┗Re:IFを使った抽出のしかた  すみれ 03/7/1(火) 11:00
                  ┗フィードバックしましょ  こうちゃん 03/7/1(火) 11:12
                     ┗フィードバックします  すみれ 03/7/2(水) 22:29

 ───────────────────────────────────────
 ■題名 : IFを使った抽出のしかた
 ■名前 : すみれ
 ■日付 : 03/6/26(木) 0:29
 -------------------------------------------------------------------------
   すみません。超初心者です。

「A」というテーブルの中の「B」というフィールドが「あ」「い」とういうものがあったら、「C」のレポートを印刷しなさい。
そうでないものは「D」のレポートを印刷しなさい。

というものなのですが、よろしくお願いします。

 ───────────────────────────────────────  ■題名 : Re:IFを使った抽出のしかた  ■名前 : イケガミ  ■日付 : 03/6/26(木) 0:46  -------------------------------------------------------------------------
   >「A」というテーブルの中の「B」というフィールドが「あ」「い」とういうもの
>があったら、「C」のレポートを印刷しなさい。
>そうでないものは「D」のレポートを印刷しなさい。

仕様がよくわからないのですが・・・

あ い というのは別のレコードなんですか?
それとも、1つのレコードの同じフィールド?

 ───────────────────────────────────────  ■題名 : Re:IFを使った抽出のしかた  ■名前 : こうちゃん <nakajima19@hotmail.com>  ■日付 : 03/6/26(木) 8:43  -------------------------------------------------------------------------
   すみれさん、こんにちは
(イケガミさん、横レスごめんなさい)

>「A」というテーブルの中の「B」というフィールドが「あ」「い」とういうものがあったら、「C」のレポートを印刷しなさい。
>そうでないものは「D」のレポートを印刷しなさい。
>
>というものなのですが、よろしくお願いします。

イケガミさんのおっしゃるように、仕様がはっきりしませんね。
イケガミさんの疑問の他にも、Aテーブルのすべてのレコードに対してCまたはDのレポート印刷するの?あるいはAテーブルのレコードを指定するならその方法は?とかね・・


とりあえずヒントになるかどうか・・

「A」テーブルに連結されたフォームがあって、そのフォームの「コマンド0」ボタンがクリックされたときに「B」フィールドを判定してレポートを出力って場合ならこんな感じ・・

Private Sub コマンド0_Click()
On Error GoTo Err_コマンド0_Click

  Dim stDocName As String

  If Me.B = "あ" Or Me.B = "い" Then
    stDocName = "C"
  Else
    stDocName = "D"
  End If
  
  DoCmd.OpenReport stDocName, acPreview

Exit_コマンド0_Click:
  Exit Sub

Err_コマンド0_Click:
  MsgBox Err.Description
  Resume Exit_コマンド0_Click
  
End Sub

 ───────────────────────────────────────  ■題名 : Re:IFを使った抽出のしかた  ■名前 : すみれ  ■日付 : 03/6/26(木) 21:28  -------------------------------------------------------------------------
   イケガミさん、こうちゃんさん、ありがとうございます。
すみません。仕様の説明がうまくできなくて。

>「A」テーブルに連結されたフォームがあって、そのフォームの「コマンド0」ボタンがクリックされたときに「B」フィールドを判定してレポートを出力って場合ならこんな感じ・・

そうなんです。まさにそのとおりなんです。
テーブルにある複数のレコードのなかで「B」フィールドに
「あ」か「い」があるものだけを「C」というレポートで
それ以外のもは「D」というレポートで全部出したかったのです。
「あ」と「い」が「B」フィールドに両方はいることはなく
どちらか1つ、またはそれ以外の言葉がはいっています。

こうちゃんさんにおしえていただいたやり方で
明日ためしてみます。ありがとうございました。

 ───────────────────────────────────────  ■題名 : Re:IFを使った抽出のしかた  ■名前 : すみれ  ■日付 : 03/6/28(土) 1:36  -------------------------------------------------------------------------
   こうちゃんさん

すみません。やってみたらできませんでした。

If Me.B = "あ" Or Me.B = "い" Then
のところでひっかかってしまいます。
このレポートはAとZとういテーブルから作られたQというクエリをもとに
作られているからでしょうか?
BというフィールドはもともとAというテーブルにあったものです。
説明がきちんとできなくてすみません。

自分で考えてみたのは

Private Sub コマンド_01_Click()
On Error GoTo Err_コマンド_01_Click

  Dim StDocName As String
  
  DoCmd.OpenTable "A", acViewNormal
  DoCmd.ApplyFilter "B='あ' & 'い'"
  If ApplyFilter = True Then
  
  DoCmd.close
  DoCmd.OpenReport "C", acViewPreview

  Else
  DoCmd.close
  DoCmd.OpenReport "D", acViewPreview

  End If
   
Exit_コマンド_01_Click:
  Exit Sub

Err_コマンド_01_Click:
  MsgBox Err.Description
  Resume Exit_コマンド_01_Click
  
End Sub

これだといちいちテーブルが開いて閉じるという形になってしまい
開かずにできないものかと悩んでいます。
レポートはプレビュー状態で見たいので開いて良いのですが。

どうしたらテーブルを開かないでフィルターがかけられますでしょうか?
よろしくお願いいたします。

 ───────────────────────────────────────  ■題名 : Re:IFを使った抽出のしかた  ■名前 : こうちゃん <nakajima19@hotmail.com>  ■日付 : 03/6/29(日) 15:39  -------------------------------------------------------------------------
    すみれさん、こんにちは

>すみません。やってみたらできませんでした。
>
>If Me.B = "あ" Or Me.B = "い" Then
>のところでひっかかってしまいます。
>このレポートはAとZとういテーブルから作られたQというクエリをもとに
>作られているからでしょうか?
>BというフィールドはもともとAというテーブルにあったものです。
>説明がきちんとできなくてすみません。

QというクエリにはAというテーブルのBというフィールドが含まれているんですよね?
であれば、元はどうでもフォームにはBというフィールドがテキストボックス等で含まれているのではないんですか?

ただ、すみれさんのコードを見る限りでは、Aテーブルに'あ' か 'い'が含まれていたらCレポートを、それ以外ならDレポートを印刷・・のように見えますね。
すみれさんのコードをテーブルをひらかずにSQLでレコード確認して、結果によって開くレポートを変えるコードだとこんな感じです・・

ADO使ってますからAccess2000以降限定です。

Private Sub コマンド_01_Click()
On Error GoTo Err_コマンド_01_Click
  Dim StDocName As String
  Dim DataConn As ADODB.Connection
  Dim Rs As ADODB.Recordset
  Dim StrSQL As String

  Set DataConn=Currentproject.Connection
  Set Rs = New ADODB.Recordset
  StrSQL = "SELECT * FROM A WHERE B = 'あ' OR B = 'い'"
  Rs.Open StrSQL,DataConn,adOpenStatic

  If Not Rs.Eof Then
    DoCmd.OpenReport "C", acViewPreview
  Else
    DoCmd.OpenReport "D", acViewPreview
  End If
  Rs.Close
   
Exit_コマンド_01_Click:
  Set Rs=Nothing
  Set DataConn=Nothing
  Exit Sub

Err_コマンド_01_Click:
  MsgBox Err.Description
  Resume Exit_コマンド_01_Click
  
End Sub

私はADOをよく使うのですが、DCount関数を使ってもいけそうですからDCountをHELPで確認してみてください。
多分こんな感じ・・

Private Sub コマンド_01_Click()
On Error GoTo Err_コマンド_01_Click
  Dim StDocName As String
  Dim RecCount As Long

  RecCount = DCount("A", "B", "B = 'あ' OR B = 'い'")

  If RecCount > 0 Then
    DoCmd.OpenReport "C", acViewPreview
  Else
    DoCmd.OpenReport "D", acViewPreview
  End If
   
Exit_コマンド_01_Click:
  Exit Sub

Err_コマンド_01_Click:
  MsgBox Err.Description
  Resume Exit_コマンド_01_Click
  
End Sub

#今日のコードはオンラインです。試験していませんのでエラーが出るかもしれません。あしからず・・

 ───────────────────────────────────────  ■題名 : Re:IFを使った抽出のしかた  ■名前 : すみれ  ■日付 : 03/7/1(火) 11:00  -------------------------------------------------------------------------
   こうちゃんさん

ありがとうございました!
できました。
おかげでやっと安眠できる夜を迎えられそうです。

 ───────────────────────────────────────  ■題名 : フィードバックしましょ  ■名前 : こうちゃん <nakajima19@hotmail.com>  ■日付 : 03/7/1(火) 11:12  -------------------------------------------------------------------------
   すみれさん、こんにちは

>ありがとうございました!
>できました。
>おかげでやっと安眠できる夜を迎えられそうです。

わたしはまだ安眠できません^^;
ほかにこのツリーを見ている方もいるかもしれませんし、私もしりたいのですが、どういう形でできたのか、書き込んでいただけるとフィードバックになるとおもうのですが・・
もし、まだこれをごらんになれるのならお願いします。

 ───────────────────────────────────────  ■題名 : フィードバックします  ■名前 : すみれ  ■日付 : 03/7/2(水) 22:29  -------------------------------------------------------------------------
   >わたしはまだ安眠できません^^;
>ほかにこのツリーを見ている方もいるかもしれませんし、私もしりたいのですが、どういう形でできたのか、書き込んでいただけるとフィードバックになるとおもうのですが・・

すみませんっ。次の課題がだされたものでまた悩んでてお返事が遅くなりました。

今回のDBはまず仕様が
1つのDBに複数のテーブル、クエリー、フォームがあるのですが、
その中の、Aテーブルを基にしたQクエリーをもとにしたフォームがあります。
そのフォームのコマンド01ボタンが押されたとき、
Qクエリーの中のBというフィールドにはいっている内容が
「あ」「い」なら「C」というレポートを出したい。
それ以外なら「D」というレポートを出したい。
Aテーブルには複数のレコードが入っています。

で、やり方は、こうちゃんさんが教えてくださった
「テーブルをひらかずにSQLでレコードを確認して、結果によって開くレポートを変更するコード」、つまり投稿NO.1521の投稿の最初のやりかたで、できました。

また同じく投稿NO.1521で教えていただいた2つ目の、DCount関数を使ったやり方でもできました。こちらは私のような初心者向きな気がします。

以上ありがとうございました。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━    通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━                                 Page 321