2014-07-17 3 views
1

Я хочу получить кол-во нет. соединений, открытых в настоящее время в базе данных ms-access.ADODBAPI № Открытое соединение с базой данных

Например, два приложения работают с одной и той же базой данных. Тогда как я могу получить этот счет? Есть ли функция 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), None)

Может кто-нибудь обеспечить решение?

ответ

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) показывает в два раза, потому что у меня есть база данных с открытым в доступе а VBSc У ript также есть соединение, открытое во время его работы.

Смежные вопросы