Microsoft Access 掲示板

views
4 フォロー
5,901 件中 41 から 80 までを表示しています。
4

日付選択カレンダーで日付を選択した瞬間にイベントを走らせる事ができないので
Me.Refreshを入れていると思います。

日付を選択した瞬間にイベントを走らせるのに、Me.Refresh をするというのは目的のための道具の選択が適切でないということです。

例えると、大根を切るのに適切な道具は、包丁ですが、チェーンソーを持ち出して切る、というイメージです。

3
アラレ 2024/04/25 (木) 11:26:12 000c5@8dc8e

追記です。
    'キー入力フラグがfalseのときはフォーム入力値を確定する
    If Me![chk_date] = False Then
        DoCmd.RunCommand acCmdSaveRecord
    End If

こうする事で、日付を選択した瞬間にイベントが発生することができました。
保存したいとか、そういう理由はありませんが、そこで保存したことによって
問題もないですし、イメージ通りに動くことができたのでよかったです。
ありがとうございました。

2
アラレ 2024/04/25 (木) 11:20:03 000c5@8dc8e

おはようございます。
ご返信ありがとうございます。
http://hiroses.seesaa.net/article/397791059.html
上記のサイトでは
日付選択カレンダーで日付を選択した瞬間にイベントを走らせる事ができないので
Me.Refreshを入れていると思います。
詳しくはわからないのですが・・・

    'キー入力フラグがfalseのときはフォーム入力値を確定する
    If Me![chk_date] = False Then
        'Me.Refresh
        Call txt_date_AfterUpdate()
    End If

こちらを試してみたのですが、日付を選択した瞬間には発生しなかったでした。
フォーカスが移動した瞬間には発生します。

色々ググってみてはみたのですが、日付カレンダーはで日付を選択した瞬間は、イベントが発生しないみたいです。

15

テーブルでの並び順を名前の昇順ということは、通常はあまりないことです。
主キーフィールド順にするか、並び替え用のフィールドを用意するのが普通の設計です。

#8の投稿のテーブルなら、正規化すると、
席種マスターテーブルと席列マスターテーブルを作成することになります。

正規化例
席種マスター
席種ID 席種
1   座席
2   パイプ椅子

席列マスター
席列ID 席列
1   前列
2   後列

ID 席種ID 席列ID 席番
1   1   1   1
2   1   1   2
3   1   1   3
・・・
20   2   2   T

14
驚天動地!前任者失踪丸 2024/04/25 (木) 10:25:20 23e8e@44ebd >> 13

どなたか分かりませんが、スタンプでは分かりませんので文章でお願い致します。

13
驚天動地!前任者失踪丸 2024/04/25 (木) 10:00:01 修正 23e8e@44ebd >> 12

無事に昇順で表示させることができました。ありがとうございました。
どこまでがこの課題の必要情報か分からず、また社内情報保護の為小出しになってしまい申し訳ありません。

通常、コンボボックスのコントロールソースにはキーフィールドを格納するという設計になると思いますが

ここがよく分からないのですが、どういうことでしょうか?

ちなみに社内の既存のシステムなので、テーブル構成を変えるのが難しいです。
メインテーブルのレコードに全ての情報が集約されている感じのテーブル構成です。


T_指定席予約データ

ID席種席1席2席3座席通番予約№予約者氏名予約者〒予約者住所注文取込日時納品書発行日時出荷完了日時etc...

何度かこのサイトで教えて頂いていますが、テーブルが「正規化」されていないから扱いにくいということですかね?例えば席関連のフィールドでいえば、T_指定席予約_席 のようなテーブルを作成して、そこに席関連だけのデータを格納しリレーションでつなぐ・・・といったことをしないといけないということですよね?     

12

テーブル構成がどうなっているか不明なので、とりあえずの推測ですが、
IDをフィールドを最小か最大にすればいいのでは?


通常、コンボボックスのコントロールソースにはキーフィールドを格納するという設計になると思いますが、
このような質問が出てくるのは、その辺のテーブル設計がまずいのではという予感。


