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」のレポートを印刷しなさい。 というものなのですが、よろしくお願いします。 |
>「A」というテーブルの中の「B」というフィールドが「あ」「い」とういうもの >があったら、「C」のレポートを印刷しなさい。 >そうでないものは「D」のレポートを印刷しなさい。 仕様がよくわからないのですが・・・ あ い というのは別のレコードなんですか? それとも、1つのレコードの同じフィールド? |
すみれさん、こんにちは (イケガミさん、横レスごめんなさい) >「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 |
イケガミさん、こうちゃんさん、ありがとうございます。 すみません。仕様の説明がうまくできなくて。 >「A」テーブルに連結されたフォームがあって、そのフォームの「コマンド0」ボタンがクリックされたときに「B」フィールドを判定してレポートを出力って場合ならこんな感じ・・ そうなんです。まさにそのとおりなんです。 テーブルにある複数のレコードのなかで「B」フィールドに 「あ」か「い」があるものだけを「C」というレポートで それ以外のもは「D」というレポートで全部出したかったのです。 「あ」と「い」が「B」フィールドに両方はいることはなく どちらか1つ、またはそれ以外の言葉がはいっています。 こうちゃんさんにおしえていただいたやり方で 明日ためしてみます。ありがとうございました。 |
こうちゃんさん すみません。やってみたらできませんでした。 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 これだといちいちテーブルが開いて閉じるという形になってしまい 開かずにできないものかと悩んでいます。 レポートはプレビュー状態で見たいので開いて良いのですが。 どうしたらテーブルを開かないでフィルターがかけられますでしょうか? よろしくお願いいたします。 |
すみれさん、こんにちは >すみません。やってみたらできませんでした。 > >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 #今日のコードはオンラインです。試験していませんのでエラーが出るかもしれません。あしからず・・ |
こうちゃんさん ありがとうございました! できました。 おかげでやっと安眠できる夜を迎えられそうです。 |
すみれさん、こんにちは >ありがとうございました! >できました。 >おかげでやっと安眠できる夜を迎えられそうです。 わたしはまだ安眠できません^^; ほかにこのツリーを見ている方もいるかもしれませんし、私もしりたいのですが、どういう形でできたのか、書き込んでいただけるとフィードバックになるとおもうのですが・・ もし、まだこれをごらんになれるのならお願いします。 |
>わたしはまだ安眠できません^^; >ほかにこのツリーを見ている方もいるかもしれませんし、私もしりたいのですが、どういう形でできたのか、書き込んでいただけるとフィードバックになるとおもうのですが・・ すみませんっ。次の課題がだされたものでまた悩んでてお返事が遅くなりました。 今回のDBはまず仕様が 1つのDBに複数のテーブル、クエリー、フォームがあるのですが、 その中の、Aテーブルを基にしたQクエリーをもとにしたフォームがあります。 そのフォームのコマンド01ボタンが押されたとき、 Qクエリーの中のBというフィールドにはいっている内容が 「あ」「い」なら「C」というレポートを出したい。 それ以外なら「D」というレポートを出したい。 Aテーブルには複数のレコードが入っています。 で、やり方は、こうちゃんさんが教えてくださった 「テーブルをひらかずにSQLでレコードを確認して、結果によって開くレポートを変更するコード」、つまり投稿NO.1521の投稿の最初のやりかたで、できました。 また同じく投稿NO.1521で教えていただいた2つ目の、DCount関数を使ったやり方でもできました。こちらは私のような初心者向きな気がします。 以上ありがとうございました。 |