掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
ADOでParameterを指定するには? (ID:142104)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
> m_AdoComm.CommandType = 1 マジックナンバーの使用は避けましょう。 この場合は、adCmdText 定数を代入するべきです。 > 長さや型を指定しない方法はありませんでしょうか。 使用する Provider によって、コマンドにてパラメータ名を定義できるものとできないものがあります。 (そもそも、パラメータをサポートしていないプロバイダも少なくありません) たとえば、Oracle であれば WHERE col1 = :varName の構文になりますし、 JET であれば PARAMETERS `varName` Text; の構文となりますし、 ODBC では、出現順のみに依存した WHERE col1 = ? の構文を使うことになります。 そこで ADO では、Parameter オブジェクトを通じて、それらに パラメータ名や型を明示的に与えることができるようになっています。 > Set param = cmd.CreateParameter("性別", adVarChar, adParamInput, 10) > で、adVarCharと10を省略したいのですが、 コマンド側で変数名と型を指定できるプロバイダの場合においては、 .Parameters.Refresh を呼び出すことで、パラメータ情報を取得できます。 ただし、Refresh メソッドを呼び出す前に、Command オブジェクトの ActiveConnection/CommandText/CommandType プロパティを、それぞれ 正しく設定しておく必要があります。 たとえば SQL Server の場合、ストアド引数の名前と型を定義できますが、 その場合、この Refresh メソッドを用いることで、CreateParameter せずに Parameter オブジェクトを利用できるようになっています。 ただし、これは開発時には便利ですが、完成したアプリケーション内で Refresh を呼び出すのは、下記の 2 点から好ましく無いとの意見もあります。 (1) Refresh 動作を提供しない(もしくは情報提供が不完全な)プロバイダも存在するため、移植性が損なわれる。 (2) 多くのプロバイダでは、Refresh 動作の最適化は行われていないため、 CreateParameter を用いて明示的に情報を与えた方が、動作効率が良い。 ただし、 cmd.CommandText = SQL Set cmd.ActiveConnection = con Set rs = cmd.Execute( , "男性") '★ Set cmd.ActiveConnection = Nothing Do Until rs.EOF Debug.Print rs.Collect(0) rs.MoveNext Loop のように、Execute メソッドの第二引数にパラメータの値を指定する方法では、 パラメータ情報の提供をプロバイダに求めることにはならないので、 こうしたパフォーマンス上/移植性の問題は生じません。 (複数のパラメータを指定する場合は、配列として渡します) そのかわり、この方法では Parameter の Direction が adParamInput 方向に 限定されるため、出力パラメータを伴うコマンドの実行には向きませんけれども。
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.