掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
DAOでバインド変数を使用する方法 (ID:76805)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
ちなみに QueryDefオブジェクトは、Nameを空文字列にしておく事で、 名前の無い「一時的なクエリ」として生成する事ができます。 Set QD = DB_JET.CreateQueryDef("", SQL) Set RS = QD.OpenRecordset(dbOpenSnapshot) 上記の場合、オブジェクトを閉じると、一時的なクエリも 同時に削除されますので、管理の手間が省けます。 一時的ではなく、mdb内に保存され続けるようなクエリにしたいなら、 [DAO から ADO への移植 5]—[パラメータ化ストアド クエリの作成] http://www.microsoft.com/japan/msdn/data/techmat/ado/dao2ado_5.asp の例にあるように、Nameを指定してやればOKです。 それからバインド変数については、JETの場合、 SQLの「PARAMETERSステートメント」を使うことで、 変数名や変数の型を定義できます。 例えば、 SQL = "" SQL = SQL & "PARAMETERS StaffCode TEXT(20);" SQL = SQL & "SELECT * FROM Staff WHERE Code = StaffCode;" というSQL文を実行すると、Oracleでいう所の SELECT * FROM Staff WHERE Code = :StaffCode に近い意味となります。 (パラメータの指定は、QueryDefのParamatersプロパティで行います) # なお、PARAMETERS句を用いずに、直接 # SQL = "SELECT * FROM Staff WHERE Code = StaffCode;" # のように書く事もできますが、できればPARAMETERSステートメントを # 使って、変数定義を行った方が良いでしょう。 一方、Jet以外のデータベースにDAO経由で接続している場合は (ODBCリンクテーブルでの接続はなく、ODBCDirectでの接続の場合)、 ストアドプロシージャの引数を"?"で表現するという方法が利用できます。 Set QD = DB_SQLServer.CreateQueryDef("qry", "{ call MyInsert(?, ?) }") QD.Parameters(0).Direction = dbParamInput QD.Parameters(1).Direction = dbParamOutput QD.Parameters(0).Value = "RainBow" QD.Execute Debug.Print QD.Parameters(1).Value
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.