ADO接続するまでの間にキャンセルするには?

解決


TOSHI  2003-04-23 08:39:23  No: 77799  IP: [192.*.*.*]

開発環境はvb6.0 w2k_pro

  ado接続で  OPENしている時ユーザー名やパスワードなどが
違う時異常に時間が掛かるので途中でCommandボタンでキャンセル
させることが出来るのでしょうか?
  やはり無理なのでしょうか?

編集 削除
魔界の仮面弁士  2003-04-23 09:21:52  No: 77800  IP: [192.*.*.*]

可能です。ADODB.Connectionオブジェクトに対して、
以下の物を調べて見てください。

・接続までの待機時間を調整する「ConnectionTimeoutプロパティ」
・非同期での接続を行う「OpenメソッドのOptions引数に指定するadAsyncConnect定数」
・接続を中止させる「Cancelメソッド」
・現在の接続状況を調べる「Stateプロパティ」
・接続処理の開始前に発生する「WillConnectイベント」
・接続処理の完了後に発生する「ConnectCompletイベント」
・警告発生時に通知される「InfoMessageイベント」

編集 削除
TOSHI  2003-04-23 11:21:27  No: 77801  IP: [192.*.*.*]

>・非同期での接続を行う「OpenメソッドのOptions引数に指定するadAsyncConnect定数」
helpを見て実行してみけど
>・接続を中止させる「Cancelメソッド」
を使って中止するのですが結局時間が変わらないんですが
どうすれば改善できるでしょうか。

case1だけしかまだやっていません
Private Sub Connection(No As Integer)
    flg = False
    Select Case No
        Case 1
            cnn.Provider = "SQLOLEDB"
            cnn.Properties("Data Source").Value = strServerName
            cnn.Properties("Integrated Security") = "SSPI"
            If Me.Combo1.ListIndex <> -1 Then
                cnn.Properties("Initial Catalog").Value = _
                    Me.Combo1.List(Me.Combo1.ListIndex)
            End If
            cnn.Open , , , adAsyncConnect
            While (cnn.State = adStateConnecting)
                DoEvents
                If flg = True Then
                    Exit Sub
                End If
            Wend
            If Me.Combo1.ListIndex = -1 Then
                Set rs = cnn.OpenSchema(adSchemaCatalogs)
                Me.Combo1.Clear
                Do Until rs.EOF
                    Me.Combo1.AddItem rs.Fields(0).Value
                    rs.MoveNext
                Loop
            End If
            
        Case 2
            cnn.Provider = "SQLOLEDB"
            cnn.Properties("Data Source").Value = strServerName
            cnn.Properties("User ID") = strUserName
            cnn.Properties("Password") = strPassWord
            If Me.Combo1.ListIndex <> -1 Then
                cnn.Properties("Initial Catalog").Value = _
                    Me.Combo1.List(Me.Combo1.ListIndex)
            End If
            cnn.Open
            If Me.Combo1.ListIndex = -1 Then
                Set rs = cnn.OpenSchema(adSchemaCatalogs)
                Me.Combo1.Clear
                Do Until rs.EOF
                    Me.Combo1.AddItem rs.Fields(0).Value
                    rs.MoveNext
                Loop
            End If
    End Select
    
End Sub

Private Sub CommandEnd_Click()
    cnn.Cancel
    flg = True
End Sub

編集 削除
魔界の仮面弁士  2003-04-26 03:08:59  No: 77802  IP: [192.*.*.*]

>>・接続を中止させる「Cancelメソッド」
> を使って中止するのですが結局時間が変わらないんですが

どの部分で時間がかかっているのかにもよるかと思います。

Canecelメソッドは、DB側の認証処理を中断する目的には使えるのですが、
Data Sourceの探索などにかかる処理を中断させる事はできないらしいので。

# Data Sourceの探索などにかかる時間は、ネットワークアダプタの
# ドライバ(あるいはハードウェア自体の特性など)に左右されます。

編集 削除
TOSHI  2003-04-28 08:38:28  No: 77803  IP: [192.*.*.*]

data sourceの検索に時間がかかっているようなので
どうしようもないことが解りました。
魔界の仮面弁士さんありがとうございました。

前に書いた”SQLSERVERの所有者を表示するには?”
が解らないのでどうすればいいのか教えてください?
また不可能なのでしょうか?
>http://madia.world.coocan.jp/cgi-bin/VBBBS/wwwlng.cgi?print+200304/03040073.txt

編集 削除