モジュールについて

解決


  2007-06-18 23:48:18  No: 98998

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

上記の部分をモジュールに書いて呼び出してみたのですが、
「オブジェクトが閉じている場合は操作ができません」とエラーが出てしまいます。


もげ  2007-06-19 00:16:56  No: 98999

新規質問時の注意事項で
|■ タイトル
|    ・「〜するには?」のような質問形式にしてください。
|    ・「〜について」の形式は好ましくありません。
とあります(^^;。

まずは、変数を宣言する場所に注意しましょう。
関数内で宣言された変数は、関数の中だけで有効です。

コネクションを共通化して使いまわす意図であれば、
標準モジュールの関数の外側に宣言する必要があります。
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

ちなみに、これはどこで宣言されていますか?


  2007-06-19 02:10:59  No: 99000

すみません、以後タイトルは分かりやすいものにします。

ご指摘された通り、変数宣言部分等気をつけてみたいと思います。

mCn.Openは、モジュールに方に入れるつもりです。(抜けてしまいましたが・・)
大丈夫でしょうか?


もげ  2007-06-19 02:42:35  No: 99001

大丈夫...かといえば、
まあ、良くあるやり方だと思いますので、
接続/開放のタイミングが適切であれば、大丈夫かと。

> 「オブジェクトが閉じている場合は操作ができません」

がでる場合は、まだOpenしてないときに操作を行おうとしていますから、
そのへんを気をつけてみてください。


  2007-06-19 18:14:00  No: 99002

おはようございます。
もげさんのレスを参考にして出来ました。

・モジュール側
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

〜処理

と言う具合です。親切に答えていただきましてありがとうございました。


  2007-06-19 18:23:21  No: 99003

以下の部分が違っていました。訂正します。

'ADOデータコントロールの接続を確立
    mCn.ConnectionString = "Provider = MSDAORA;" & _
                    "User ID = " & U_NAME & ";" & _
                    "Password = " & U_PASS & ";" & _
                    "Data Source = " & S_NAME & ";"


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

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






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