>=IIf([Forms]![F_納品書出力依頼]![txb_納期検索1]="","000000",[Forms]![F_納品書出力依頼]![txb_納期検索1]) And <=IIf([Forms]![F_納品書出力依頼]![txb_納期検索2]="","999999",[Forms]![F_納品書出力依頼]![txb_納期検索2])
>=IIf(Nz([Forms]![F_納品書出力依頼]![txb_納期検索1],"")="","000000",[Forms]![F_納品書出力依頼]![txb_納期検索1]) AND IIf(Nz([Forms]![F_納品書出力依頼]![txb_納期検索2],"")="","999999",[Forms]![F_納品書出力依頼]![txb_納期検索2])
日付を選択した瞬間にイベントを走らせるのに、Me.Refresh をするというのは目的のための道具の選択が適切でないということです。
例えると、大根を切るのに適切な道具は、包丁ですが、チェーンソーを持ち出して切る、というイメージです。
追記です。
'キー入力フラグがfalseのときはフォーム入力値を確定する
If Me![chk_date] = False Then
DoCmd.RunCommand acCmdSaveRecord
End If
こうする事で、日付を選択した瞬間にイベントが発生することができました。
保存したいとか、そういう理由はありませんが、そこで保存したことによって
問題もないですし、イメージ通りに動くことができたのでよかったです。
ありがとうございました。
おはようございます。
ご返信ありがとうございます。
http://hiroses.seesaa.net/article/397791059.html
上記のサイトでは
日付選択カレンダーで日付を選択した瞬間にイベントを走らせる事ができないので
Me.Refreshを入れていると思います。
詳しくはわからないのですが・・・
'キー入力フラグがfalseのときはフォーム入力値を確定する
If Me![chk_date] = False Then
'Me.Refresh
Call txt_date_AfterUpdate()
End If
こちらを試してみたのですが、日付を選択した瞬間には発生しなかったでした。
フォーカスが移動した瞬間には発生します。
色々ググってみてはみたのですが、日付カレンダーはで日付を選択した瞬間は、イベントが発生しないみたいです。
テーブルでの並び順を名前の昇順ということは、通常はあまりないことです。
主キーフィールド順にするか、並び替え用のフィールドを用意するのが普通の設計です。
#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
どなたか分かりませんが、スタンプでは分かりませんので文章でお願い致します。
無事に昇順で表示させることができました。ありがとうございました。
どこまでがこの課題の必要情報か分からず、また社内情報保護の為小出しになってしまい申し訳ありません。
ここがよく分からないのですが、どういうことでしょうか?
ちなみに社内の既存のシステムなので、テーブル構成を変えるのが難しいです。
メインテーブルのレコードに全ての情報が集約されている感じのテーブル構成です。
T_指定席予約データ
何度かこのサイトで教えて頂いていますが、テーブルが「正規化」されていないから扱いにくいということですかね?例えば席関連のフィールドでいえば、T_指定席予約_席 のようなテーブルを作成して、そこに席関連だけのデータを格納しリレーションでつなぐ・・・といったことをしないといけないということですよね?
テーブル構成がどうなっているか不明なので、とりあえずの推測ですが、
IDをフィールドを最小か最大にすればいいのでは?
通常、コンボボックスのコントロールソースにはキーフィールドを格納するという設計になると思いますが、
このような質問が出てくるのは、その辺のテーブル設計がまずいのではという予感。
後だしで情報を追加していくのではなく、最初から関係するすべての情報を提示して質問してもらった方が、お互いに手間がないかと思いますが。
コンボボックスに同じ選択肢を羅列させないために集計でグループ化しているので、IDをフィールドに入れるとマズイ場合はどうすればよいでしょうか?
そのテーブルなら、ID の昇順にすればいいだけでは。
cmb_席2 の値集合ソースに下記のSQLを設定すればいいでしょう。
レスが遅くなってしまい申し訳ありません。
実際にはイベント会場の指定席管理システムを作っていまして、
このようなテーブルがあり、cmb_席種というコンボボックスから「座敷」を選択すると、cmb_席1コンボボックスの選択肢は「前列」だけになり、「前列」を選択するとcmb_席2の選択肢が1~20になり、この際数字が昇順になるように表示させたいということです。
このため、席2フィールドに全角数字と全角アルファベットがあります。
そもそもMe.Refreshをする必要性が分からないのですが、なんのために必要なのでしょうか。
リンク先の説明では、日付選択カレンダーで日付を選択した瞬間に「更新後処理」イベントを実行したいということのようですが、そのために Me.Refresh は目的と手段があっていないように思います。
Refresh はカレントレコードの更新をテーブルに反映させて(=レコード保存)、かつ、テーブルデータを再読込するということですが、その必要性があるでしょうか。(再読込するので一旦非表示になる)
「更新後処理」プロシージャを実行したいのなら、それをCallすれば済む話です。
リンク先のコードなら、下記でいいとおもうのですが。
もし、日付選択カレンダーで日付を選択した瞬間にレコード保存(?)したいのなら、下記でいいですし。
(再読込はしないので非表示にはならない)
hatena様
ありがとうございます。
こちらもやってみます!
hirotonさんの回答と同じ考え方のものですが、下記にサンプルがあります。
ご参考に。
hiroton様
ご回答ありがとうございます。
そのやり方をやってみます。
見栄えや使いやすさなどをよく判断してみます。
基本的にはできないですね
コントロールBの前面にテキストボックスを配置して、背景スタイルプロパティを「透明」に、コントロールソースで
=IIf([テキストボックスA]<>1,"███")
としてコントロールBを隠すとか、そんなことならできます前景色プロパティで、メインの背景と同じ色になるようにして、フォントの設定でうまく塗りつぶすようにします。境界線や立体表示、余白の設定なんかも調整する必要があります
コントロールによってはテキストボックスよりも前面に表示されるモノ(前後の優先順位が固定のコントロール)もあるので、それらに関しては打つ手なしだと思います
というようなテーブルデータとういことですか。
これはどのようなリストでしょうか。
データベース的な設計なら、主キー必須なので下記のような感じとかになるはずです。
で、主キーで並び替えます。
質問内容をあまり省略しすぎると、その内容に最適化された回答をしますので、
実際の処理に合わないものになる可能性が大きいです。
なるべく実態に近い質問内容にしてください。
例えば、前回の質問では、下記のようにいってますが、
もしこの内容なら、市町村コードというものがありますので、それで並び替えるとかになります。
説明不足で申し訳ありません。
ひとつ前の質問と関連するのですが、他のコンボボックスで選んだものによって選択肢が変わります。
例えば昇順に並べ替えたいコンボボックスがcmb_検索2だとすると、cmb_検索1でAを選ぶと1~20が、Bを選ぶとA~Zがリストに表示されるといったような感じです。
ならばデータ例もそうのように提示すべきですね。
全角数字のあとにアルファベットがくるのですか。
であるなら、前回の回答の最初のクエリでいいでしょう。
商品コード的なもので、数字+アルファベット という書式のものなら、
数字部分とアルファベット部分にわけて、それぞれ数値型、テキスト型フィールドにするという設計もあります。
というようなこともあるので、どのような書式になるのか、データ例もあげて、仕様を明確に提示してください。
同じフィールドにアルファベットが入る可能性があるので数値型に出来ません。
全角数字はVal関数では数値と判断されずに0になります。
StrConv関数で半角に変換してVal関数で数値化すればいいでしょう。
StrConv 関数 (Visual Basic for Applications) | Microsoft Learn
そもそも論ですが、数値順にならべたいフィールドを、テキスト型で全角数字にする意味が不明です。
素直に数値型のフィールドにしておけば無駄なことをせずにすみます。
StrConvやValで囲むことで無駄な処理が増えて、かつインデックスが無効になるので重くなります。
もし、表示上、全角にしたいのなら、フィールドのデータ型は数値型にしておいて、表示するときに全角に変換すればいいでしょう。
ありがとうございます!
思った通りに動かせるようになりました。
cmb_2の値集合ソースのクエリ(SQL)をcmb_1の値で絞り込んだものにします。
これだけだとcmb_1を変更してもリストが更新されないので、フォーカス取得時に再クエリします。
フィールドの書式設定を「固定」にすれば指数表示にはなりません。
倍精度浮動小数点型に変更するだけで、メモリ不足とは考えにくいですね。何か他に問題がありそうです。とりあえず下記の作業を上から順に不具合が解消するまで実行してみてください。
テーブルを新規に作成しなおす。
「最適化と修復」を実行する。
新規データベースファイルを作成して、そこに現状のデータベース内のオブジェクトをすべてインポートする。
ちなみに、小数点以下桁数が2桁までいいのなら、通貨型の方がいいですね。浮動小数点数は演算誤差が発生しますが、通貨型なら誤差が発生しません。
数値型でフィールドサイズを「十進型」にしてもいいですが、あまり一般的ではありません。
テキスト形式でエクスポートしているのでしょうか。
テーブルからクエリを作成して、クエリでFormat関数で書式を設定すればいいでしょう。
小数点以下桁数が2桁なら、
何をしたいのか不明瞭です。
まずは、下記を提示してください。
テーブルのサンプルデータ
上記データのクエリでの希望の出力結果
現状のクエリのSQL
あ、フィルターです。失礼致しました。
提示頂いた抽出条件を参考に、こちらで想定通りにフィルターされるようになりました!
ありがとうございます。
ソートは並び替えという意味ですが、ご希望のことは抽出(フィルター)ということですよね。
抽出条件を下記のように設定すればいいでしょう。
短いテキスト型です。
納期(フィールド)のデータ型はなんですか?
有難うございます。
単票フォームを作りたかったので、教えて頂いたサイトを参考に作成してみます。
いつも回答ありがとうございます。
Hatenaさんのサンプルと同じく左から右への印刷方向です。
提示して頂いた方法で希望通りのレイアウトになりました!
毎度ながら、テーブル構成・クエリ・フォーム・レポート、どんな質問に対しても精通していらっしゃって感服です、、、ありがとうございました。
サンプルを作成して確認してみたら、「左から右へ」に設定してあるときに、質問の症状が発生しました。
ご希望のことは、最後のグループフッターの後に、全体の集計を表示させたいということでしょうか。
レポートフッターでは無理のようですので、全体を一つのグループとするグループフッターを作成してそこに全体の集計を表示させるようにすればどうでしょう。
具体的な手順は、「グループ化と並べ替え」でグループを追加して、フィールドの選択で一番下の「式」をクリックします。
式ビルダーが開きますので、そこで
=1
と固定値の式を設定します。これを一番上に移動して、「グループフッター付き」にします。そこに、レポートフッターにあった集計テキストボックスを移動させればいいでしょう。ページ設定のレイアウトで列数を2に設定しているということですね。
「印刷方向」の設定は、
「左から右へ」か「上から下へ」かどちらになってますか。
また、現状のデータでは、1列に何行表示されていて、実際のレコード数は何件ですか。
訪問データを入力するフォームを作成する必要がありますが、
その場合、単票フォームでもいいですか。それとも帳票フォームがご希望ですか。
帳票フォームは少し難しいので、下記のサイトで単票フォームの場合の作成法を研究して、まずは単票フォームを作成してみてください。
ACCESS コンボボックスの絞り込みをする方法 - たすけてACCESS
それができてから、帳票フォームに取り組むのがいいと思います。
回答ありがとうございます、自己解決できました。
T_出力の各フィールドのNullをNzで""にしたらクエリを実行しても警告がでなくなりました。
回答ありがとうございます。
テーブルのルックアップでは無理なんですね。
ルックアップ設定は以下になります。
顧客テーブルの企業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
テーブルのルックアップ機能では無理ですね。
テーブルからフォームを作成して、
VBAでコンボボックスのリストのデータを制御することになります。
どちらにしても、Accessでは入力作業は、テーブルでするものではなく、フォームでするのが基本です。
フォームならいろいろな制御ができるので、安全かつ高機能なUIを構築できます。
まずは、現状のテーブルのルックアップの下記の設定を教えてもらえますか。
値集合ソース
連結列
列数
列幅
「ウィザード」機能は、初心者にとっては、質問に答えていくだけで、それなりの結果を得られるので、便利なんですが、設定の意味を理解しなくてもできるので、スキルアップの障害になりかねないですね。
また、今回のように想定外のことが起こったり、一部修正しようとしたときに、何をしたらよいかわからないということになります。
ある程度スキルがあるのなら、とりあえず「ウィザード」でひな形をさっと作成して、あとはお好みで修正しながら仕上げるという使い方ができますけどね。
そんな機能あるんですねぇ。そして、運用を考えたら今回の問題が起こるような使い難い機能だと・・・
クエリの設定がお書きいただいた様に「日でグループ化: Format$…」となっていました。
最終的は表示場所の設定でOKなんですね。それぞれ指定をしていました。とても勉強になりました。
詳しく説明いただきありがとうございました。