SQLに自作関数を組み込む方法

解決


リリコ  2006-11-11 00:34:28  No: 134073

VB2005で作成しています。
DBはAccess2000です。

T_TESTというテーブルに、IDというフィールドがあり、
VBのフォームにはコンボボックスとDataGridViewがあります。

IDフィールドの値はそのままではコンボボックスの値と比較できないので
自作関数(SetDesignID)で加工し、返り値と比較します。
一致したレコードのみをDataGridViewに表示します。

このSQLはどう作成したら良いでしょうか?

Accessだと、下記でもうまくいくのですが、
VBだとどう書けばいいのかわかりません。

strSQL = "SELECT * FROM T_TEST 
strSQL = strSQL & "WHERE SetDesignID([ID]) = コンボボックスの値"

宜しくお願い致します。


もげ  2006-11-11 00:54:36  No: 134074

セキュリティ対策のため、基本的には、
Access内で定義されたVBA関数をSQL文に含めてVBから実行することはできません。
関数をVB内で作成してSQLで抽出後に加工されるか、
もしくは、SQLServer等に移行してユーザ定義関数を利用するか、
SandBoxモードについて調べてみてください。(多くは魔界の仮面弁士殿の投稿と思われますが)
http://support.microsoft.com/default.aspx?scid=kb;ja;239482
http://www.trusnet.com/advisories/jetshell/jetshell.txt


リリコ  2006-11-11 01:00:23  No: 134075

もげ様ありがとうございます。

書き方が悪かったですね。
Access内で定義しているのではなく、
VBでクラスを作成し、その中にある関数をSQLで使用したいのです。


もげ  2006-11-11 01:11:50  No: 134076

失礼しました。
>Accessだと、下記でもうまくいくのですが、
ということで勝手にAccess内で定義しているものと誤解してました。

>VBでクラスを作成し、その中にある関数をSQLで使用したいのです。
(SQLServerをSQLと称する人も居るので一応)
Jetに対するSQLと解釈しますと、回答も理由も同じでして、
VB内に定義したユーザ定義関数をJetのSQLに含めることはできません。
関数をVB内で作成して、SQLで抽出してから関数をかまして加工されるか、
もしくは、SQLServer等に移行してユーザ定義関数を利用するか、
SandBoxモードについて調べてみてください。
http://support.microsoft.com/default.aspx?scid=kb;ja;239482
http://www.trusnet.com/advisories/jetshell/jetshell.txt


リリコ  2006-11-13 19:26:02  No: 134077

もげ様ありがとうございます。

調べてみたところ、無理なようなので
他の方法を探したいと思います。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加