質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

解決済

2回答

5343閲覧

ADOを使用し、DBに接続する際のSQL文の記述の仕方 Access VBA

nekomura

総合スコア132

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

0クリップ

投稿2016/05/02 02:36

編集2016/05/02 02:38

よろしくお願いいたします。
下記の作業を、ネットで拾った資料で勉強しているのですが、
「*2」の部分について質問です。
*1 ADOを使用してデータベースに接続します。

*2 SELECT文を使用したSQL文です。
テーブル「T_社員マスタ2013」から「性別」フィールドの「男」を抽出します。

*3 SQLを実行します。

4* Do~Loop処理でEOF(ファイルの末尾)まで抽出を繰り返します。**

*5 イミディエイトウインドウに抽出結果を表示します。

Private

1 2Dim CN As ADODB.Connection ’*1 3Dim RS As ADODB.Recordset 4Dim SQL As String 5 6Set CN = CurrentProject.Connection 7Set RS = New ADODB.Recordset 8 9SQL = “SELECT ” ‘*2 10SQL = SQL & “T_社員マスタ2013.社員コード, ” 11SQL = SQL & “T_社員マスタ2013.名前, ” 12SQL = SQL & “T_社員マスタ2013.性別 ” 13SQL = SQL & “FROM ” 14SQL = SQL & “T_社員マスタ2013 ” 15SQL = SQL & “WHERE ” 16SQL = SQL & “(((T_社員マスタ2013.性別)=’男’));” 17 18RS.Open SQL, CN, adOpenStatic, adLockOptimistic ‘*3 19 20Do Until RS.EOF ‘*4 21 22Debug.Print RS!名前 ‘*5 23 24RS.MoveNext 25Loop 26 27RS.Close: Set RS = Nothing 28CN.Close: Set CN = Nothing 29 30End Sub 31 32プログラムの説明 33コード

*2」のソース部分ですが、代入を繰り返しながら記述されている変数SQLは、最終的(?)には

SELECT T_社員マスタ.社員コード,T_社員マスタ.名前,社員マスタ.性別 FROM T_社員マスタ WHERE T_社員マスタ.性別 = '男'

という結果になっているということですか?
もしそうであれば、変数に代入する式を8つにも細切れで分ける理由はなんでしょうか?
また、
SQL = SQL & “(((T_社員マスタ2013.性別)=’男’))
部分の**()の使い方の意味もよくわかりません**。

参考にしたサイトには、特にこの部分の解説は無く、不明点が残りました。
きちんと理解がしたいので、
有職者の方々からのご解説を頂戴いたしたく存じます。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

変数に代入する式を8つにも細切れで分ける理由はなんでしょうか

SQL文を組み立てるときの定石ですね
例示されているものはやりすぎな感がありますが

結構

SELECT [指定するフィールド] FROM [テーブル] WHERE [検索条件] AND [検索条件]

みたいにすると、コードエディタで見通しがききやすい気がして個人的にもよくやっていました
AccessVBAには当てはまりませんが、最近はORMのできがよくなってきているので、コード内にSQLを直書きすることもなくなってきているので、あまり使われなくなっていくかもしれません

いくつも():カッコがつくのは、Accessのクエリビルダで生成すると、たまにそうなることがあった印象があるので、クエリビルダで生成したクエリをコピペしているとかでは?

あと今回の件には関連性が低いかもしれませんが「T_社員マスタ.性別 = '男'」のように可変部分があるものはパラメータクエリを使うような方向性にした方がよいかもです

投稿2016/05/02 04:03

dojikko

総合スコア3939

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nekomura

2016/05/02 04:13

dojikko様 なるほど、とても勉強になりました。 疑問点を解決することができ感謝いたします。 付け加えていただいた、パラメータークエリについても少し調べてみました。 「可変部分がある場合には」パラメーターを使った方が良いとのこと、まだ私の程度ではネットで調べたところあまり理解ができなかった為、 もしよろしければそちらの簡単な理由の説明を併せてご教示いただければ幸甚です。
guest

0

結合文についてですが,理解はそれであっています.

見苦しいな,と感じられてるその感性はおそらく正しいです.
ただ,1行でバーっと書くよりも見やすいケースがありますよね?
たとえばテーブル名が変数だったりとか,もしくはその結合自体に何らかの意味を明示したい(コメントしたい)時などです.

括弧の数については,ただ多すぎなだけですね.
もしかしたらもともとAND句で条件を複合していたのかもしれないです.

私としては「おやっ?」と感じている貴方の感性が正しい,と思いますよ.

投稿2016/05/02 03:31

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nekomura

2016/05/02 04:05

Oh-ZAK様 ご回答ありがとうございます。 また、初心者の私にはとても励みとなる内容で、大変ありがたく思いました。 今後ともまたご指南などいただければ幸いです。 よろしくお願いいたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問