2014-07-17 2 views
1

번호를 얻고 싶습니다. 현재 ms 액세스 데이터베이스로 열려있는 연결 수ADODBAPI 번호 데이터베이스와 연결된 연결 번호

예를 들어 두 응용 프로그램이 동일한 데이터베이스로 작업하고 있습니다. 그렇다면 어떻게해야합니까? pypyodbc에 ms 액세스 기능이나 시설이 있습니까?

아도바피를 사용하면 어떻게받을 수 있습니까? 데이터베이스와의 열린 연결성 ??

다음 코드를 시도했습니다.

#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 ',
1,240,648, -2146825037), 없음)

사람이 솔루션을 제공 할 수 있습니까?

답변

1

개인적으로 나는이 경우 adodbapi를 사용하는 것을 피하기 위해 약간의 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가) 두 번까지 표시 VBSc ript는 실행 중에도 연결이 열려 있습니다.