番号 Between " & 印刷自 & " And " & 印刷至 自己解決です。これでできました。ありがとうございました。
直接開く時は、新規レコード入力の状態で開きたいということですね。 デザインビューてフォームの「データ入力用」プロパティを「はい」にしておくといいでしょう。
呼び出すときは編集モード(acEdit)で呼び出します。
Dim args As String args = Me.商品コード DoCmd.OpenForm "F05_更新削除", acNormal, , "商品コード='" & args & "'", acEdit, acDialog
"番号 Between " & 印刷自 & " And " & 印刷至 上記のように記入しましたが駄目でした。
ありがとうございます。 F05_更新削除を、なんとか教えてもらったリンク先の通り連結フォームで作ってレコードソースをT01_商品としました。 F05_更新削除を呼び出すフォームのコマンドボタンに下記のように記してデータ取得でき、希望通りになりました! Dim args As String args = Me.商品コード DoCmd.OpenForm "F05_更新削除", acNormal, , "商品コード='" & args & "'", , acDialog
別のフォームからF05_更新削除を開くときはこれでいいのですが、F05_更新削除を直接開くときにレコードソースが指定してあるのでもともとデータが入った状態で表示されますが、これを空白で表示させるやり方はありますか?
例えば読み込み時に「'DoCmd.GoToRecord acDataForm, "F05_更新削除", acNewRec」と入力して 開いたとき新規レコードにしてしまえばと思ったのですが、これだと先ほど教えていただいたこのフォームをargsで呼び出すときに影響してしまいます。 よろしくお願いいたします。
お返事ありがとうございます。 これは分割フォームにサブフォームを表示していたのですが、この仕様・方向に無理があったと諦めて作り直しました。 質問を閉じておくべきでした、 気にかけさせてしまったすみませんでした。
非連結の理由は、気付かずに誤入力しても簡単に更新されてしまうのを防ぐためです。 どうも連結させてると、なんだか知らずにデータが書き換わってしまうので非連結で更新ボタン押さないと更新されないようにしました。もっと簡単な誤入力を防ぐ方法はありますか?
下記を参考にしてください。
レコード入力時に「保存」コマンドボタンでのみレコード保存できるようにする - hatena chips
なるほど、うまく行きました! 確かに色分けされています。全く気にしていませんでした。これからは意識するようにしたいと思います。 ありがとうございました。
できました!!! ありがとうございます!!!
テキスト型なら
Me!テキストA.DefaultValue = """" & Me!テキストA & """" Me!テキストC.DefaultValue = """" & Me!テキストC & """"
参考:ダブルコーテーションの表示(Office TANAKAさん)
なお、この使い方の場合はNullを気にする必要はありません
Me!テキストA.DefaultValue = Null '=>エラーになるので対処が必要 Me!テキストA.DefaultValue = """" & Null & """" '=>「""」として処理されるのでNullはそのままで使える
ありがとうございます! 何度もすみません。。。 データ型が短いテキストの場合、#Name となってしまいます。規定値のプロパティを見ると、その文字列の前に『="』と後に『"』をつけないといけないようなんですが、どうすればいいかわかりません。
貼り付けて頂いたリンクを読みましたが正直よく理解できていません。。。 ほんとに初心者の質問ですみません。
Nullの場合があるなら空白に置き換えればいいかな
Me!テキストA.DefaultValue = Nz(Me!テキストA, "") Me!テキストC.DefaultValue = Nz(Me!テキストC, "")
早々のご回答ありがとうございます。 やってみましたが、実行時エラー94 Nullの使い方が不正です。とでます。 コピー元のテキストCの値が空白(NULL)の場合、このエラーが出るようです。 差し支えなければ回避策ご教授下さい。
あー、すみませんコードがみすってました 修正後コード
Shell "Explorer.exe """ & freePath & """", vbNormalFocus
正しくは Shell "Explorer.exe """ & freePath & """", vbNormalFocus です 最初のコードをコピペすると Shell "Explorer.exe """ & freePath & """, vbNormalFocus" と自動修正が働いて、うまく動かないコードになります
やっぱり手打ち回答してるとみすりますね・・・ VBEでちゃんと確認してからなら最初のコードも
Shell "Explorer.exe """ & freePath & """, vbNormalFocus"
のように色分けされて、vbNormalFocusが文字列の色になってるぞおかしいってすぐわかるんですが、試してもらっているコードもこうなっていますよね?
追記です。 ①コードを直すと、以下のパスに書き換わります。 ②フォルダパスを開くボタンを押したとき、フォルダは開いているようなのですが、前面に出てこないため開いたことがわかりづらい状態になっております。
hatenaさん毎度ありがとうございます😊
また、argsの方ですがご教授のとおり記入してみましたがやはりF05_更新削除は開きますがデータが渡ってないみたいです。 空白で表示されてしまいます。 なにかF05_更新削除側で邪魔してるのでしょうか?? argsについて調べると両方に記述するように書いてありますが、何が違うんでしょうか? よろしくお願い致します。
ごめんなさい、、お礼を言った後に申し訳ないのですが、修正してみたところやはりうまくパス先に飛べませんでした。(今までと同じ状況) カンマ「,」を「&」に変更したらうまく飛ぶのですが…
ありがとうございます。非常に助かりました!
ご返事ありがとうございます。 お世話になります。
[date]部分ですが。 txtボックスから日付を入力したいです。 まぎらわしくてすみません。
Nullというのは、日付を設定せずに 入力したケースを想定してます。
★も5つ星まであって、 プルダウンで入力して、 入力している時と一切入力していない時を 想定したいです。
検索の項目は タイトル、詳細、日付、★コンボ、IDとあります。 このうち、タイトルと詳細をLikeで設置した場合、 入力したりしていなくても抽出できました。
ところが、 日付、★コンボ、IDを設置しようとすると 反応しません。
お手数ですが、御指南をヨロシクお願いいたします。
P.S. SQLの件ですが、ちょっと下準備が必要なので、 少しお時間をください。
厳密にはコピーではないですが、「新規レコードのフィールドに最初から入っている値」は規定値プロパティで指定できます
Access Study | Vol.13 フォーム&コントロール プロパティ活用辞典(T'sWareさん)
Sub ボタン_Click() Me!テキストA.DefaultValue = Me!テキストA Me!テキストC.DefaultValue = Me!テキストC DoCmd.GoToRecord , , acNewRec End Sub
リンク先に解説がありますが、フィールドAやフィールドCのデータによって記述の仕方が変わるので注意してください
パスにコマンドとして認識されてしまうような文字が含まれている場合はパス全体を「"」ダブルクオーテーションで囲む必要があります
Shell "Explorer.exe """ & freePath & """, vbNormalFocus
半角スペースが含まれてるパスなんかもよくあるパターンですね
分かりにくかったようですみません。実際に修正すべき部分だけを示すならば
[Me]![商品コード] ↓ [商品コード]
です。前後の変更しない部分を表記したほうが分かりやすいかなと思ったんですが余計でした
'"&の使い方
解決してそうですがせっかくなので技術的な話を DLookUpの第三引数にはWHERE句に相当する文字列を指定します。「文字列」なので実際に処理されるSQL構文を「"(ダブルクオーテーション)」で囲みます
SQL構文(一部) [商品コード]='A10' ACCESS上(VBA)での該当する部分の表記(前後を「"」で囲む) "[商品コード]='A10'"
今回の目的は「A10」を変数(フォーム上のテキストボックスの値)にしたいということなので、文字列の途中を抜き取るような形になります。元の文字列でそっくり残したい部分は前後に分割されて、それぞれで独立した文字列として「"」で囲みなおすことになります
SQLの文字 (文字列の前半) => [商品コード]=' (変数化したい文字部分)=> (任意の文字) (文字列の後半) => ' ACCESS上(VBA)での表記 (文字列の前半) => "[商品コード]='" (変数化したい文字部分)=> [商品コード] (文字列の後半) => "'"
そうして最後にそれぞれに分割した内容を文字列として連結するために「&」でつなぎます
結果 "[商品コード]='" & [商品コード] & "'"
更新削除が目的なら、連結フォームでやれば簡単ですが、非連結フォームでやる理由はなんでしょうか。
下記のように抽出条件を設定して開けば、目的のレコードが表示されます。更新削除フォーム側のコードは不要になります。
Dim args As String args = Me.商品コード DoCmd.OpenForm "F05_更新削除", acNormal, , "商品コード='" & args & "'", , acDialog
hatenaさま ありがとうございました。'"&の使い方がまだいまいち混乱してしまいます。 オートルックアップクエリも参照させていただきました。 まだ難しいですが勉強してみます。 ありがとうございました😄
解決
例えば日付のところにLike""&[Date]&""とやったり。 [Date]Or Is Nullとか頑張りましたが。
クエリで日付フィールドの値が、今日の日付のものとNullのものを抽出したいということでしょうか。 日付の抽出条件欄に、 [Date] Or Is Null でいいと思いますが、だめでしたか。
[Date] Or Is Null
それとも、別の結果を期待していますか。その場合、どのような結果を期待していますか。
クエリの抽出条件は、日付フィールド以外に複数設定していますか。
現状のクエリのSQL文も提示してもらえますか。
①のSQLは「値集合クエリ」に設定しているということですか。
まず、このSQLの Format(Year([満了日]) & "/" & Month([満了日]),"yyyy/mm") は、 Format([満了日],"yyyy/mm") で十分ですね。
Format(Year([満了日]) & "/" & Month([満了日]),"yyyy/mm")
Format([満了日],"yyyy/mm")
②のコードは下記でいいでょう。
Private Sub cbo満了日検索_AfterUpdate() DoCmd.ApplyFilter , "Format([満了日],'yyyy/mm')=[Forms]![F_管理リスト]![cbo満了日検索]" End Sub
VBAのコードにSQL条件式を埋め込む場合は、引用符として'(単引用符)を使います。
詳細は下記を読んでください。
Access上のコード内で引用符(")と単引用符(')の使い分けについて - hatena chips
一応自分でも努力して。 例えば日付のところにLike""&[Date]&""とやったり。 [Date]Or Is Nullとか頑張りましたが。
ダメでした。 ヨロシクお願い致します。
Meが使えるのは、はフォームかレポートのモジュールのみです。コードの記述してあるオブジェクトという意味です。
Me
フォームのコントロールソースプロパティでは使えません。大昔から現在まで使えません。
下記の式でいいと思います。
=DLookUp("[在庫数]","T01_商品","[商品コード]='" & [商品コード] & "'")
DLookUpは重いので、オートルックアップクエリを使うのをお勧めします。
ACCESSの基本技 オートルックアップクエリは超便利
オートルックアップクエリの利用 - もう一度学ぶMS-Access
追伸。フォームのプロパティソースにmeが使えないってことでしょうか?以前使った例を見たことある気がしますがバージョンによるものでしょうか?
ありがとうございます。 =DLookUp("[在庫数]","T01_商品","[商品コード]=& [商品コード] &) ということでしょうか? こちらもエラーになってしまいます。 よろしくお願い致します。
うまくいかないものでもいいので、現状のフォーム構成、VBAコードを提示してもらえますか。 それで、どこが「きれいに」いかないのか説明してください。
構文はVBAと同じで問題ないけどほとんどのキーワードは使えません Meも使えないので単に& [商品コード] &と記述して参照しましょう
& [商品コード] &
りんごさん こんにちは。コメントをありがとうございます。 また検証もしてくださったのですね。
解決策ですが、りんごさんも書かれていますように(hatenaさんが教えてくださった) 「クエリの結合プロパティを『T_顧客の全レコードと…』に変更する」で良いと思います。 (SQL的には内部結合から、T_顧客をメインとする外部結合に変更することになります。)
これで、担当者IDが空欄でも問題なく登録ができております。 取り違えていましたら申し訳ありませんが、ご返信までいたします。
担当者IDをDELETEして更新しようとするとエラーが出る、という事ですが、 クエリの段階でエラーを確認しました。 結合プロパティを変更すると、クエリとフォームでエラーが消失する事を確認しました。 解決策は、ごめんなさい、わかりませんでした。 迂回策ですが、此方、素人でパッと思いつくのは 担当者が未定の場合、空欄にして登録したい→担当者0(未定)を登録するみたいな感じか、 担当者が未定の場合、登録しない方向で、めっちゃ悩む感じか。 以下、駄文ですが 顧客テーブルの変更(顧客ID、顧客名)※担当者IDの削除 新しいテーブルの作成(顧客ID、担当者ID) 担当者テーブル(担当者ID、担当者名) 主キーどうする?、、、重複、ユニーク、、、 不一致クエリ、、、履歴どうする、、、そもそもテーブル設計的にどうなんだ?
>hatena様
ありがとうございます。 フォームでのエラーの件ですが、解決いたしました。
原因ですが、F_顧客のレコードソースが下記のSQLになっていました。 クエリの結合プロパティを変更したのは良かったのですが、フォームのレコードソースのSQLは以前のまま「INNER JOIN」になっていました。
SELECT [T_顧客].[顧客ID], [T_顧客].[顧客名], [T_顧客].[担当者ID], [T_担当者].[担当者名] FROM T_担当者 INNER JOIN T_顧客 ON [T_担当者].[担当者ID] =[T_顧客].[担当者ID];
このSQLの「INNER JOIN」を手動で「RIGHT JOIN」に変更、もしくはレコードレースに「Q_顧客」を設定することで、フォーム上でもエラーが出なくなりました。
当方の単純ミス&確認ミスで度々お手数をお掛けいたしました。 申し訳ありません。
今回の件は本質的には「クエリの結合プロパティの設定」に拠るものと分かりました。 色々と勉強になりました。大変ありがとうございました。御礼申し上げます。
別案「レコードソースにテーブルを設定&コンボボックスの値利用」もありがとうございます。 こちらでも問題なくできました。 状況によって、クエリVerと使い分けできそうです。 hatena chipsの方も時々拝見して勉強させて頂いています。有用な記事を惜しげもなく公開して頂いてとても参考になります。ありがとうございます。
そのようなフォームは普通によく作成しますが、そのような現象にあったことがないので不思議です。
解決策ではなく、別案の提案ですが、下記のようにしてみたらどうでしょうか。
フォームのレコードソースは、T_顧客 にします。 担当者ID のテキストボックスは右クリックして[コントロールの種類の変更]-[コンボボックス]でコンボボックスにします。 このコンボボックスのプロパティを下記のように設定します。
コントロールソース 担当者ID 値集合ソース T_担当者 列数 2 列幅 3cm;0cm 名前 cb担当者ID
「担当者名」のテキストボックスの設定を下記のようにします。 コントロールソース =[cb担当者ID].Column(1)
これで担当者名が表示できます。
これだとレコードソースはテーブルなのでエラーが出ることはないと思われます。
あるいは、下記で紹介しているような方法をつかってみるのもいいかと思います。
コードでも名称でも入力できるコンボボックス - hatena chips
お忙しい中、度々ありがとうございます。 はい。「フォームの担当者IDと結合したテキストボックスの規定値プロパティ」は空欄になっております。 困りました。どこがマズいのか、未だ検討がついておりません。。。
フォームの担当者IDと結合したテキストボックスの規定値プロパティの空欄になってますか。
お忙しい中、早々にご返信をありがとうございます。 全て試してみました。フォーム上では同じエラーが出てしまい、ダメでした。(しかしながら「Q_顧客」のデータシートビュー上ではエラーが出なくなりました。)
・「T_顧客」の「担当者ID」フィールドのプロパティで「値要求」は「いいえ」になってますか。 →はい。
・「規定値」は空欄になってますか →はい。
・「クエリのデザインビューで結合線をクリックして、結合プロパティを表示させて、 「T_顧客の全レコードと・・・」というオプションを選択してください。」 →こちらは少し変化がありました。Q_顧客をデータシートビューで開いて、担当者IDを空欄にしても当該エラーは出なくなりました。しかし、フォーム上で空欄にしますと以前として当該エラーが出てしまいます。
・そのフォームでVBAが設定されてませんか。 →はい、VBAは記述しておりません。(検証用に新規DBも作成しまっさらな状態でテストしています。Accessが勝手に追加したacwwzlib, acwzmain, acwztoolモジュールはあります。)
クエリの結合線プロパティでInner joinからLeft Join等に変更できるのですね。SQLベースで考えるとこれで納得できます。大変勉強になります。ありがとうございます。 あとはフォーム上では何故かまだエラーが出ております。これが解消できれば良いのですが。
「T_顧客」の「担当者ID」フィールドのプロパティで「値要求」は「いいえ」になってますか。 「規定値」は空欄になってますか。
クエリのデザインビューで結合線をクリックして、結合プロパティを表示させて、 「T_顧客の全レコードと・・・」というオプションを選択してください。
T_顧客
上記の点を確認ください。もし、それでも解消しない場合は、そのフォームでVBAが設定されてませんか。設定れていたら、いちどそれを削除してみて試してみてください。(コードはバックアップしておいてください。)
①②ともOKのはずですのでまずは試してみてください。 それでうまくいかなければ、その時にどのようにしてどのようにうまくいかないか質問してください。
Accessのテーブルやクエリのデータを貼り付ける場合は下記で、Markdown書式のテーブルに変換して貼り付けてください。
Markdown Tables generator
番号 Between " & 印刷自 & " And " & 印刷至
自己解決です。これでできました。ありがとうございました。
直接開く時は、新規レコード入力の状態で開きたいということですね。
デザインビューてフォームの「データ入力用」プロパティを「はい」にしておくといいでしょう。
呼び出すときは編集モード(acEdit)で呼び出します。
"番号 Between " & 印刷自 & " And " & 印刷至
上記のように記入しましたが駄目でした。
ありがとうございます。
F05_更新削除を、なんとか教えてもらったリンク先の通り連結フォームで作ってレコードソースをT01_商品としました。
F05_更新削除を呼び出すフォームのコマンドボタンに下記のように記してデータ取得でき、希望通りになりました!
Dim args As String
args = Me.商品コード
DoCmd.OpenForm "F05_更新削除", acNormal, , "商品コード='" & args & "'", , acDialog
別のフォームからF05_更新削除を開くときはこれでいいのですが、F05_更新削除を直接開くときにレコードソースが指定してあるのでもともとデータが入った状態で表示されますが、これを空白で表示させるやり方はありますか?
例えば読み込み時に「'DoCmd.GoToRecord acDataForm, "F05_更新削除", acNewRec」と入力して
開いたとき新規レコードにしてしまえばと思ったのですが、これだと先ほど教えていただいたこのフォームをargsで呼び出すときに影響してしまいます。
よろしくお願いいたします。
お返事ありがとうございます。
これは分割フォームにサブフォームを表示していたのですが、この仕様・方向に無理があったと諦めて作り直しました。
質問を閉じておくべきでした、
気にかけさせてしまったすみませんでした。
下記を参考にしてください。
レコード入力時に「保存」コマンドボタンでのみレコード保存できるようにする - hatena chips
なるほど、うまく行きました!
確かに色分けされています。全く気にしていませんでした。これからは意識するようにしたいと思います。
ありがとうございました。
できました!!!
ありがとうございます!!!
テキスト型なら
参考:ダブルコーテーションの表示(Office TANAKAさん)
なお、この使い方の場合はNullを気にする必要はありません
ありがとうございます!
何度もすみません。。。
データ型が短いテキストの場合、#Name となってしまいます。規定値のプロパティを見ると、その文字列の前に『="』と後に『"』をつけないといけないようなんですが、どうすればいいかわかりません。
貼り付けて頂いたリンクを読みましたが正直よく理解できていません。。。
ほんとに初心者の質問ですみません。
Nullの場合があるなら空白に置き換えればいいかな
早々のご回答ありがとうございます。
やってみましたが、実行時エラー94 Nullの使い方が不正です。とでます。
コピー元のテキストCの値が空白(NULL)の場合、このエラーが出るようです。
差し支えなければ回避策ご教授下さい。
あー、すみませんコードがみすってました
修正後コード
正しくは
Shell "Explorer.exe """ & freePath & """", vbNormalFocus
です
最初のコードをコピペすると
Shell "Explorer.exe """ & freePath & """, vbNormalFocus"
と自動修正が働いて、うまく動かないコードになります
やっぱり手打ち回答してるとみすりますね・・・
VBEでちゃんと確認してからなら最初のコードも
のように色分けされて、vbNormalFocusが文字列の色になってるぞおかしいってすぐわかるんですが、試してもらっているコードもこうなっていますよね?
追記です。
①コードを直すと、以下のパスに書き換わります。
②フォルダパスを開くボタンを押したとき、フォルダは開いているようなのですが、前面に出てこないため開いたことがわかりづらい状態になっております。
hatenaさん毎度ありがとうございます😊
非連結の理由は、気付かずに誤入力しても簡単に更新されてしまうのを防ぐためです。
どうも連結させてると、なんだか知らずにデータが書き換わってしまうので非連結で更新ボタン押さないと更新されないようにしました。もっと簡単な誤入力を防ぐ方法はありますか?
また、argsの方ですがご教授のとおり記入してみましたがやはりF05_更新削除は開きますがデータが渡ってないみたいです。
空白で表示されてしまいます。
なにかF05_更新削除側で邪魔してるのでしょうか??
argsについて調べると両方に記述するように書いてありますが、何が違うんでしょうか?
よろしくお願い致します。
ごめんなさい、、お礼を言った後に申し訳ないのですが、修正してみたところやはりうまくパス先に飛べませんでした。(今までと同じ状況)
カンマ「,」を「&」に変更したらうまく飛ぶのですが…
ありがとうございます。非常に助かりました!
ご返事ありがとうございます。
お世話になります。
[date]部分ですが。
txtボックスから日付を入力したいです。
まぎらわしくてすみません。
Nullというのは、日付を設定せずに
入力したケースを想定してます。
★も5つ星まであって、
プルダウンで入力して、
入力している時と一切入力していない時を
想定したいです。
検索の項目は
タイトル、詳細、日付、★コンボ、IDとあります。
このうち、タイトルと詳細をLikeで設置した場合、
入力したりしていなくても抽出できました。
ところが、
日付、★コンボ、IDを設置しようとすると
反応しません。
お手数ですが、御指南をヨロシクお願いいたします。
P.S.
SQLの件ですが、ちょっと下準備が必要なので、
少しお時間をください。
厳密にはコピーではないですが、「新規レコードのフィールドに最初から入っている値」は規定値プロパティで指定できます
Access Study | Vol.13 フォーム&コントロール プロパティ活用辞典(T'sWareさん)
リンク先に解説がありますが、フィールドAやフィールドCのデータによって記述の仕方が変わるので注意してください
パスにコマンドとして認識されてしまうような文字が含まれている場合はパス全体を「"」ダブルクオーテーションで囲む必要があります
半角スペースが含まれてるパスなんかもよくあるパターンですね
分かりにくかったようですみません。実際に修正すべき部分だけを示すならば
です。前後の変更しない部分を表記したほうが分かりやすいかなと思ったんですが余計でした
解決してそうですがせっかくなので技術的な話を
DLookUpの第三引数にはWHERE句に相当する文字列を指定します。「文字列」なので実際に処理されるSQL構文を「"(ダブルクオーテーション)」で囲みます
今回の目的は「A10」を変数(フォーム上のテキストボックスの値)にしたいということなので、文字列の途中を抜き取るような形になります。元の文字列でそっくり残したい部分は前後に分割されて、それぞれで独立した文字列として「"」で囲みなおすことになります
そうして最後にそれぞれに分割した内容を文字列として連結するために「&」でつなぎます
結果
"[商品コード]='" & [商品コード] & "'"
更新削除が目的なら、連結フォームでやれば簡単ですが、非連結フォームでやる理由はなんでしょうか。
下記のように抽出条件を設定して開けば、目的のレコードが表示されます。更新削除フォーム側のコードは不要になります。
hatenaさま
ありがとうございました。'"&の使い方がまだいまいち混乱してしまいます。
オートルックアップクエリも参照させていただきました。
まだ難しいですが勉強してみます。
ありがとうございました😄
解決
クエリで日付フィールドの値が、今日の日付のものとNullのものを抽出したいということでしょうか。
日付の抽出条件欄に、
[Date] Or Is Null
でいいと思いますが、だめでしたか。
それとも、別の結果を期待していますか。その場合、どのような結果を期待していますか。
クエリの抽出条件は、日付フィールド以外に複数設定していますか。
現状のクエリのSQL文も提示してもらえますか。
①のSQLは「値集合クエリ」に設定しているということですか。
まず、このSQLの
Format(Year([満了日]) & "/" & Month([満了日]),"yyyy/mm")
は、
Format([満了日],"yyyy/mm")
で十分ですね。
②のコードは下記でいいでょう。
VBAのコードにSQL条件式を埋め込む場合は、引用符として'(単引用符)を使います。
詳細は下記を読んでください。
Access上のコード内で引用符(")と単引用符(')の使い分けについて - hatena chips
一応自分でも努力して。
例えば日付のところにLike""&[Date]&""とやったり。
[Date]Or Is Nullとか頑張りましたが。
ダメでした。
ヨロシクお願い致します。
Me
が使えるのは、はフォームかレポートのモジュールのみです。コードの記述してあるオブジェクトという意味です。フォームのコントロールソースプロパティでは使えません。大昔から現在まで使えません。
下記の式でいいと思います。
DLookUpは重いので、オートルックアップクエリを使うのをお勧めします。
ACCESSの基本技 オートルックアップクエリは超便利
オートルックアップクエリの利用 - もう一度学ぶMS-Access
追伸。フォームのプロパティソースにmeが使えないってことでしょうか?以前使った例を見たことある気がしますがバージョンによるものでしょうか?
ありがとうございます。
=DLookUp("[在庫数]","T01_商品","[商品コード]=& [商品コード] &)
ということでしょうか?
こちらもエラーになってしまいます。
よろしくお願い致します。
うまくいかないものでもいいので、現状のフォーム構成、VBAコードを提示してもらえますか。
それで、どこが「きれいに」いかないのか説明してください。
構文はVBAと同じで問題ないけどほとんどのキーワードは使えません
Meも使えないので単に
& [商品コード] &
と記述して参照しましょうりんごさん
こんにちは。コメントをありがとうございます。
また検証もしてくださったのですね。
解決策ですが、りんごさんも書かれていますように(hatenaさんが教えてくださった)
「クエリの結合プロパティを『T_顧客の全レコードと…』に変更する」で良いと思います。
(SQL的には内部結合から、T_顧客をメインとする外部結合に変更することになります。)
これで、担当者IDが空欄でも問題なく登録ができております。
取り違えていましたら申し訳ありませんが、ご返信までいたします。
担当者IDをDELETEして更新しようとするとエラーが出る、という事ですが、
クエリの段階でエラーを確認しました。
結合プロパティを変更すると、クエリとフォームでエラーが消失する事を確認しました。
解決策は、ごめんなさい、わかりませんでした。
迂回策ですが、此方、素人でパッと思いつくのは
担当者が未定の場合、空欄にして登録したい→担当者0(未定)を登録するみたいな感じか、
担当者が未定の場合、登録しない方向で、めっちゃ悩む感じか。
以下、駄文ですが
顧客テーブルの変更(顧客ID、顧客名)※担当者IDの削除
新しいテーブルの作成(顧客ID、担当者ID)
担当者テーブル(担当者ID、担当者名)
主キーどうする?、、、重複、ユニーク、、、
不一致クエリ、、、履歴どうする、、、そもそもテーブル設計的にどうなんだ?
>hatena様
ありがとうございます。
フォームでのエラーの件ですが、解決いたしました。
原因ですが、F_顧客のレコードソースが下記のSQLになっていました。
クエリの結合プロパティを変更したのは良かったのですが、フォームのレコードソースのSQLは以前のまま「INNER JOIN」になっていました。
このSQLの「INNER JOIN」を手動で「RIGHT JOIN」に変更、もしくはレコードレースに「Q_顧客」を設定することで、フォーム上でもエラーが出なくなりました。
当方の単純ミス&確認ミスで度々お手数をお掛けいたしました。
申し訳ありません。
今回の件は本質的には「クエリの結合プロパティの設定」に拠るものと分かりました。
色々と勉強になりました。大変ありがとうございました。御礼申し上げます。
別案「レコードソースにテーブルを設定&コンボボックスの値利用」もありがとうございます。
こちらでも問題なくできました。
状況によって、クエリVerと使い分けできそうです。
hatena chipsの方も時々拝見して勉強させて頂いています。有用な記事を惜しげもなく公開して頂いてとても参考になります。ありがとうございます。
そのようなフォームは普通によく作成しますが、そのような現象にあったことがないので不思議です。
解決策ではなく、別案の提案ですが、下記のようにしてみたらどうでしょうか。
フォームのレコードソースは、T_顧客 にします。
担当者ID のテキストボックスは右クリックして[コントロールの種類の変更]-[コンボボックス]でコンボボックスにします。
このコンボボックスのプロパティを下記のように設定します。
コントロールソース 担当者ID
値集合ソース T_担当者
列数 2
列幅 3cm;0cm
名前 cb担当者ID
「担当者名」のテキストボックスの設定を下記のようにします。
コントロールソース =[cb担当者ID].Column(1)
これで担当者名が表示できます。
これだとレコードソースはテーブルなのでエラーが出ることはないと思われます。
あるいは、下記で紹介しているような方法をつかってみるのもいいかと思います。
コードでも名称でも入力できるコンボボックス - hatena chips
>hatena様
お忙しい中、度々ありがとうございます。
はい。「フォームの担当者IDと結合したテキストボックスの規定値プロパティ」は空欄になっております。
困りました。どこがマズいのか、未だ検討がついておりません。。。
フォームの担当者IDと結合したテキストボックスの規定値プロパティの空欄になってますか。
>hatena様
お忙しい中、早々にご返信をありがとうございます。
全て試してみました。フォーム上では同じエラーが出てしまい、ダメでした。(しかしながら「Q_顧客」のデータシートビュー上ではエラーが出なくなりました。)
・「T_顧客」の「担当者ID」フィールドのプロパティで「値要求」は「いいえ」になってますか。
→はい。
・「規定値」は空欄になってますか
→はい。
・「クエリのデザインビューで結合線をクリックして、結合プロパティを表示させて、
「T_顧客の全レコードと・・・」というオプションを選択してください。」
→こちらは少し変化がありました。Q_顧客をデータシートビューで開いて、担当者IDを空欄にしても当該エラーは出なくなりました。しかし、フォーム上で空欄にしますと以前として当該エラーが出てしまいます。
・そのフォームでVBAが設定されてませんか。
→はい、VBAは記述しておりません。(検証用に新規DBも作成しまっさらな状態でテストしています。Accessが勝手に追加したacwwzlib, acwzmain, acwztoolモジュールはあります。)
クエリの結合線プロパティでInner joinからLeft Join等に変更できるのですね。SQLベースで考えるとこれで納得できます。大変勉強になります。ありがとうございます。
あとはフォーム上では何故かまだエラーが出ております。これが解消できれば良いのですが。
「T_顧客」の「担当者ID」フィールドのプロパティで「値要求」は「いいえ」になってますか。
「規定値」は空欄になってますか。
クエリのデザインビューで結合線をクリックして、結合プロパティを表示させて、
「
T_顧客
の全レコードと・・・」というオプションを選択してください。上記の点を確認ください。もし、それでも解消しない場合は、そのフォームでVBAが設定されてませんか。設定れていたら、いちどそれを削除してみて試してみてください。(コードはバックアップしておいてください。)
①②ともOKのはずですのでまずは試してみてください。
それでうまくいかなければ、その時にどのようにしてどのようにうまくいかないか質問してください。