後だしで情報を追加していくのではなく、最初から関係するすべての情報を提示して質問してもらった方が、お互いに手間がないかと思いますが。

11
驚天動地!前任者失踪丸 2024/04/25 (木) 09:25:36 23e8e@44ebd >> 10

コンボボックスに同じ選択肢を羅列させないために集計でグループ化しているので、IDをフィールドに入れるとマズイ場合はどうすればよいでしょうか?

10
hatena 2024/04/24 (水) 22:48:08 修正

このようなテーブルがあり、cmb_席種というコンボボックスから「座敷」を選択すると、cmb_席1コンボボックスの選択肢は「前列」だけになり、「前列」を選択するとcmb_席2の選択肢が1~20になり、この際数字が昇順になるように表示させたいということです。

そのテーブルなら、ID の昇順にすればいいだけでは。
cmb_席2 の値集合ソースに下記のSQLを設定すればいいでしょう。

SELECT 席2, ID FROM テーブル名 WHERE 席2='" & Me.cmb_席1 & "' ORDER BY ID;
9
りんご 2024/04/24 (水) 20:34:20 935bc@0e907 >> 8
テーブル{席種}
座敷
パイプ椅子
テーブル{席種席列}
座敷   前列
座敷後列
パイプ椅子前列
パイプ椅子後列
テーブル{席種席列席番号}
座敷前列1
座敷前列
座敷前列20
座敷後列1
座敷後列
座敷後列20
パイプ椅子前列
パイプ椅子後列
8
驚天動地!前任者失踪丸 2024/04/24 (水) 19:28:27 23e8e@44ebd >> 5

レスが遅くなってしまい申し訳ありません。
実際にはイベント会場の指定席管理システムを作っていまして、

ID席種席1席2
1座敷前列
2座敷前列
20座敷前列20
21パイプ椅子後列
22パイプ椅子後列
40パイプ椅子後列

このようなテーブルがあり、cmb_席種というコンボボックスから「座敷」を選択すると、cmb_席1コンボボックスの選択肢は「前列」だけになり、「前列」を選択するとcmb_席2の選択肢が1~20になり、この際数字が昇順になるように表示させたいということです。
このため、席2フィールドに全角数字と全角アルファベットがあります。

1

そもそもMe.Refreshをする必要性が分からないのですが、なんのために必要なのでしょうか。

リンク先の説明では、日付選択カレンダーで日付を選択した瞬間に「更新後処理」イベントを実行したいということのようですが、そのために Me.Refresh は目的と手段があっていないように思います。
Refresh はカレントレコードの更新をテーブルに反映させて(=レコード保存)、かつ、テーブルデータを再読込するということですが、その必要性があるでしょうか。(再読込するので一旦非表示になる)

「更新後処理」プロシージャを実行したいのなら、それをCallすれば済む話です。

リンク先のコードなら、下記でいいとおもうのですが。

Private Sub txt_date_Change()

    'キー入力フラグがfalseのときはフォーム入力値を確定する
    If Me![chk_date] = False Then
        'Me.Refresh
        Call txt_date_AfterUpdate()
    End If

End Sub

もし、日付選択カレンダーで日付を選択した瞬間にレコード保存(?)したいのなら、下記でいいですし。
(再読込はしないので非表示にはならない)

Private Sub txt_date_Change()

    'キー入力フラグがfalseのときはフォーム入力値を確定する
    If Me![chk_date] = False Then
        DoCmd.RunCommand acCmdSaveRecord
    End If

End Sub
4
あん 2024/04/24 (水) 10:52:24 b41ab@001b1

hatena様
ありがとうございます。
こちらもやってみます!

3
hatena 2024/04/23 (火) 17:24:16 修正

hirotonさんの回答と同じ考え方のものですが、下記にサンプルがあります。
ご参考に。

帳票フォームでレコード毎にテキストボックスの表示/非表示を切り換えたい
表形式フォームで FieldA のデータが英字のみの場合、FieldBを表示、それ以外は非表示にしたいのですが、VisibleをTrueやFalseにすると、表全部がなってしまい、行単位で表示、非表示ができません。 Accessの帳票フォームで「可視」プロパティをVBA等で変更した場合は、すべての行に反映されます。プロパティがレコード数分存在するわけではないのでしょうがないことです。 「条件付き書式」を使って使用不可にすれば、...
Fc2

