簡體   English   中英

ADODBAPI與數據庫的開放連接數

[英]ADODBAPI No. Of Open Connection with database

我想得到不計數。 ms-access數據庫當前打開的連接數。

例如,兩個應用程序正在使用同一個數據庫。 那我該如何計算呢? pypyodbc中有ms-access功能或任何功能嗎?

使用adodbapi,我怎么會沒有。 與數據庫的開放連接?

我嘗試了以下代碼。

#importing adodbapi 
import adodbapi # success 
#connection to database using the DSN 'test'
myConn = adodbapi.connect('test') # success
#get no. of open connection using openschema 
myConn.connector.OpenSchema(-1, None,"{947bb102-5d43-11d1-bdbf-00c04fb92675}") #fail

它給出以下錯誤。

pywintypes.com_error:(-2147352567,'發生了異常。',(0,u'ADODB.Connection',u'對象或提供者無法
執行請求的操作。',u'C:\\ WINDOWS \\ HELP \\ ADO270.CHM',
1240648,-2146825037),無)

有人可以提供解決方案嗎?

就我個人而言,在這種情況下,我傾向於避免大驚小怪,而只是讓我的Python腳本編寫一些VBScript來創建帶有打開連接的計算機的制表符分隔列表,通過subprocess.Popen運行VBScript並解析結果:

import os
import subprocess

## test data
databaseFileSpec = r"Z:\pyTest.mdb"

vbsFileSpec =  os.environ['TEMP'] + r"\mypytemp.vbs"

scriptCode = """Option Explicit
Dim con, rst, strOut, strSeparator
Const adSchemaProviderSpecific = -1
Set con = CreateObject("ADODB.Connection")
con.Open( _
        "Provider=Microsoft.Jet.OLEDB.4.0;" & _
        "Data Source="""
scriptCode += databaseFileSpec
scriptCode += """")
Set rst = con.OpenSchema( _
        adSchemaProviderSpecific, _
        , _
        "{947bb102-5d43-11d1-bdbf-00c04fb92675}")
strOut = ""
strSeparator = ""
Do While Not rst.EOF
    If rst(2).Value = "True" Then
        strOut = strOut & strSeparator & Left(rst(0).Value, Len(Trim(rst(0).Value)) - 1)
        strSeparator = vbTab
    End If
    rst.MoveNext
Loop
WScript.Echo strOut
rst.Close
con.Close"""

f = open(vbsFileSpec, 'w')
f.write(scriptCode)
f.close()

tabString = subprocess.Popen(
    "cscript /nologo \"" + vbsFileSpec + "\"",
    shell=True,
    stdout=subprocess.PIPE).stdout.read()
os.remove(vbsFileSpec)

print 'The following machines are connected to "' + databaseFileSpec + '":'
for x in tabString.split("\t"):
    print x

當我在兩台不同的計算機上打開數據庫並運行上面的腳本時,我得到

The following machines are connected to "Z:\pyTest.mdb":
TESTPC
GORD01
GORD01

我的筆記本(GORD01)出現了兩次,因為我在Access中打開了數據庫,而VBScript在運行時也打開了連接。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM