
No.3ベストアンサー
- 回答日時:
#2です。
>Set Cmd = New ADODB.Command
>Cmd.CommandText = ”CREATE VIEW ビュー AS SELECT * FROM テーブル WHERE 日付='2010/07/09'”
>Cmd.Execute
もちろん、権限があればできます。
しかし、そのリクエストをした人にもう一度確認することをお勧めします。
私もVB内で10行以上のクエリを組み立てて実行しているのを見てげっそりすることはありますので、
「長いクエリはビューで管理したい」というリクエストは理解できます。
ただ、本当に「パラメータまで含めて一切をビューにし、すべてWHERE文の一切ないSELECT * FROM ビューだけにしたい」
というリクエストをしたとすれば、その人はシステムのことを理解していないので、説明すべきだと思います。
・同時に複数のユーザ・複数の処理でビューを参照できなくなるので、ユーザ数×処理数だけ同じようなビューが必要
・ビュー定義の一部だけを再作成することはできないので、再作成には常に全部を実行する必要がある。処理はわかりやすくならない
No.2
- 回答日時:
パラメータを受け取るビューに相当するものとして、インラインテーブル関数がありますから、これを利用するのも一案です。
CREATE FUNCTION テーブル関数(@日付 datetime)
RETURNS TABLE
AS
RETURN
SELECT * FROM テーブル WHERE 日付=@日付
ただ、日付指定は行っているのに、ビューの中で絞り込みたいという質問の理由が、
「データが多いため、ビューの外側で条件を指定すると、時間がかかりすぎる(と思う)」であるならば、オプティマイザは優秀なので、条件を切る場所がビューの外でも、ビューの中でも実行プランは基本同じになります。
(もちろん、常に同じ、ではありません)
例えば、
CREATE VIEW ビュー
AS
SELECT * FROM テーブル WHERE 日付='2010/07/09'
GO
CREATE FUNCTION テーブル関数(@日付 datetime)
RETURNS
TABLE
AS
RETURN
SELECT * FROM テーブル WHERE 日付=@日付
GO
a) SELECT * FROM テーブル WHERE 日付='2010/07/09'
b) SELECT * FROM ビュー
c) SELECT * FROM テーブル関数('2010/07/09')
上記3つのクエリの実行プランは同じになるはずです。
この回答への補足
早速のご回答有難うございます。
普段は下記の様なソースを利用してレコードセットで結果を受け取るような方法を実現しております。
Set Cn = New ADODB.Connection
Cn.Open ODBC_Name
Set Rs = New ADODB.Recordset
Sql = "SELECT * FROM データ Where 日付='2010/07/07'"
Rs.Open Sql, Cn
CREATE VIEW などのコマンドはDOSプロンプト画面やバッチファイルなどからしか利用したことが無いのですが、
Set Cmd = New ADODB.Command
Cmd.CommandText = ”CREATE VIEW ビュー AS SELECT * FROM テーブル WHERE 日付='2010/07/09'”
Cmd.Execute
などといった使用ができるということでしょうか?
No.1
- 回答日時:
SELECT文でWhere句を指定するのではダメな理由があるのでしょうか。
VBプログラムがWHERE句を指定できないのですか?
あえてやろうとするなら、以下が考えれます。
(1)毎回Viewを定義しなおす。
alter view view_name as select * from table_name where col1=yyyymmdd
(2)条件テーブルを作成しておき、ジョインさせる。
条件を変えたいときは条件テーブルの日付を変更する。
create view view_name as select a.* from table1 as a
inner join table2 as b on a.col_date = b.col_date;
正直、明確な理由がないなら、SELECT文にWHERE句をつけて発行するのが普通だと思います。
>VBプログラムからSQL文でビューを呼び出す時、日付範囲を指定して絞り込まれた結果をビューで返したいのですが、
毎回、日付をしていするなら、where col_date = 'yyyy/mm/dd hi:mi:ss'とWHERE句をつけるだけだと思います。これが出来ない理由があるのですか?
この回答への補足
早速の御回答をありがとうございます。
普段はビューを使わずに、VBソース内で下記のようなコードを直接記述・実行して利用しています。
Set Cn = New ADODB.Connection
Cn.Open ODBC_Name
Set Rs = New ADODB.Recordset
Sql = "SELECT * FROM データ Where 日付='2010/07/09'"
Rs.Open Sql, Cn
ところが ”VBは理解できるけれどもSQLは苦手” という人が、
1、SQL文をビューに置き換えて、どんな事をしているのかビジュアル的に把握できるようにしたい。
2、あらかじめ作成されているビューをコールする様にしておき、VB側の構造は理解した上で、
SQLの簡単な修正・変更は自分たちでビューを変更して出来るようにしたい。
などという要望があり、このような問い合わせをさせて頂きました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Web・クリエイティブ 【 3DCGソフト⠀MAYAについての質問 】 MAYAでビューからイメージプレーンを読み込むと、ビ 1 2023/07/09 02:50
- iPad iPadでoutlookのビューの幅を広げたいのですが、やり方が分かりません。 iPadでoutlo 2 2022/12/29 10:56
- Excel(エクセル) Excelで、社外秘(閲覧のみ)と表示され、共有者が編集出来ないのですが 4 2023/06/20 17:54
- Excel(エクセル) エクセルの保護ビューについて 1 2022/10/20 11:19
- Excel(エクセル) Excel VBA Backstageビューでの印刷 2 2022/06/03 16:56
- その他(IT・Webサービス) レコード200万、カラム60,こういう大規模なデータを最適な管理できるソフト等教えていただけますでし 2 2022/09/17 14:54
- 父親・母親 21歳の俺が母が苦手なマヨネーズを母の洋服に ビューしたら母は、なんて言いますか? 3 2022/07/02 00:33
- C言語・C++・C# C言語 3 2022/10/04 15:07
- その他(プログラミング・Web制作) プログラムの勉強のおすすめは 7 2022/12/09 20:09
- その他(プログラミング・Web制作) プログラムが書けません。 6 2023/01/22 22:58
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SQL文で パラメータが少なすぎ...
-
日付型のフィールドに空白を入...
-
Excleピボットでデータのない部...
-
Access クエリで、レコードの無...
-
VBA 別シートの同じ日付の欄に...
-
ACCESSの空白をカウントする
-
アクセス:既定値に土日含まず...
-
アクセスで日付を入力すると曜...
-
Accessのデータ型の日付/時刻型...
-
アクセス 前月の月末日を求めたい
-
Excel→Accessへの日付データの...
-
ACCESS フォームの非連結の日...
-
【Access】クエリでの日付処理...
-
ご教授お願い致します。
-
BCPでCSV内の文字列をテーブル...
-
こんな扱いにくいデータ形式ど...
-
エクセル-過去6カ月分の合計を...
-
差込印刷での全角表示について...
-
アクセスのエラー「クエリには...
-
Accessのテーブルのフィールド...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
日付型のフィールドに空白を入...
-
SQL文で パラメータが少なすぎ...
-
Excleピボットでデータのない部...
-
VBA 別シートの同じ日付の欄に...
-
アクセスで日付を入力すると曜...
-
アクセス:既定値に土日含まず...
-
Excel→Accessへの日付データの...
-
Accessの日付時刻型から日付、...
-
BCPでCSV内の文字列をテーブル...
-
エクセル-過去6カ月分の合計を...
-
Access クエリで、レコードの無...
-
前のレコードの合計に現レコー...
-
指定日付を起点にして最新日付...
-
ACCESSの空白をカウントする
-
Accessのデータ型の日付/時刻型...
-
【vba】日付の形式が勝手に変わ...
-
ビュー定義をプログラムで動的...
-
アクセスで月単位の抽出
-
【エクセル】指定した日付に一...
-
Accessで日付の比較がうまくい...
おすすめ情報