2
あん 2024/04/23 (火) 16:31:37 b41ab@001b1

hiroton様
ご回答ありがとうございます。

そのやり方をやってみます。
見栄えや使いやすさなどをよく判断してみます。

1
hiroton 2024/04/23 (火) 15:56:40 b3ded@f966d

基本的にはできないですね

コントロールBの前面にテキストボックスを配置して、背景スタイルプロパティを「透明」に、コントロールソース=IIf([テキストボックスA]<>1,"███")としてコントロールBを隠すとか、そんなことならできます

前景色プロパティで、メインの背景と同じ色になるようにして、フォントの設定でうまく塗りつぶすようにします。境界線や立体表示、余白の設定なんかも調整する必要があります

コントロールによってはテキストボックスよりも前面に表示されるモノ(前後の優先順位が固定のコントロール)もあるので、それらに関しては打つ手なしだと思います

5
フィールド1
・・・
18
19
20
・・・

というようなテーブルデータとういことですか。
これはどのようなリストでしょうか。
データベース的な設計なら、主キー必須なので下記のような感じとかになるはずです。
で、主キーで並び替えます。

IDData
11
22
33
・・・・
1818
1919
2020
21
22
・・・・
46

質問内容をあまり省略しすぎると、その内容に最適化された回答をしますので、
実際の処理に合わないものになる可能性が大きいです。

なるべく実態に近い質問内容にしてください。

例えば、前回の質問では、下記のようにいってますが、

イメージ的には、cmb_1で都道府県を選択したら、cmb_2にはその県にある市だけが選択できるようになる

もしこの内容なら、市町村コードというものがありますので、それで並び替えるとかになります。

4
驚天動地!前任者失踪丸 2024/04/20 (土) 09:58:17 23e8e@44ebd >> 3

説明不足で申し訳ありません。
ひとつ前の質問と関連するのですが、他のコンボボックスで選んだものによって選択肢が変わります。

例えば昇順に並べ替えたいコンボボックスがcmb_検索2だとすると、cmb_検索1でAを選ぶと1~20が、Bを選ぶとA~Zがリストに表示されるといったような感じです。

3

ならばデータ例もそうのように提示すべきですね。
全角数字のあとにアルファベットがくるのですか。
であるなら、前回の回答の最初のクエリでいいでしょう。

商品コード的なもので、数字+アルファベット という書式のものなら、
数字部分とアルファベット部分にわけて、それぞれ数値型、テキスト型フィールドにするという設計もあります。

というようなこともあるので、どのような書式になるのか、データ例もあげて、仕様を明確に提示してください。

2
驚天動地!前任者失踪丸 2024/04/20 (土) 08:33:03 23e8e@44ebd >> 1

同じフィールドにアルファベットが入る可能性があるので数値型に出来ません。

1
hatena 2024/04/20 (土) 05:03:41 修正

全角数字はVal関数では数値と判断されずに0になります。
StrConv関数で半角に変換してVal関数で数値化すればいいでしょう。

SELECT T_昇順実験.短いテキスト型, Val(StrConv([短いテキスト型],8)) AS 式1
FROM T_昇順実験
ORDER BY 2;

StrConv 関数 (Visual Basic for Applications) | Microsoft Learn


そもそも論ですが、数値順にならべたいフィールドを、テキスト型で全角数字にする意味が不明です。
素直に数値型のフィールドにしておけば無駄なことをせずにすみます。
StrConvやValで囲むことで無駄な処理が増えて、かつインデックスが無効になるので重くなります。

もし、表示上、全角にしたいのなら、フィールドのデータ型は数値型にしておいて、表示するときに全角に変換すればいいでしょう。

SELECT StrConv(T_昇順実験.数値型,4) AS 数値型
FROM T_昇順実験
ORDER BY T_昇順実験.数値型;
2
驚天動地!前任者失踪丸 2024/04/19 (金) 18:25:54 23e8e@44ebd >> 1

