【问题标题】:ADODBAPI No. Of Open Connection with databaseADODBAPI 与数据库的打开连接数
【发布时间】:2014-07-17 06:14:16
【问题描述】:

我想数一数。当前使用 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'Object or provider is not able to
执行请求的操作。', u'C:\WINDOWS\HELP\ADO270.CHM',
1240648, -2146825037), 无)

谁能提供解决方案?

【问题讨论】:

    标签: python ms-access adodbapi


    【解决方案1】:

    在这种情况下,我个人倾向于避免对 adodbapi 大惊小怪,只需让我的 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 在运行时也打开了一个连接。

    【讨论】:

      猜你喜欢
      • 2012-07-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-28
      • 2020-08-15
      • 1970-01-01
      • 2011-03-18
      相关资源
      最近更新 更多