Microsoft Access 掲示板

6,622 件中 4,401 から 4,440 までを表示しています。
1
どんぐりず 2021/02/03 (水) 22:21:16 9099b@e2de4

この現象、今日は起きなかったようです。。謎ですが、とりあえず仮クローズします。

2

ありがとうございます。やはりメッセージは表示されませんでした。
下記のコードと関係しますか・・?
わからなければこの件はあきらめようと思っています…
とりあえず、大きな問題が発生しているわけではないので

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
2
どんぐりず 2021/02/03 (水) 21:56:15 9099b@e2de4 >> 1

>DoCmd.OpenQuery "Q_メール作成"でクエリを実行したときに型変換エラーがでるのですか。
そのとおりです。
>管理IDフィールドのデータ型はなんですか。
T_送付リストの管理IDは数値型です。テーブルでは型が確認できますが、フォームは型って確認できないですよね??
その認識が間違っていればご教示ください。 ([F_管理]![txt管理ID]の書式は00000でしたが)

1

DoCmd.OpenQuery "Q_メール作成"でクエリを実行したときに型変換エラーがでるのですか。

管理IDフィールドのデータ型はなんですか。

1

"" ではなく Null なのかもしれません。見た目では区別付かないので。
Nz関数を使えば Nullでも""でもチェックできます。

Private Sub cboグループ_Click()
    If Nz(Me.cbo名前ID) = "" Then
    MsgBox "先に名前を選択してください。"
    End If
End Sub
1

フォームの銀行コード、支店コードのコントロールソースが、銀行コード_銀行コード、支店コード_支店コード になってませんか。
それだと、フォーム上で、マスターテーブルにコードを追加することになり、すでにマスターにあるコードならそのようなエラーになります。

マスターのコードは不要なのでSQLは下記のようにして、

ELECT 社員口座管理テーブル.*, 銀行コード.銀行名, 支店コード.支店名
FROM 銀行コード INNER JOIN (支店コード INNER JOIN 社員口座管理テーブル ON 
(支店コード.支店コード = 社員口座管理テーブル.支店コード) 
AND (支店コード.銀行コード = 社員口座管理テーブル.銀行コード)) 
ON 銀行コード.銀行コード = 社員口座管理テーブル.銀行コード;

フォームの銀行コード、支店コードのコントロールソースは、社員口座管理テーブルの銀行コード、支店コードにしてください。マスターテーブルから、コード(主キー)以外で表示したいフィールドを追加してください。

コンボボックスを使えば、レコードソースにマスターテーブルを含める必要はないです。
下記が参考になるでしょう。

コードでも名称でも入力できるコンボボックス - hatena chips

1
小事P担 2021/02/01 (月) 20:20:22 f74f8@29561

自己レスです。「異質な」については、そのPCだけ
・2003 mdb 形式にしてしまった。バックエンドと同じだと思っていたが、後になってそうでないのに気付いた
・参照設定でDAOが読み込めず、Access databese engine Object Libraryを指定した
です。

6

3つの状態を判断する方法もあるんですね。
ご丁寧にサンプルコード本当にありがとうございます。
チェックボックスとともに勉強、テストしてみます。

5
hiroton 2021/02/01 (月) 13:11:35 b3a2d@f966d >> 4

プログラミングのテクニックというやつですね
「新規か修正」、2つの状態を判断できればいいので「ONかOFF」2つの状態を持てるチェックボックスで代用するという流れです。IF文との相性がいい(コードが簡素)になるのもポイントです

その代わり、新規登録モード = Falseのとき、何モードなの?というのはコードを読んでも分かりにくいという面はあります


テキストボックスで実装してもいいですし、3つの状態を判断しなければならないとかだとチェックボックスだと厳しいなんてこともあります

クエリ検索フォーム
[モード]テキストボックスを配置

新規登録用
Me!モード = "Touroku"
Docmd.OpenForm "登録修正用フォーム"

修正用
Me!モード = "kakikae"
Docmd.OpenForm "登録修正用フォーム"

閲覧用
Me!モード = "etsuran"
Docmd.OpenForm "登録修正用フォーム"

登録修正用フォーム

