tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルaccess、クエリ作成について
記事No8621
投稿日: 2009/01/23(Fri) 18:36
投稿者AAR
当方、VS2008(VB)、access2003を使用しております。(CSSです)

VSから複数のmdbにアクセスして、データ処理を行っておりますが、
1mdbファイルのデータ件数が数十万件を越え処理が重く困っています。
(接続クラスはOleDbです。)←指定項目

具体的には、処理対象mdbファイルのテーブルから必要なレコードを
別のmdbファイルのテーブル(WKテーブル)に登録し、
そこから集計処理、更新処理をして、最終的にxlsファイルに出力しますが、

できれば、WKテーブルの中にVS側から指定したクエリを作成し、保持したいのです。
(テーブルのままだと、処理が重いと考えたため。)
クエリの内容は動的に変化するため、SQLのような指定がVS側から出来れば良いと考えますが、
この結果をメモリ(DataTable等)に保持したりする処理は考えていません。

コーディング初心者で判らないことだらけですが、
どうかご教授よろしくお願いします。

[ツリー表示へ]
タイトルRe: access、クエリ作成について
記事No8622
投稿日: 2009/01/24(Sat) 11:31
投稿者オショウ
アクセスのMDBである必要があるのでしょうか?

SQL Server 2005/2008 Express とうかではダメなの
でしょうか。ご検討下さい。

以上。

[ツリー表示へ]
タイトルRe^2: access、クエリ作成について
記事No8627
投稿日: 2009/01/24(Sat) 20:16
投稿者AAR
返信ありがとうございます。

mdbファイルが作成されるオンラインシステムに、
急遽データ編集、集計するためのオフラインシステムが必要となりました。

mdbでーたを他のデータベースエンジンに格納するという方法も検討しましたが、
今回はサーバを使用しない方向での運用となりました。

その理由を具体的に申し上げますと、

1、複数mdbファイル処理を行うものの、処理実行頻度が半月に一度程度であること。
2、簡素なシステムにすることで、拡張性、保守性に幅をもたせておくこと。
3、技術的な部分を極力排除し、access操作できるレベルであれば、上の処理も可能であること。
4、処理を行うPCが不特定に可変であること(システムのインストールにが簡単であること)

以上の理由があります。
初心者の私では、SQL Serverの運用は不適当であると判断しましたが、
良い方法があれば、どうかご教授下さい。

[ツリー表示へ]
タイトルRe^3: access、クエリ作成について
記事No8628
投稿日: 2009/01/24(Sat) 20:32
投稿者オショウ
> mdbでーたを他のデータベースエンジンに格納するという方法も検討しましたが、
> 今回はサーバを使用しない方向での運用となりました。

  いや・・・
  通常OSで動くものですがExpress版は・・・

> その理由を具体的に申し上げますと、

  であれば、遅くても仕方ないのでは?

以上。

[ツリー表示へ]
タイトルRe^4: access、クエリ作成について
記事No8635
投稿日: 2009/01/26(Mon) 08:46
投稿者AAR
返信ありがとうございます。

>   であれば、遅くても仕方ないのでは?

やはり、仕様上そういう認識で作るしか方法が無いのでしょうか…。
自分の力が至らない部分もありますので、
他の方法も検討しつつ、作成していこうと思います。

ありがとうございました。また、力を貸して頂ければ幸いです。

[ツリー表示へ]
タイトルRe^5: access、クエリ作成について
記事No8638
投稿日: 2009/01/26(Mon) 14:05
投稿者AAR
度々すみません。質問させて下さい。

(1)VSフォーム側からOleDBを使用して、accessのパラメータクエリの
パラメータに値を代入すること、

(2)かつ、そのクエリ結果をmdb上で保持する(DB接続を切った後も持続)
ことは可能なのでしょうか?

ご教授お願いします。

[ツリー表示へ]
タイトルRe^6: access、クエリ作成について
記事No8644
投稿日: 2009/01/26(Mon) 17:18
投稿者オショウ
> (1)VSフォーム側からOleDBを使用して、accessのパラメータクエリの
> パラメータに値を代入すること、

  これはプログラムの書き方の質問ですか?

> (2)かつ、そのクエリ結果をmdb上で保持する(DB接続を切った後も持続)
> ことは可能なのでしょうか?

  ええ〜と、クエリ結果を別の存在するテーブルに出力する。と言う
  こですか?
  もしくはDataSet等にクエリ結果を保持し、MDBとのOleDBの接続は
  切断できるか?と言うことでしょうか?

● 曖昧で、どこまでどう説明したものか・・・

  パラメータクエリの書き方
  http://jehupc.exblog.jp/9096347/

  DataSetでの保持は・・・
  ググッたらた沢山ありすぎて・・・
  http://www.atmarkit.co.jp/fdotnet/basics/adonet04/adonet04_01.html
  (概念から・・・)