ありがとうございます!
思った通りに動かせるようになりました。

1

cmb_2の値集合ソースのクエリ(SQL)をcmb_1の値で絞り込んだものにします。

SELECT * FROM テーブル名 WHERE 種類=[cmb_1];

これだけだとcmb_1を変更してもリストが更新されないので、フォーカス取得時に再クエリします。

'cmb_2フォーカス取得時
Private Sub cmb_2_Enter()
    Me.cmb_2.Requery
End Sub
1

このフィールドで7ケタ以上の数値がはいると指数表示となってしまうのですが、どうにか指数表示させない方法がないでしょうか?

フィールドの書式設定を「固定」にすれば指数表示にはなりません。

フィールドサイズを倍精度浮動小数点型に変更しようとしてみたのですが、メモリ不足ですとエラーになり変更できませんでした。

倍精度浮動小数点型に変更するだけで、メモリ不足とは考えにくいですね。何か他に問題がありそうです。とりあえず下記の作業を上から順に不具合が解消するまで実行してみてください。

テーブルを新規に作成しなおす。
「最適化と修復」を実行する。
新規データベースファイルを作成して、そこに現状のデータベース内のオブジェクトをすべてインポートする。

ちなみに、小数点以下桁数が2桁までいいのなら、通貨型の方がいいですね。浮動小数点数は演算誤差が発生しますが、通貨型なら誤差が発生しません。
数値型でフィールドサイズを「十進型」にしてもいいですが、あまり一般的ではありません。

このテーブルをAccessからエクスポートして利用するのですが、指数表示でエクスポートされ、他のアプリケーションで使えなくなってしまい困っています。

テキスト形式でエクスポートしているのでしょうか。
テーブルからクエリを作成して、クエリでFormat関数で書式を設定すればいいでしょう。

小数点以下桁数が2桁なら、

フィールド名: Format([テーブル名]![フィールド名],"0.00")
1

何をしたいのか不明瞭です。

まずは、下記を提示してください。

テーブルのサンプルデータ

上記データのクエリでの希望の出力結果

現状のクエリのSQL

4
驚天動地!前任者失踪丸 2024/04/11 (木) 14:20:37 23e8e@44ebd >> 3

あ、フィルターです。失礼致しました。

>=IIf([Forms]![F_納品書出力依頼]![txb_納期検索1]="","000000",[Forms]![F_納品書出力依頼]![txb_納期検索1]) And <=IIf([Forms]![F_納品書出力依頼]![txb_納期検索2]="","999999",[Forms]![F_納品書出力依頼]![txb_納期検索2])

提示頂いた抽出条件を参考に、こちらで想定通りにフィルターされるようになりました!
ありがとうございます。

3

レポートのレコードソースをフォームの非連結テキストボックスに入力した抽出条件(納期)によってソートしたいです。

ソートは並び替えという意味ですが、ご希望のことは抽出(フィルター)ということですよね。

短いテキスト型です。

抽出条件を下記のように設定すればいいでしょう。

>=IIf(Nz([Forms]![F_納品書出力依頼]![txb_納期検索1],"")="","000000",[Forms]![F_納品書出力依頼]![txb_納期検索1]) AND IIf(Nz([Forms]![F_納品書出力依頼]![txb_納期検索2],"")="","999999",[Forms]![F_納品書出力依頼]![txb_納期検索2])
2
驚天動地!前任者失踪丸 2024/04/11 (木) 12:50:37 23e8e@44ebd >> 1

短いテキスト型です。

1

納期(フィールド)のデータ型はなんですか?

4
やどかり 2024/04/10 (水) 20:35:02 ac752@85bbd

有難うございます。
単票フォームを作りたかったので、教えて頂いたサイトを参考に作成してみます。

3
驚天動地!前任者失踪丸 2024/04/10 (水) 18:24:55 23e8e@44ebd >> 2

いつも回答ありがとうございます。
Hatenaさんのサンプルと同じく左から右への印刷方向です。