Select Case Forms!クエリ検索フォーム!モード
Case "Touroku"
    施設ID = ほにゃらら
Case "kakikae"
    '修正用処理
Case "etsuran"
    '閲覧用処理(書き換え自体を禁止するとか)
Case Else
    MsgBox "モード指定が不正です"
End Select

先の回答の通りこのコード自体はあまり良いものではないですが、考え方としてはこういう流れになります

テキスト(文字)を使うとコードだけを見ても何をやっているのが分かりやすいというメリットもあります(Case "etsuran"の中で施設ID = ほにゃららとかあったら「おかしくない?」ってなるとか)

1

ヘッダーに表示したいのなら、レポートヘッダーにテキストボックスを配置して、そのコントロールソースを
下記のように設定すればいいでしょう。

=IIf(Count(*)=0,"今月の処理は終了しました","")
12

ありがとうございます!複数値を持つほうが未経験で、興味を持ったのですが、選択肢はテーブル設定の値集合ソースに記載しておかないといけないんですよね?

値集合ソースにテーブルを設定することも可能です。

設定例
テーフルが、
T_メンバー(※メンバーID 名前 所属部署・・・)
T_部署(※部署ID(数値型) 部署名)
として、
T_メンバー の所属部署フィールドの設定
データ型 数値型
ルックアップ
 表示コントロール コンボボックス
 値集合タイプ テーブル/クエリ
 値集合ソース T_部署
 列数 1
 列幅 0

上記の設定で、下記のような表示になります。
 画像1

①リストフォームでメンバー一覧を表示するとき、所属部署で絞り込みたい時があります。

複数値フィールドでも抽出は可能です。
Accessのクエリで複数のデータが入力されたフィールドを抽出する方法 | できるネット

■T'sWare Access Tips #659 ~複数値フィールドの中の値を条件に抽出するには?~

11
どんぐりず 2021/01/31 (日) 09:37:45 0029a@1c915 >> 8

主キーは個性を出すための方法ですよね??(適切な表現がわからず個性と書きましたが、独自性?)
だとしたら2つの主キー以外は普通のフィールドで大丈夫ですね。リレーションシップとかの問題が出てくるかと思いましたが、関係ないですよね。失礼しました。

10
どんぐりず 2021/01/31 (日) 08:47:51 9099b@e2de4 >> 8

作成していて気づいたのですが、サブフォームに「所属部署」の中の「プロジェクトチーム」も追加します。
「所属部署」で絞り込んだ選択しとして、コンボボックスで選択させています。
(それ自体は作れています。)

この場合、サブフォームの元テーブルに「プロジェクトID」を追加しようと思っているのですが、これは主キーにする必要はないですよね?(主キーにする必要についてわからなくなってきました…)

9
どんぐりず 2021/01/31 (日) 00:27:20 9099b@e2de4 >> 8

①リストフォームでメンバー一覧を表示するとき、所属部署で絞り込みたい時があります。

この件になります。

8
どんぐりず 2021/01/31 (日) 00:24:47 修正 9099b@e2de4 >> 7

ありがとうございます!複数値を持つほうが未経験で、興味を持ったのですが、選択肢はテーブル設定の値集合ソースに記載しておかないといけないんですよね?
そうだとしたら、所属部署も増減がある可能性があり、外にフォームを持たせたいので2つ目の方法にしようと思います。
そこで、最初の質問に戻るのですが、サブフォームを作った場合、「F_リスト」で「メンバー所属部署」の数だけメンバーを表示することはできますでしょうか。

1

コンボボックスをつかうといいと思います。
例えば、下記は 番号(コード)と商品名(名称)を表示できるコンボボックスを2つ並べてますが、名称を表示するコンボボックスの設定の方を参考にすればいいでしょう。

コードでも名称でも入力できるコンボボックス - hatena chips

7

ご希望のことはだいたいつかめました。
メンバー一人が複数の部署に所属するときがある。
今までは、同じテーブルに複数レコードとして格納していた。
これは、あまり良い方法ではないと思うので、改善したいが、
どのような設計にしたらよいか分からない、というところですね。

方法としては2つあります。

一つは複数値を持つフィールドを利用する方法です。

複数値を持つフィールドの作成または削除 - Access

