- ベストアンサー
SQL文について
ACCESSのSQLについてなんですが・・・ MyQuery.SQL = "SELECT * FROM 納品書 WHERE 納品書.納品数 > 0;" などとやった場合、納品数が入っているレコードのみ抽出されると思いますが、 ヒットした件数を知りたいときには、MyRecSet.RecordCountで取得するのでしょうか? (DCNTは使えない) そのヒットした数だけループさせて処理する場合、どのようにするのが一般的でしょうか? (MOVENEXT等を使う?) SQL文で出来ることは、ACCESSの画面でのクエリー定義で出来るものでしょうか。 なんでもかんでも画面で定義する人と、ちょっとしたものでもSQLでガリガリ書く人といる みたいなので、そこらへんは各人の好みの問題なのかなあ、と思いまして・・・。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
画面でクエリを作って、SQLビュー経由でVBAに貼り付けるのが好きな人です。SELECT云々って書くよりもマウスのドラッグ数回で行うほうが効率もいいしミスも減りますから。 そしてその後、VBAを使ってWhere文を組み立てるってのが王道ですね。パラメータ付のクエリなんかは、余程のことがない限り使いません。(こだわりです(^^;) 逆もよくやりますね。うまく動かないSQLなんかはクエリのSQLビューにコピペして、「目で見て」解析します。あるいは、VBAで組んだSQLの内容を確認するときなんかも… 件数の取得については、その時々ですね。SQL主体で作っているときには 「SELECT Count…」を使いますし、(お書きになられたように)ヒットした数だけループをまわしたいときにはレコードセットでRecordCountを使います。(その後、MoveNext等でループをまわします。) 特に件数を取得しなくてもいい場合も多いので、そんなときは Do Until MyRecSet.EOF : MyRecSet.MoveNext Loop を使いますね。 要は効率とソースの見易さを重視してやっています。 >SQL文で出来ることは、ACCESSの画面でのクエリー定義で出来るものでしょうか。 「ほぼ」できます。一部、UNIONクエリなどは、SQLを使ってやらないといけないですが…
その他の回答 (2)
- nanashan
- ベストアンサー率37% (11/29)
Recordsetで開けて、処理をする人と、SQL文でかましまくる人と人それぞれですね。クラサバであれば、ミドルの問題もあって、それぞれ書き方も変えたり・・・。やたらと、フィールドが多いと、配列にしたり。(ちなみにアクセスでも配列が使えます。知りたかったら、又後で聞いてね。)融通を利かすのであれば(後で、カスタマイズしやすくするには)Recordsetでやりますね。 肝心のRecordCountについてですが Dim MyRec As Recordset Dim WSQL As String WSQL = "SELECT * FROM 納品書 WHERE 納品書.納品数 > 0;" Set MyRec = CurrentDb.OpenRecordset(WSQL, dbOpenSnapshot) MyRec.MoveLast MsgBox MyRec.RecordCount SQL文ならSelect Countで出来ますし、画面上のクエリで大抵出来ますね。
お礼
回答、ありがとうございます。
補足
やはり、人それぞれっていうことですね。 私は汎用機のプログラムをやっていたので、やはりロジックでガリガリ書く方が好きですね。 RecordCountについての説明、ありがとうございます。 SQLは簡単そうで、奥が深そうですね。知って損はないと思いますので、まだまだ勉強しようと思います。
- TMINET
- ベストアンサー率32% (45/140)
件数取得は SELECT COUNT(*) FROM 納品書 WHERE 納品書.納品数 > 0 が一般的ではないでしょうか。 >SQL文で出来ることは、ACCESSの画面でのクエリー定義で出来るものでしょうか。 出来ます。 AccessのSQLビューを使います。 ですがAccessのSQLはちょっと変わっていますのでORACLEなどと混同しないように注意が必要です。 ANSI準拠部分は大丈夫です。
お礼
回答、ありがとうございます。
補足
SQL文は、非常に奥が深そうなので、これからも知識を深めたいと思います。 っというか、やってみて、エラーを出して、直してみて・・・ の繰り返しで、覚えていく感じがしてます。
お礼
回答、ありがとうございます。
補足
ACCESSでSQLを作らせて、VBAに貼り付けする技は、私も何度かやったことがありますが、""で囲むやり方とかを間違えて、 エラーをよく出してしまいます。 参考ロジック、ありがとうございます。 やはり、ロジック好きな私としては、ループで回す方がプログラムの流れがわかって良いですね。