初心者で申し訳ありませんが、なかなか理解できていないので教えてください。
色々な式を作るとき、ここはコントロールソースを引用するべきなのか、フィールド名(txtタイトル、みたいなもの)を引用するべきなのか、未だにピンときません。
両方入れて試したりしています。
局面局面で公式として覚えるものなのか、理屈で語れるものであれば知りたいです。
こんな質問で申し訳ありません。
通報 ...
初心者で申し訳ありませんが、なかなか理解できていないので教えてください。
色々な式を作るとき、ここはコントロールソースを引用するべきなのか、フィールド名(txtタイトル、みたいなもの)を引用するべきなのか、未だにピンときません。
両方入れて試したりしています。
局面局面で公式として覚えるものなのか、理屈で語れるものであれば知りたいです。
こんな質問で申し訳ありません。
フィールドとはテーブルやクエリで設定した列のことを言います。フィールド名はその各列を識別するための名前ですね。
「txtタイトル、みたいなもの」はフォーム上に設置したテキストボックスやコンボボックスにつけた名前ですよね?これらフォーム上に設置するモノのことをコントロールと言います。ですので、「txtタイトル、みたいなもの」はコントロール名です。
「コントロールソースを引用する」ということは通常しません。
掲示板でのやり取りの関係上、「txtタイトルのコントロールソースを指定してください」と回答することはありますが、往々にして質問者がコントロール名しか提示していないためフィールド名がわからずそうせざるを得ない。といった理由からです。
よく使うので覚えてしまったものもありますが、やりたいことで検索したりMicrosoft公式のドキュメントを見れば書いてあるのでその通りにやるだけです。フィールド名を指定する必要がある場所にはそう書いてあります。
そもそもの話、フィールドを参照するコントロールをフィールド名と異なるコントロール名にすることがまずないので、どうしてそんなことに・・・などと思ってしまいますが
なんだか色々勘違いしていたようで…すみません。
フィールド名は大元の名前(テーブルのフィールド名) 例:「タイトル」
コントロール名はフォームでテキストボックス等につける名前 例:「txtタイトル」
ですよね?
>フィールドを参照するコントロールをフィールド名と異なるコントロール名にすることがまずないので
?認識が間違っているでしょうか…😓
特に間違いはないですが、コントロール名とフィールド名の間に制約はないので、レコードソースの「タイトル」フィールドを参照するコントロールに「タイトル」という名前を付けることは普通にできることです。(コントロール名「タイトル」のコントロールソースに「タイトル」を指定する)
実際、既存のフィールドの追加からコントロールを追加するとデフォルトでフィールド名をコントロール名としたコントロールができるのがACCESSの仕様ですし
テーブル名はTから始めましょう、クエリ名はQから始めましょうのイメージでテキストボックスならtxt、チェックボックスならchkという話はあるのかもしれませんが、デフォルトの仕様を否定するほどのメリットは感じられませんね
>デフォルトの仕様を否定するほどのメリットは感じられませんね
今まで参考にしていた本が全て(?)txtなど付けるものだったので
目から鱗が落ちました。
現在作成中のものは付けてしまったので今更変更しづらいですが、今後参考にさせていただきます
ちなみに悩む、というのが
If chkタイトル = True Then ←この時はコントロール名
DoCmd.OpenForm "F_作品", , , "作品NO='" & Me!txt作品NO ←フィールド名とコントロール名
上のようなときです。
SQLに関わるときがフィールド名になるのでしょうか?
とりあえずはその認識であっています。
フォームのフィルターに指定する文字列や、定義域集計関数(DLookupとか)の条件部分はSQLのWHERE句に相当する文字列を指定することになっています。
WHERE句はその条件指定で
(フィールド名)(比較演算子)(値)
の形をとれるため、これに従ってフィールド名を要求している部分にフィールド名を記述するというわけです。で、この時に使えるフィールド名はそのSQL文が実行されるときの対象となるデータ(テーブル、クエリや、フォームのフィルタならレコードソース)のフィールド名となります。
VBAの処理で文字列が生成され、その文字列をSQLとして処理する。「SQLに関わるとき」はそんな処理をしているんだと理解できるとフィールド名の使いどころもわかると思います。
スッキリしました!教えていただき、ありがとうございました。