複数の値を記録するフィールド - もう一度学ぶMS-Access

上記のリンク先の画像を見てもらえれば分かると思いますが、
コンボボックスのドロップダウンリストにチェックボックスが付いていて、それをチェックすることで複数の所属部署を選択できるようになります。
ボックス部分には、選択した部署名がカンマ区切りで表示されます。

こちらだと、テーブル設計やフォーム設計の大きな変更なしに「所属部署」フィールドのルックアップで「複数の値を許可」を「はい」にするだけで簡単に実現できます。

もう一つは、
T_メンバー、T_部署 テーブルと、中間テーブルとして T_メンバー所属部署 を作成してそれぞれをリンクさせる方法になります。

テーブル設計は下記のような感じで。

T_メンバー(※メンバーID 名前 ・・・)
T_部署(※部署ID 部署名)
T_メンバー所属部署(※メンバーID ※部署ID)

※は主キー

「F_メンバー」のレコードソースは、T_メンバー。
これに埋め込むサブフォームのレコードソースは、T_メンバー所属部署。
サブフォームで 部署ID はコンボボックスにして部署名でも選択できるようにするといいでしょう。

コードでも名称でも入力できるコンボボックス - hatena chips

5
おもち 2021/01/30 (土) 14:37:13 0029a@1c915 >> 4

おかげさまでうまくいきました!ありがとうございました。

6
どんぐりず 2021/01/30 (土) 13:21:49 9099b@e2de4 >> 5

⑥に追記です。フィールドにメンバーIDも追加予定です。

5
どんぐりず 2021/01/30 (土) 13:17:47 修正 9099b@e2de4

ありがとうございます。
伝わりづらく申し訳ありません。

①リストフォームでメンバー一覧を表示するとき、所属部署で絞り込みたい時があります。
①①の目的を果たすため、メンバー1人に複数の所属部署が存在した場合、現状はメンバーIDを複数作成し、所属部署だけ違うデータを複数作成していました。
③②が効率的な方法ではないため、1つのメンバーIDに複数の所属部署情報を持たせたいと考えました。
④所属部署が何個存在するか決めづらいので(現状多くて3個くらいだとは思いますが…)サブフォームを作ったほうが良いかと考えました。
⑤サブフォームには今のところ、所属部署のみ表示予定です。(プルダウンで選択)
⑥所属部署のレコードソースは「Q_所属部署」でフィールドは所属部署ID、所属部署名の予定です。
⑦一番の目的は①になります。

以上で、わかりづらい部分があればご指摘ください。申し訳ありません。

4

hiroton様
ご丁寧に模範例まで教えて頂きありがとうございます。

チェックボックスを使ったことがないド素人なのですが、
チェックボックスON/OFF(True/false)で新規登録モードと切り替えみたいなことができるんですね。
読んだ参考書では、新規登録モード(Touroku)と修正モード(kakikae)、同じフォームで処理出来るような仕様になっていていて、ただし修正モード(kakikae)では主キーのような管理番号は書き換え対象から外してあったりしたので、今回のようなことで困っていました。

色々試してみて、また新たな質問挙げさせてもらうかもしれません。
いつも本当にありがとうございます。

3

hiroton様
早速の返答、教えて頂きありがとうございます。
サンプルのファイルでうまくいきました。
(フィールド名とTxbox名が少し違うだけの本番用では何故かまだできませんが・・)
フィールドの型が数値型かテキスト型かで書き方がちがうのですね。

Format 関数の参考サイトも教えて頂きありがとうございます。行き詰まったときに参考にさせていただきます。

4
おもち 2021/01/30 (土) 10:40:35 0029a@1c915

質問して以来、作成する時間が取れておらず、やっと時間がとれたので確認中です。
おっしゃるとおり、実際の条件は「30日締 2月後30日払」といったものでした。
最初に質問した時きちんとかけておらず申し訳ありません。
今からいただいた回答を確認して作ってみます。わからなければ質問させていただくかもしれません。

4

どのようなことが希望なのか不明瞭なので、現在の状況を確認するためにいろいろ聞きました。

「F_リスト」「F_メンバー」のレコードソースが同じで方かいいかどうかは目的次第です。

