SELECT テーブル.[ID], テーブル.変位2
FROM テーブル
WHERE (((Tテーブル.[ID]) Between 1 And 9) AND ((テーブル.変位2)=DMax("変位2","テーブル","ID>=1 AND ID<=9")))
ORDER BY テーブル.ID DESC;
上記のように抽出したレコードの件数に応じて「記号」フィールドに"※"を付けたいです
sqlを教えていただけませんか?お願いいたします
SELECT テーブル.[ID], テーブル.変位2
FROM テーブル
WHERE (((Tテーブル.[ID]) Between 1 And 9) AND ((テーブル.変位2)=DMax("変位2","テーブル","ID>=1 AND ID<=9")))
ORDER BY テーブル.ID DESC;
上記のように抽出したレコードの件数に応じて「記号」フィールドに"※"を付けたいです
sqlを教えていただけませんか?お願いいたします
更新クエリを使うと良いでしょう
更新クエリを作成して実行する
Google検索
SQL(構文)を見たいのであれば、クエリデザインで作成ののち、SQLビューに切り替えるのが簡単です
1件だったらこの処理。2件以上だったらこの処理、みたいな分け方をしたいのです。それはsqlではなくて、vbaの中でsolを書いてif分を付ける みたいな流れであっていますか?
「最後に求める処理」の規模によります
「件数」を求めること自体はSQL(または定義域集合関数(
DCount
))で出来るので、その値さえわかれば単純なクエリに落とし込める、ということであれば単一のクエリにすることもできるでしょう使えるならVBAを入れたほうがいろいろと捗ると思います
ありがとうございます。SQLビューをみて簡単なものは、抽出できるようになりました。
次は、クエリの条件を下記のような条件にしたいです。
(テーブル.フィールド)=DMax("フィールド","テーブル","№>=1 AND №<=9")
vbaで処理したいので、フィールドは「変数」にしたいのですが、Dmax関数の中の変数の書き方がわかりませんでした。
お願いいたします
全容と、問題としているポイントがわからないのでなんともですが、「SQL文をVBAで作ろうとして躓いている」ですかね?
VBA上では「
"
(ダブルクオーテーション)」で囲まれた部分は文字列として処理されます。その文字列内で「"
」そのものを記述したい場合は、記述したい位置で「"
」を2つ続けて記述します"DMax("""
& 変数 &
""",""テーブル"",""№>=1 AND №<=9"")"
もしくは、SQLでは文字列を指定するのに「
"
」のほか「'
」を使っても良いのでのように書き換えても動作します
つたない説明ですみません。クエリの抽出条件で「ダブルクオーテーション」を使うことは知っていたのですが、囲ってしまうと決め打ちの名前になってしまって思っていた変数として動かなくて...。「ダブルクオーテーション」を3つ使うと、固定した名前と変数と分けることができるのですね、ありがとうございます。ちなみに、これから覚えるとして「シングル」と「ダブル」どちらがおすすめでしょうか?
続けてすみません。SQLに使用したいので入力してみたのですがエラーになってしまいました。
A1は1から4まで変化していきます。こちらはfor Nextで回しています。
教えていただけますか?
難しい問題ですね。使用する言語それぞれについて知識を深め、それぞれ適切に使う。というあいまいな答えになってしまいます
前提として、自分がどのような言語を使っているのか?ということをはっきりさせておく必要があります。その言語というのが「VBA」と「SQL」となりますが、Microsoft Access上において、より厳密には「ACCESS VBA」と「ACCESS SQL」となります
特に、SQLは様々なデータベースで採用されていますが、それぞれのデータベースで少しずつカスタマイズされていて微妙に仕様が変わったりします
これらを踏まえて例えば、Microsoft Accessという環境の上で何かの処理をしたい場合、
という記述は、ACCESSのクエリデザインやフォーム上(テキストボックスのコントロールソース)、VBAなど、どこで記述しても使える記述ですが、
は、VBAでは使えません。VBAではシングルクオーテーションはそれ以降をコメントとするという記述になるので、この記述は構文エラーになってしまいます
このような観点からは「SQL構文を直接VBAで操作する」というようなことが無ければ「ダブル」だけ覚えておけば済むともいえます
Accessというアプリケーションとしても、文字列として補完される場合はダブルクオーテーションが使われるのがデフォルトですね
しかしながら、今回の問題のように、VBAでSQL構文を作ることを考えた場合は、シングルクォーテーションを使ったほうが見やすい・記述が少ないというメリットが得られます。コードを記述するうえではミスをしにくい記述を心がけるというのが大事になってくるので、「VBAでSQL構文を操作する場合に限って」はシングルクオーテーションを使えるようになったほうがいいと思います。
もう少し前後がないと何ともですが必要そうなところを記述すると
1~4と、数字部分だけが変わるのであればその前の部分までは直接文字列で記述しておけばいいです
ありがとうございます。直接文字列と A1 で入力したのですが
Dmaxの文章を追加したら「エラー13 型が一致しません」になってしまいました。
よろしくお願いいたします
パッと見る限りは記述には問題なさそうですね。そのエラーが出たとき、デバッグボタンでエラーの出た行を表示するとどの行がハイライトしていますか?
ありがとうございます
の全文が黄色になってしまいました。
以下、サンプルコードを実行してみました
イミディエイトウィンドウには
と表示されエラーは発生しません
問題があるとすれば
StrSQL
の型宣言が間違っているくらいですかねご指摘の通り宣言の型が違っておりました。さらっと解決いたしました。ありがとうございます!!
では、ついでに
内容が具体的ではなかったのでクエリ側でDMax関数を使う形で回答していましたが、VBA上だけで完結する内容であれば、DMaxの計算は外に出してしまったほうが分かりやすくなると思います