我想数一下没有。当前与 ms-access 数据库打开的连接数。
例如,两个应用程序正在使用同一个数据库。那么我怎样才能得到这个计数呢? pypyodbc 中是否有 ms-access 函数或任何设施?
使用adodbapi,我怎么能得到no.与数据库的打开连接?
我尝试了以下代码。
#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)、无)
有人可以提供解决方案吗?
就我个人而言,在这种情况下,我倾向于避免对 adodbapi 大惊小怪,只需让我的 Python 脚本编写一些 VBScript 来创建具有开放连接的制表符分隔的计算机列表,通过运行 VBScriptsubprocess.Popen
,并解析结果:
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 在运行时也打开了一个连接。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)