Date: Fri, 25 May 2001 19:20:10 +0900
From: 丸山 宏徳 <who@example.ne.jp>
藤田(FJT)さん、こんにちは。
ん〜………繰り返しになってしまいますが、「RDBMSって何?」ということをも
う一度復習なされてください(^^;
というだけでは不親切なので、少し解説させていただきましょう。この文章は、
必要でしたら等幅フォントに切り替えて読んでください。MS P明朝、MS Pゴシッ
クなどの不等幅フォントの場合、少々見苦しいことになるかもしれません。
まず、今までの.mdbファイルを使用していた場合、クエリーは次のように処理さ
れます。
(1)クエリーデザイン画面等で「hogehoge」という名前のクエリーの実行を指示。
↓
(2)Accessが、現在の.mdbファイルの中から「hogehoge」という名前のクエリー
を探し出す。
↓
(3)Accessのクエリー分析機能が、探し出したクエリー「hogehoge」がどの
テーブルを参照し、どんな条件で、どんなソート順で抽出しているかを
分析する。
↓
(4).mdbファイル内の必要なテーブルにアクセスしデータを取り出す。
……で、帰ってきた結果を画面に表示します。この場合、(1)〜(3)はいずれも
Access内で処理されているため、Accessで定義された関数を(3)の部分で解釈し
て処理することが出来るのです。対してMSDEの場合は
(1)ビューデザイン画面等で「hogehoge」という名前のビューの実行を指示。
↓
(2)Accessとは別のプログラム「MSDE」に対して「『hogehoge』という名前
のビューの結果を私にください」という依頼を、プログラム間通信
(と、今回は書いておきます)で送信する。
↓
(3)Accessとはまったく別のプログラム「MSDE」は、この依頼を受けて、
指定されたデータベースの中から「hogehoge」というビューを探し出す。
↓
(4)MSDEのSQL文分析機能が、探し出したビュー「hogehoge」のSQL文がどの
テーブルを参照し、どんな条件で、どんなソート順で抽出しているかを
分析する。
↓
(5)MSDEが、データベース内のテーブルにアクセスしデータを取り出す。この際、
他のクライアントが必要なレコードを排他ロックしていないか、トランザ
クション処理を行うべきか、等をMSDEがチェックする。
↓
(6)MSDEが依頼を発信したAccessに対して、プログラム間通信(繰り返します
が、この名称は不正確です(^^;))で検索したデータの結果を返信する。
↓
(7)返信されたデータを元に、Accessが結果を画面に表示する。
……という手順を踏むのです。従って、(4)を見ていただければお分かりいただ
けると思いますが、「MSDEのSQL文分析機能」が解釈できるSQLしかビューには記
述できないのです。藤田さんの「get_moji()」という関数はAccessの中にしか存
在しません。従ってMSDEのSQL文分析機能では解釈できない、というエラーが発
生しているのです。解決方法としては(とりあえず思いつく限りでは)
(1)ストアドプロシージャにパラメータを渡す形でレコードセットを得る
(2)「get_moji()」を使用したVBAを記述し、動的にSQL文を生成する
の二通りがありますが、まずその前に(繰り返しになりますが)「RDBMSとはな
んぞや?」という部分をもう少しお調べになられたほうがよろしいと思います。
MSDEを使用してクライアント=サーバを構築する場合は、、.mdbを使用していた
頃のAccessとはまったく違った考え方をしなければならないことはご承知置きく
ださい。MSDEとは、Accessとはまったく違った一つの独立した
「RDBMS=Relational Database Management System」というジャンルのプログラ
ム(システム)なのです。
丸山 宏徳
E-Mail:who@example.ne.jp
[MSDE/SQLServerに関して、今、どんなことにお困りですか?] |
よろしければお困りの内容を、電子メールで教えて下さい。 |
質問を電子メールで作成する
|
[ウィンドを閉じる][MSDE/SQLServer FAQ ][MSDE / MSDE2000 技術サポート情報一覧]
|