ADODBAPI № открытого соединения с базой данных
Я хочу получить количество нет. соединений, открытых в настоящее время с базой данных ms-access.
Например, два приложения работают с одной и той же базой данных. Тогда как я могу получить этот счет? Есть ли функция ms-access или какая-либо возможность в pypyodbc?
Используя 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 или поставщик не способны
выполнение запрошенной операции. ', u'C: \ WINDOWS \ HELP \ ADO270.CHM',
1240648, -2146825037), нет)
Кто-нибудь может предложить решение?
1 ответ
Лично я был бы склонен избегать суеты с adodbapi в этом случае и просто сделать так, чтобы мой скрипт на Python написал небольшой VBScript для создания списка машин с открытыми соединениями, разделенных табуляцией, запускаю VBScript через subprocess.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 также имеет открытое соединение во время работы.