Private Sub cboグループ_Click()
If Nz(Me.cbo名前ID) = "" Then
MsgBox "先に名前を選択してください。"
End If
End Sub
Private Sub cboグループ_Enter()
Me.cboグループ.Requery
End Sub
Private Sub txtグループ_Enter()
Me.cboグループ.SetFocus
End Sub
Select Case Forms!クエリ検索フォーム!モード
Case "Touroku"
施設ID = ほにゃらら
Case "kakikae"
'修正用処理
Case "etsuran"
'閲覧用処理(書き換え自体を禁止するとか)
Case Else
MsgBox "モード指定が不正です"
End Select
この現象、今日は起きなかったようです。。謎ですが、とりあえず仮クローズします。
ありがとうございます。やはりメッセージは表示されませんでした。
下記のコードと関係しますか・・?
わからなければこの件はあきらめようと思っています…
とりあえず、大きな問題が発生しているわけではないので
>DoCmd.OpenQuery "Q_メール作成"でクエリを実行したときに型変換エラーがでるのですか。
そのとおりです。
>管理IDフィールドのデータ型はなんですか。
T_送付リストの管理IDは数値型です。テーブルでは型が確認できますが、フォームは型って確認できないですよね??
その認識が間違っていればご教示ください。 ([F_管理]![txt管理ID]の書式は00000でしたが)
DoCmd.OpenQuery "Q_メール作成"
でクエリを実行したときに型変換エラーがでるのですか。管理IDフィールド
のデータ型はなんですか。"" ではなく Null なのかもしれません。見た目では区別付かないので。
Nz関数を使えば Nullでも""でもチェックできます。
フォームの銀行コード、支店コードのコントロールソースが、銀行コード_銀行コード、支店コード_支店コード になってませんか。
それだと、フォーム上で、マスターテーブルにコードを追加することになり、すでにマスターにあるコードならそのようなエラーになります。
マスターのコードは不要なのでSQLは下記のようにして、
フォームの銀行コード、支店コードのコントロールソースは、社員口座管理テーブルの銀行コード、支店コードにしてください。マスターテーブルから、コード(主キー)以外で表示したいフィールドを追加してください。
コンボボックスを使えば、レコードソースにマスターテーブルを含める必要はないです。
下記が参考になるでしょう。
コードでも名称でも入力できるコンボボックス - hatena chips
自己レスです。「異質な」については、そのPCだけ
・2003 mdb 形式にしてしまった。バックエンドと同じだと思っていたが、後になってそうでないのに気付いた
・参照設定でDAOが読み込めず、Access databese engine Object Libraryを指定した
です。
3つの状態を判断する方法もあるんですね。
ご丁寧にサンプルコード本当にありがとうございます。
チェックボックスとともに勉強、テストしてみます。
プログラミングのテクニックというやつですね
「新規か修正」、2つの状態を判断できればいいので「ONかOFF」2つの状態を持てるチェックボックスで代用するという流れです。IF文との相性がいい(コードが簡素)になるのもポイントです
その代わり、
新規登録モード = False
のとき、何モードなの?というのはコードを読んでも分かりにくいという面はありますテキストボックスで実装してもいいですし、3つの状態を判断しなければならないとかだとチェックボックスだと厳しいなんてこともあります
クエリ検索フォーム
[モード]テキストボックスを配置
登録修正用フォーム
先の回答の通りこのコード自体はあまり良いものではないですが、考え方としてはこういう流れになります
テキスト(文字)を使うとコードだけを見ても何をやっているのが分かりやすいというメリットもあります(
Case "etsuran"
の中で施設ID = ほにゃらら
とかあったら「おかしくない?」ってなるとか)ヘッダーに表示したいのなら、レポートヘッダーにテキストボックスを配置して、そのコントロールソースを
下記のように設定すればいいでしょう。
値集合ソースにテーブルを設定することも可能です。
設定例
テーフルが、
T_メンバー(※メンバーID 名前 所属部署・・・)
T_部署(※部署ID(数値型) 部署名)
として、
T_メンバー の所属部署フィールドの設定
データ型 数値型
ルックアップ
表示コントロール コンボボックス
値集合タイプ テーブル/クエリ
値集合ソース T_部署
列数 1
列幅 0
上記の設定で、下記のような表示になります。