現状はどのようになっていて、どの部分をどのように改善したいのか具体的に質問してもらえると、的確な回答でできると思います。

例えば、

そこで質問ですが、サブフォームを作った場合、「F_リスト」で所属部署の数だけメンバーを表示することはできますでしょうか。

サブフォームを作成するのは「F_メンバー」内にということですよね。
このサブフォームのレコードソースはなんでしょうか。テーブル名、フィールド名を提示してください。
また、『「F_リスト」で所属部署の数だけメンバーを表示する』とは具体的にどのような表示をイメージしていますか。

3
どんぐりず 2021/01/29 (金) 23:25:03 9099b@e2de4 >> 2

調整して、同じレコードソースにしました。今まで深く考えていませんでしたが、可能な場所は同じクエリにしたいと思いました!

2
どんぐりず 2021/01/29 (金) 22:16:27 9099b@e2de4

なるほど!!すごい!うまくいきました。感動です。ありがとうございました。

2
どんぐりず 2021/01/29 (金) 22:00:05 9099b@e2de4

>「F_リスト」「F_メンバー」のレコードソースは同じものですか。
ちがうクエリを使っていました。データの更新を同期させる問題もあるし、同じものにしたほうがよいのでしょうか。
>メンバー、部署のデータを登録するテーブルなど関連するテーブルの、テーブル名、フィールド名、主キー設定
「T_メンバー」名前、担当部署(複数存在)、内線番号などがフィールド名です。主キーは「メンバーID」です。

「F_リスト」は帳票フォームです。

2
hiroton 2021/01/29 (金) 17:46:06 修正 7ce18@f966d

3.(1.2.)が実現できた場合

いくつか方法がありますが、基本は

kaikae処理

If 新規登録処理 Then
    施設ID = ほにゃらら
End If

