vb6で、オラクル9.0とADO接続を行っています。
その中でいくつかのフォームでコードを標準モジュールを使ってまとめたいのですが、うまくいきません。指導のほうよろしくお願いします。
・標準モジュール側
Public Function ORASET()
'ADOのオブジェクト変数を宣言する
Dim cnn As New ADODB.Connection
Dim rec As New ADODB.Recordset
'Oracle のサービス名を定義する
Dim S_NAME,U_NAME,U_PASS,tbl As String
'変数の定義
S_NAME = "*****" 'ネットサービス名を入力 ;*****を変更します
U_NAME = "*****" 'ユーザー名を入力 ;*****を変更します
U_PASS = "*****" 'パスワードを入力 ;*****を変更します
tbl = "****" 'データベーステーブル ;*****を変更します
End Function
・フォームロード時
Call ORASET
mCn.Open
処理
End Sub
上記の部分をモジュールに書いて呼び出してみたのですが、
「オブジェクトが閉じている場合は操作ができません」とエラーが出てしまいます。
新規質問時の注意事項で
|■ タイトル
| ・「〜するには?」のような質問形式にしてください。
| ・「〜について」の形式は好ましくありません。
とあります(^^;。
まずは、変数を宣言する場所に注意しましょう。
関数内で宣言された変数は、関数の中だけで有効です。
コネクションを共通化して使いまわす意図であれば、
標準モジュールの関数の外側に宣言する必要があります。
Option Explicit
'public変数宣言部
Public cnn As ADODB.Connection
'関数宣言部
Public Function ORASET()
(以下略)
もしくは、Public変数宣言専用の標準モジュールにするという方法もあるでしょう。
>Dim S_NAME,U_NAME,U_PASS,tbl As String
このように書くと、
tblはString型、S_NAMEとU_NAMEとU_PASSはVariant型になります。
Dim S_NAME As String,U_NAME As String,U_PASS As String,tbl As String
のつもり....でしたら、そう書かないとダメです。
>mCn.Open
ちなみに、これはどこで宣言されていますか?
すみません、以後タイトルは分かりやすいものにします。
ご指摘された通り、変数宣言部分等気をつけてみたいと思います。
mCn.Openは、モジュールに方に入れるつもりです。(抜けてしまいましたが・・)
大丈夫でしょうか?
大丈夫...かといえば、
まあ、良くあるやり方だと思いますので、
接続/開放のタイミングが適切であれば、大丈夫かと。
> 「オブジェクトが閉じている場合は操作ができません」
がでる場合は、まだOpenしてないときに操作を行おうとしていますから、
そのへんを気をつけてみてください。
おはようございます。
もげさんのレスを参考にして出来ました。
・モジュール側
Option Explicit
Public mCn As New ADODB.Connection
Public mRs As ADODB.Recordset
Public Function ORASET()
Dim S_NAME As String
Dim U_NAME As String
Dim U_PASS As String
'オラクルの変数の定義
S_NAME = "aaa" 'ネットサービス名
U_NAME = "bbb" 'ユーザー名
U_PASS = "ccc" 'パスワード
'ADOデータコントロールの接続を確立
mCn.ConnectionString = "Provider = MSDAORA;" & _
"User ID = U_NAME;" & _
"Password = U_PASS;" & _
"Data Source = " & S_NAME & ";"
'コネクションをオープン
mCn.Open
End Function
・フォーム側
'モジュールを呼び出す
Call ORASET
〜処理
と言う具合です。親切に答えていただきましてありがとうございました。
以下の部分が違っていました。訂正します。
'ADOデータコントロールの接続を確立
mCn.ConnectionString = "Provider = MSDAORA;" & _
"User ID = " & U_NAME & ";" & _
"Password = " & U_PASS & ";" & _
"Data Source = " & S_NAME & ";"
ツイート | ![]() |