参考までに。

以上。

[ツリー表示へ]
タイトルRe^7: access、クエリ作成について
記事No8646
投稿日: 2009/01/26(Mon) 18:53
投稿者AAR
返信ありがとうございます。

>   これはプログラムの書き方の質問ですか?

すみません、ずばり、そうです。

>   ええ〜と、クエリ結果を別の存在するテーブルに出力する。と言う
>   こですか?
>   もしくはDataSet等にクエリ結果を保持し、MDBとのOleDBの接続は
>   切断できるか?と言うことでしょうか?

accessのテーブル登録限界に迫るデータ量なので、それをいくつものDataSetやDataTable(メモリ)
に保持することは考えていません。
すみません、先に伝えるべきでした…

ええと、VBAでは出来そうなことだとは思うのですが、

accessのパラメータクエリだと、いちいちパラメータを指定しなければなりません。
これを、動的に変え、かつ、一定期間mdbに保持する方法があればと思ったのですが…

ADOXのクエリ作成方法?(クエリデフ?)のような使い方は出来ないでしょうか?
(今現在は、元データからSQLのみで出力まで至っていますが、データ編集や、集計途中結果表示には適さないかと…)

[ツリー表示へ]
タイトルRe^8: access、クエリ作成について
記事No8648
投稿日: 2009/01/26(Mon) 19:35
投稿者オショウ
> accessのパラメータクエリだと、いちいちパラメータを指定しなければなりません。
> これを、動的に変え、かつ、一定期間mdbに保持する方法があればと思ったのですが…

  SQLのストアドプロシージャ的なことを言っておられる
  のでしょうか?今いち理解に苦しみます。

  であっても、パラメータ部分(動的変更)は、毎回指定し
  ないとできませんが・・・

> ADOXのクエリ作成方法?(クエリデフ?)のような使い方は出来ないでしょうか?
> (今現在は、元データからSQLのみで出力まで至っていますが、データ編集や、集計途中結果表示には適さないかと…)

  毎回、ストアドを登録し実行させる・・・
  方が時間がかかりますが・・・

● どこを固定化し、どこを動的に変更するのか解りません。
  しかし動的に変更する部分がある限り、パラメータクエリ
  しか実現方法は無いかと・・・

※ 毎回すべてのSQL文を投げるよるは、ストアド的使用方
  法の方が時間的に短くなりますが、DBエンジンの性能と
  して考えた場合・・・

accessのテーブル登録限界に迫るデータ量

  である限り、高速化したい手段の結果は大差ないように
  思います。

  1度目は遅くても2度目以降はキャッシュに乗りますが、
  それでも遅いならMDB自体が巨大でキャッシュの効果が無い

  最終手段は、3GBまでメモリつんで、RAMDISK上にMDBを
  載せるか・・・効果のあるなしは不明です。

※ 因みに、450MBのCSVデータを相手にデータ処理しています
  が、下手にOleDBでアクセスさせるよりもMeoryStreamで、
  メモリ上に読み込み、Seekでポインタ処理した方が高速で
  した。そういう場合もあります。(あくまで参考!)

以上。

[ツリー表示へ]
タイトルRe^8: access、クエリ作成について
記事No8649
投稿日: 2009/01/26(Mon) 21:22
投稿者魔界の仮面弁士
> ADOXのクエリ作成方法?

それは、
 ADOX.Procedures (アクション クエリ)
 ADOX.View (選択クエリ)
の事でしょうか?


> (クエリデフ?)

それは、
 DAO.QueryDef
の事でしょうか?


> のような使い方は出来ないでしょうか?

上記の推測であっているなら、OleDbCommand クラスが相当するかと。
DAO で言うところの無名クエリを作成する事ができます。
あるいは、Access 等で既に作成しておいたクエリを利用するためにも使えます。


もし、クエリを直接作成したいのだとしたら、mdb に対して
CREATE VIEW や CREATE PROCEDURE の SQL を投げることで作成することもできます。

[ツリー表示へ]
タイトルRe^9: access、クエリ作成について
記事No8654
投稿日: 2009/01/29(Thu) 18:16
投稿者AAR
大変遅くなりました。
皆様、返信ありがとうございます。

> もし、クエリを直接作成したいのだとしたら、mdb に対して
> CREATE VIEW や CREATE PROCEDURE の SQL を投げることで作成することもできます。


このままCREATE VIEW を使用するか、作業用のMDB自体を増やすか、
CSVファイルを作業用として使用するか検討した結果、

どれも処理時間に大差なかったため、
今回は、CREATE VIEW を逐一使用するという方針になりました。

報告が遅くなってしまい申し訳ございません。
とても勉強になりました。ありがとうございました。

[ツリー表示へ]