という作りにすることです。
このフラグは、クエリ検索フォームでボタンのどちらを押したかで切り替わるものなので、例えば(良いサンプルではありません

クエリ検索フォーム上に、「新規登録モード」チェックボックスを配置
新規登録ボタン

Me!新規登録モード = True
Docmd.OpenForm "クエリ検索フォーム"

詳細/修正ボタン

Me!新規登録モード = False
Docmd.OpenForm "クエリ検索フォーム"

kaikae処理

If Forms!クエリ検索フォーム!新規登録モード Then
    施設ID = ほにゃらら
End If

のように作ると期待する動作ができます。クエリ検索フォーム側で処理することなのでもっと具体的な質問であれば各ボタンを押したときのコードを提示するようにしてください(質問自体新しく立て直したほうがいいかもしれません)

もう一度言いますが、この作りは良いものではありません

・修正モードの際は、フォーム1で選択した「施設ID」に紐付いた値が表示さる

こういう処理ができているようなので、登録修正用フォーム側に「新規登録モード」チェックボックスを置いて設定を変えるような形にすればいいでしょう

1
hiroton 2021/01/29 (金) 17:16:32 7ce18@f966d

ざっくり読んでみて

1.新規登録モードの際、ユーザーが[cmb施設_種別名称]選択した後に、
[Tx連番]の値が、「Tx施設_国cd」と「Tx施設_種別cd」の組合せを1つのグループとして、
1~の連番(値がある場合最大値に+1)が自動で入るようにしたい

施設_国cd   :数値型 ⇒数値3桁
施設_種別cd :数値型 ⇒数値2桁

strWhere = "施設_国cd='" & Me!Tx施設_国cd & "' AND 施設_種別cd='" & Me!Tx施設_種別cd & "'"
↓

strWhere = "施設_国cd=" & Me!Tx施設_国cd & " AND 施設_種別cd=" & Me!Tx施設_種別cd

条件(SQLのWHERE句)の書き方の問題で、フィールドの型とデータの型を合わせる必要があります

strWhere = "施設_国cd='" & Me!Tx施設_国cd & "' AND 施設_種別cd='" & Me!Tx施設_種別cd & "'"

2.(1.)で種別名称を選択した後、[Tx施設ID]に、
数値8桁(国cd;3桁 + 種別cd;2桁 + 連番;2桁)という形式で自動で施設IDの値が入るようにしたい

Me!Tx施設ID = Format(Me!Tx施設_国cd, "000") & Format(Me!Tx施設_種別cd, "00") & Format(new連番, "00")

Format 関数
format関数はよく使う関数なのでいろいろ(検索とかして)勉強するといいですね

2
hideki 2021/01/29 (金) 12:28:17 e0d27@96514

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

1

UNION ALL にしてください。
UNIONだけだと重複データは1件にまとめられます。

SELECT * FROM クエリ1
UNION ALL
SELECT * FROM クエリ2;
3
bunta 2021/01/29 (金) 09:03:02 3e392@fa49d

すみません。解決しました・・・
hatena様にSQL文を表示するよう言われたので改めて見直すと必要のないテーブルとクエリが結合されておりエラーが起こったみたいです(><)
ご迷惑をおかけし申し訳ありませんでした。

2
bunta 2021/01/29 (金) 08:56:44 3e392@fa49d

情報が不足しているにも関わらずお返事いただきありがとうございます。
今色々試していると、恐らく新規登録したデータがクエリに登録されていないからかと思われます。
もとのテーブルからクエリを作っていますが、そのテーブルの方にはデータが入力されていますがなぜかクエリには反映されていないようです。

1
hatena 2021/01/28 (木) 19:42:45 修正

情報が不足しています。もう少し具体的に、どこでどのようにしたときに、エラーがでるのか説明してください。

社員情報登録フォームで新規レコードを入力したときにエラーがでるのでしょうか。
もし、そうなら、そのフォームのレコードソースのクエリのSQL文を提示してください。

1
hatena 2021/01/28 (木) 19:38:51 修正

まずは、
「F_リスト」「F_メンバー」のレコードソースは同じものですか。
また、メンバー、部署のデータを登録するテーブルなど関連するテーブルの、テーブル名、フィールド名、主キー設定を提示してください。

また、「F_リスト」は帳票フォームでしょうか。データシートフォームでしょうか。

1

下記でどうでしょうか。

Private Sub btn新規登録_Click()
    DoCmd.OpenForm "F_テスト", , , , acFormAdd, acDialog
    Me.プルダウン項目.Requery
End Sub

acDialogでダイアログモードで開くと、フォームを閉じるまで、次のコードが実行されないので、
F_テストで入力後、閉じると、プルダウン項目.Requery が実行されます。

3
おもち 2021/01/27 (水) 23:35:47 0029a@1c915 >> 1

>String型にNullは代入できないようになっています。

そういうことだったんですね!とても参考になりました。ありがとうございます。

2
true_grow 2021/01/27 (水) 09:02:41 2f66f@538fa

ありがとうございました。解決いたしました。
Switch関数について調べてみようと思います。

1
hatena 2021/01/26 (火) 13:50:48 修正
IIf([請求日]>#4/1/2014# And [請求日]<#10/1/2019#,0.08,0.1) AS 消費税率

の部分ですね。Switch関数を使うといいでしょう。

Switch([請求日]>=#10/1/2019#,0.1,[請求日]>=#4/1/2014#,0.08,[請求日]>=#4/1/1997#,0.05,[請求日]>=#4/1/1989#,0.03,True,0) AS 消費税率

軽減税率は考慮してません。

Switch 関数 - Access

3
chocotan 2021/01/25 (月) 21:18:35

本日、解決したのでご報告です。
私は、Left([氏名],Instr([氏名]," ")-1) 部分が問題なのかと思っておりましたが、saku様のおっしゃる通り、姓:"No." & [顧客ID]の連結を試してみたところ、「指定されたフィールドSQLステートメントのFROM句にある複数のテーブルを参照しました。」というエラーで[顧客ID]がまずダメだと分かりました。

そこで
[顧客ID] →  [テーブル名].[顧客ID] としたところ、このエラーは回避できました。

さらにもう一つ、問題があったようで、
Left([氏名],Instr([氏名]," ")-1)  →   Left([氏名],InStr([氏名] & " "," ")-1)
と修正したところ、思い通りの文字列が取得できました。

一人で考えていたらまず考えつかなかったので本当に助かりました。
ありがとうございました。