複数値フィールドでも抽出は可能です。
Accessのクエリで複数のデータが入力されたフィールドを抽出する方法 | できるネット
■T'sWare Access Tips #659 ~複数値フィールドの中の値を条件に抽出するには?~
主キーは個性を出すための方法ですよね??(適切な表現がわからず個性と書きましたが、独自性?)
だとしたら2つの主キー以外は普通のフィールドで大丈夫ですね。リレーションシップとかの問題が出てくるかと思いましたが、関係ないですよね。失礼しました。
作成していて気づいたのですが、サブフォームに「所属部署」の中の「プロジェクトチーム」も追加します。
「所属部署」で絞り込んだ選択しとして、コンボボックスで選択させています。
(それ自体は作れています。)
この場合、サブフォームの元テーブルに「プロジェクトID」を追加しようと思っているのですが、これは主キーにする必要はないですよね?(主キーにする必要についてわからなくなってきました…)
①リストフォームでメンバー一覧を表示するとき、所属部署で絞り込みたい時があります。
↑
この件になります。
ありがとうございます!複数値を持つほうが未経験で、興味を持ったのですが、選択肢はテーブル設定の値集合ソースに記載しておかないといけないんですよね?
そうだとしたら、所属部署も増減がある可能性があり、外にフォームを持たせたいので2つ目の方法にしようと思います。
そこで、最初の質問に戻るのですが、サブフォームを作った場合、「F_リスト」で「メンバー所属部署」の数だけメンバーを表示することはできますでしょうか。
コンボボックスをつかうといいと思います。
例えば、下記は 番号(コード)と商品名(名称)を表示できるコンボボックスを2つ並べてますが、名称を表示するコンボボックスの設定の方を参考にすればいいでしょう。
コードでも名称でも入力できるコンボボックス - hatena chips
ご希望のことはだいたいつかめました。
メンバー一人が複数の部署に所属するときがある。
今までは、同じテーブルに複数レコードとして格納していた。
これは、あまり良い方法ではないと思うので、改善したいが、
どのような設計にしたらよいか分からない、というところですね。
方法としては2つあります。
一つは複数値を持つフィールドを利用する方法です。
複数値を持つフィールドの作成または削除 - Access
複数の値を記録するフィールド - もう一度学ぶMS-Access
上記のリンク先の画像を見てもらえれば分かると思いますが、
コンボボックスのドロップダウンリストにチェックボックスが付いていて、それをチェックすることで複数の所属部署を選択できるようになります。
ボックス部分には、選択した部署名がカンマ区切りで表示されます。
こちらだと、テーブル設計やフォーム設計の大きな変更なしに「所属部署」フィールドのルックアップで「複数の値を許可」を「はい」にするだけで簡単に実現できます。
もう一つは、
T_メンバー、T_部署 テーブルと、中間テーブルとして T_メンバー所属部署 を作成してそれぞれをリンクさせる方法になります。
テーブル設計は下記のような感じで。
T_メンバー(※メンバーID 名前 ・・・)
T_部署(※部署ID 部署名)
T_メンバー所属部署(※メンバーID ※部署ID)
※は主キー
「F_メンバー」のレコードソースは、T_メンバー。
これに埋め込むサブフォームのレコードソースは、T_メンバー所属部署。
サブフォームで 部署ID はコンボボックスにして部署名でも選択できるようにするといいでしょう。
コードでも名称でも入力できるコンボボックス - hatena chips
おかげさまでうまくいきました!ありがとうございました。
⑥に追記です。フィールドにメンバーIDも追加予定です。
ありがとうございます。
伝わりづらく申し訳ありません。
①リストフォームでメンバー一覧を表示するとき、所属部署で絞り込みたい時があります。
①①の目的を果たすため、メンバー1人に複数の所属部署が存在した場合、現状はメンバーIDを複数作成し、所属部署だけ違うデータを複数作成していました。
③②が効率的な方法ではないため、1つのメンバーIDに複数の所属部署情報を持たせたいと考えました。
④所属部署が何個存在するか決めづらいので(現状多くて3個くらいだとは思いますが…)サブフォームを作ったほうが良いかと考えました。
⑤サブフォームには今のところ、所属部署のみ表示予定です。(プルダウンで選択)
⑥所属部署のレコードソースは「Q_所属部署」でフィールドは所属部署ID、所属部署名の予定です。
⑦一番の目的は①になります。
以上で、わかりづらい部分があればご指摘ください。申し訳ありません。
hiroton様
ご丁寧に模範例まで教えて頂きありがとうございます。
チェックボックスを使ったことがないド素人なのですが、
チェックボックスON/OFF(True/false)で新規登録モードと切り替えみたいなことができるんですね。
読んだ参考書では、新規登録モード(Touroku)と修正モード(kakikae)、同じフォームで処理出来るような仕様になっていていて、ただし修正モード(kakikae)では主キーのような管理番号は書き換え対象から外してあったりしたので、今回のようなことで困っていました。
色々試してみて、また新たな質問挙げさせてもらうかもしれません。
いつも本当にありがとうございます。
hiroton様
早速の返答、教えて頂きありがとうございます。
サンプルのファイルでうまくいきました。
(フィールド名とTxbox名が少し違うだけの本番用では何故かまだできませんが・・)
フィールドの型が数値型かテキスト型かで書き方がちがうのですね。
Format 関数の参考サイトも教えて頂きありがとうございます。行き詰まったときに参考にさせていただきます。
質問して以来、作成する時間が取れておらず、やっと時間がとれたので確認中です。
おっしゃるとおり、実際の条件は「30日締 2月後30日払」といったものでした。
最初に質問した時きちんとかけておらず申し訳ありません。
今からいただいた回答を確認して作ってみます。わからなければ質問させていただくかもしれません。
どのようなことが希望なのか不明瞭なので、現在の状況を確認するためにいろいろ聞きました。
「F_リスト」「F_メンバー」のレコードソースが同じで方かいいかどうかは目的次第です。
現状はどのようになっていて、どの部分をどのように改善したいのか具体的に質問してもらえると、的確な回答でできると思います。
例えば、
サブフォームを作成するのは「F_メンバー」内にということですよね。
このサブフォームのレコードソースはなんでしょうか。テーブル名、フィールド名を提示してください。
また、『「F_リスト」で所属部署の数だけメンバーを表示する』とは具体的にどのような表示をイメージしていますか。
調整して、同じレコードソースにしました。今まで深く考えていませんでしたが、可能な場所は同じクエリにしたいと思いました!
なるほど!!すごい!うまくいきました。感動です。ありがとうございました。
>「F_リスト」「F_メンバー」のレコードソースは同じものですか。
ちがうクエリを使っていました。データの更新を同期させる問題もあるし、同じものにしたほうがよいのでしょうか。
>メンバー、部署のデータを登録するテーブルなど関連するテーブルの、テーブル名、フィールド名、主キー設定
「T_メンバー」名前、担当部署(複数存在)、内線番号などがフィールド名です。主キーは「メンバーID」です。
「F_リスト」は帳票フォームです。
いくつか方法がありますが、基本は
という作りにすることです。
このフラグは、クエリ検索フォームでボタンのどちらを押したかで切り替わるものなので、例えば(良いサンプルではありません)
クエリ検索フォーム上に、「新規登録モード」チェックボックスを配置
新規登録ボタン
詳細/修正ボタン
kaikae処理
のように作ると期待する動作ができます。クエリ検索フォーム側で処理することなのでもっと具体的な質問であれば各ボタンを押したときのコードを提示するようにしてください(質問自体新しく立て直したほうがいいかもしれません)
もう一度言いますが、この作りは良いものではありません
こういう処理ができているようなので、登録修正用フォーム側に「新規登録モード」チェックボックスを置いて設定を変えるような形にすればいいでしょう
ざっくり読んでみて
条件(SQLのWHERE句)の書き方の問題で、フィールドの型とデータの型を合わせる必要があります
strWhere = "施設_国cd='" & Me!Tx施設_国cd & "' AND 施設_種別cd='" & Me!Tx施設_種別cd & "'"
Format 関数
format関数はよく使う関数なのでいろいろ(検索とかして)勉強するといいですね
ありがとうございました。
UNION ALL にしてください。
UNIONだけだと重複データは1件にまとめられます。
すみません。解決しました・・・
hatena様にSQL文を表示するよう言われたので改めて見直すと必要のないテーブルとクエリが結合されておりエラーが起こったみたいです(><)
ご迷惑をおかけし申し訳ありませんでした。
情報が不足しているにも関わらずお返事いただきありがとうございます。
今色々試していると、恐らく新規登録したデータがクエリに登録されていないからかと思われます。
もとのテーブルからクエリを作っていますが、そのテーブルの方にはデータが入力されていますがなぜかクエリには反映されていないようです。
情報が不足しています。もう少し具体的に、どこでどのようにしたときに、エラーがでるのか説明してください。
社員情報登録フォームで新規レコードを入力したときにエラーがでるのでしょうか。
もし、そうなら、そのフォームのレコードソースのクエリのSQL文を提示してください。
まずは、
「F_リスト」「F_メンバー」のレコードソースは同じものですか。
また、メンバー、部署のデータを登録するテーブルなど関連するテーブルの、テーブル名、フィールド名、主キー設定を提示してください。
また、「F_リスト」は帳票フォームでしょうか。データシートフォームでしょうか。
下記でどうでしょうか。
acDialogでダイアログモードで開くと、フォームを閉じるまで、次のコードが実行されないので、
F_テストで入力後、閉じると、プルダウン項目.Requery が実行されます。
>String型にNullは代入できないようになっています。
そういうことだったんですね!とても参考になりました。ありがとうございます。
ありがとうございました。解決いたしました。
Switch関数について調べてみようと思います。
の部分ですね。Switch関数を使うといいでしょう。
軽減税率は考慮してません。
Switch 関数 - Access
本日、解決したのでご報告です。
私は、Left([氏名],Instr([氏名]," ")-1) 部分が問題なのかと思っておりましたが、saku様のおっしゃる通り、姓:"No." & [顧客ID]の連結を試してみたところ、「指定されたフィールドSQLステートメントのFROM句にある複数のテーブルを参照しました。」というエラーで[顧客ID]がまずダメだと分かりました。
そこで
[顧客ID] → [テーブル名].[顧客ID] としたところ、このエラーは回避できました。
さらにもう一つ、問題があったようで、
Left([氏名],Instr([氏名]," ")-1) → Left([氏名],InStr([氏名] & " "," ")-1)
と修正したところ、思い通りの文字列が取得できました。
一人で考えていたらまず考えつかなかったので本当に助かりました。
ありがとうございました。