Để tạo ra một tập tin accdb trống mới, mã Python sau nên làm như lừa:
import win32com.client
f = 'C:\\Users\\Gord\\Desktop\\pyTest.accdb'
c = win32com.client.Dispatch('ADOX.Catalog')
c.Create('Provider=Microsoft.ACE.OLEDB.12.0;Data Source=' + f + ';')
c = None
print '"' + f + '" created.'
[Chỉnh sửa 1]
Một bình luận cho một bài đăng trên blog here cho thấy rằng nếu cuộc gọi .Create
phát sinh lỗi "Chưa đăng ký lớp", bạn có thể cần phải sử dụng regsvr32.exe
để đăng ký lại msadox.dll
. Hãy nhận biết của "bitness" khi bạn cố gắng này: Có 32-bit và 64-bit phiên bản của cả của các tập tin:
64-bit
C: \ Windows \ System32 \ regsvr32.exe
C: \ Program Files \ Common Files \ System \ ado \ msadox.dll
32-bit
C: \ Windows \ SysWOW64 \ regsvr32.exe
C: \ Program Files (x86) \ Tệp phổ biến \ System \ ado \ msadox.dll
Ngoài ra, hãy lưu ý rằng bạn có thể đang chạy Python 32 bit trên máy 64 bit.
[Chỉnh sửa 2]
tôi đã thực hiện một vài kiểm tra và đã đi đến kết luận rằng phương pháp này không làm việc trong trường hợp đặc biệt này vì kịch bản Python được chạy như 64-bit, nhưng 64 -bit Access Database Engine chưa được cài đặt. (Văn phòng 32 bit chỉ cài đặt phiên bản ACE 32 bit.)
Thông báo lỗi có thể gây nhầm lẫn một chút. Nó không phải là thành phần ADOX bị thiếu (không được đăng ký), nó là phiên bản 64 bit của động cơ ACE mà không thể tìm thấy.
Bên cạnh đó, trên một máy 64-bit với 32-bit truy cập cài đặt, phiên bản 64-bit của ACE sẽ bao giờ có sẵn vì nó không thể được cài đặt
![no 64-bit ACE with 32-bit Office](https://i.stack.imgur.com/m2pSw.png)
này có thể rất tốt có ý nghĩa khi bạn cố gắng thao tác dữ liệu trong tệp .accdb từ tập lệnh Python 64 bit. Tôi không có sẵn Python trên máy thử nghiệm "Office 32-bit trên Windows 64-bit" của tôi, nhưng khi tôi thử các VBScript sau đây ...
Option Explicit
Dim con, rst
Set con = CreateObject("ADODB.Connection")
con.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data source=C:\Users\Gord\Desktop\adoTest.accdb;"
Set rst = CreateObject("ADODB.Recordset")
rst.Open "SELECT Field1 FROM Table1", con
Wscript.Echo rst(0).Value
rst.Close
Set rst = Nothing
con.Close
Set con = Nothing
...kết quả như sau:
C:\__tmp>C:\Windows\System32\cscript.exe /nologo dataAccessTest.vbs
C:\__tmp\dataAccessTest.vbs(4, 1) ADODB.Connection: Provider cannot be found.
It may not be properly installed.
C:\__tmp>C:\Windows\SysWOW64\cscript.exe /nologo dataAccessTest.vbs
This is Table1 data in Access.
Tập lệnh không thành công khi chạy 64 bit nhưng hoạt động khi chạy dưới dạng 32 bit.
Khuyến nghị: Nếu máy của bạn có cài đặt Truy cập 32 bit, bạn có thể nên chạy các tập lệnh Python của mình dưới dạng 32 bit.
Tuyệt vời, hoạt động như một sự quyến rũ! Chỉ còn một câu hỏi nữa: Tôi sẽ lấy tất cả thông tin từ nơi bạn đặt cho dbLangGeneral ở đâu? Chúc mừng Thomas –
Từ trong phiên truy cập, tôi đã sử dụng 'Debug.Print dbLangGeneral' và sao chép chuỗi nó trả về. Xem chủ đề trợ giúp CreateDatabase để biết chi tiết về các tùy chọn khác. – HansUp