提示して頂いた方法で希望通りのレイアウトになりました!
毎度ながら、テーブル構成・クエリ・フォーム・レポート、どんな質問に対しても精通していらっしゃって感服です、、、ありがとうございました。

2

サンプルを作成して確認してみたら、「左から右へ」に設定してあるときに、質問の症状が発生しました。

ご希望のことは、最後のグループフッターの後に、全体の集計を表示させたいということでしょうか。

レポートフッターでは無理のようですので、全体を一つのグループとするグループフッターを作成してそこに全体の集計を表示させるようにすればどうでしょう。

具体的な手順は、「グループ化と並べ替え」でグループを追加して、フィールドの選択で一番下の「式」をクリックします。
式ビルダーが開きますので、そこで =1 と固定値の式を設定します。これを一番上に移動して、「グループフッター付き」にします。そこに、レポートフッターにあった集計テキストボックスを移動させればいいでしょう。

1

ページ設定のレイアウトで列数を2に設定しているということですね。

「印刷方向」の設定は、
「左から右へ」か「上から下へ」かどちらになってますか。

また、現状のデータでは、1列に何行表示されていて、実際のレコード数は何件ですか。

3
hatena 2024/04/10 (水) 17:15:22 修正

訪問データを入力するフォームを作成する必要がありますが、
その場合、単票フォームでもいいですか。それとも帳票フォームがご希望ですか。

帳票フォームは少し難しいので、下記のサイトで単票フォームの場合の作成法を研究して、まずは単票フォームを作成してみてください。

ACCESS コンボボックスの絞り込みをする方法 - たすけてACCESS

それができてから、帳票フォームに取り組むのがいいと思います。

2
驚天動地!前任者失踪丸 2024/04/10 (水) 16:34:21 23e8e@44ebd >> 1

回答ありがとうございます、自己解決できました。
T_出力の各フィールドのNullをNzで""にしたらクエリを実行しても警告がでなくなりました。

2
やどかり 2024/04/10 (水) 16:02:16 ac752@85bbd

回答ありがとうございます。
テーブルのルックアップでは無理なんですね。
ルックアップ設定は以下になります。

顧客テーブルの企業ID
値集合ソース
    SELECT [T_企業マスタ].[企業ID], [T_企業マスタ].[企業名] FROM T_企業マスタ ORDER BY [企業名];
連結列
    1
列数
    2
列幅
    0cm;2.54cm

訪問テーブルの企業ID
値集合ソース
    SELECT [T_企業マスタ].[企業ID], [T_企業マスタ].[企業名] FROM T_企業マスタ ORDER BY [企業名];
連結列
    1
列数
    2
列幅
    0cm;4.604cm

1

テーブルのルックアップ機能では無理ですね。

テーブルからフォームを作成して、
VBAでコンボボックスのリストのデータを制御することになります。

どちらにしても、Accessでは入力作業は、テーブルでするものではなく、フォームでするのが基本です。
フォームならいろいろな制御ができるので、安全かつ高機能なUIを構築できます。

まずは、現状のテーブルのルックアップの下記の設定を教えてもらえますか。

値集合ソース
連結列
列数
列幅

12

「ウィザード」機能は、初心者にとっては、質問に答えていくだけで、それなりの結果を得られるので、便利なんですが、設定の意味を理解しなくてもできるので、スキルアップの障害になりかねないですね。
また、今回のように想定外のことが起こったり、一部修正しようとしたときに、何をしたらよいかわからないということになります。

ある程度スキルがあるのなら、とりあえず「ウィザード」でひな形をさっと作成して、あとはお好みで修正しながら仕上げるという使い方ができますけどね。

11
hiroton 2024/04/10 (水) 10:29:59 0799a@f966d >> 8

そんな機能あるんですねぇ。そして、運用を考えたら今回の問題が起こるような使い難い機能だと・・・

10

クエリの設定がお書きいただいた様に「日でグループ化: Format$…」となっていました。

最終的は表示場所の設定でOKなんですね。それぞれ指定をしていました。とても勉強になりました。
詳しく説明いただきありがとうございました。