Потому что MS Доступ - это приложение GUI .exe и база данных базы данных для создания базы данных - это другой процесс, чем создание объектов базы данных, таких как Таблицы, Виды (т. Е. Сохраненные запросы) и даже Процедуры.
Для сравнения, на другом RDMS на уровне файлов, SQLite, необходимо открыть его .exe-оболочку до CREATE DATABASE
. И серверные RDMS (SQL Server, MySQL, Postgres) должны войти в экземпляр сервера для запуска команды. MS Access не имеет средств оболочки или экземпляра, просто объект приложения.
Поэтому, создав базу данных с помощью метода CreateDatabase, подумайте о том, чтобы запустить инструкцию DDL SQL до CREATE TABLE
, которую вы можете сделать с помощью метода Execute().
Python COM интерфейс
from win32com.client import Dispatch
try:
dbname = r'C:/Users/Guest/Desktop/NewDB.mdb'
accApp = Dispatch("Access.Application")
dbEngine = accApp.DBEngine
workspace = dbEngine.Workspaces(0)
dbLangGeneral = ';LANGID=0x0409;CP=1252;COUNTRY=0'
newdb = workspace.CreateDatabase(dbname, dbLangGeneral, 64)
newdb.Execute("""CREATE TABLE Table1 (
ID autoincrement,
Col1 varchar(50),
Col2 double,
Col3 datetime);""")
except Exception as e:
print(e)
finally:
accApp.DoCmd.CloseDatabase
accApp.Quit
newdb = None
workspace = None
dbEngine = None
accApp = None
Python DB API
Хотя CREATE DATABASE
не доступен в MS Access SQL вы можете запустить выше Execute
с любым Python ODBC API с помощью команды CREATE TABLE
только после создания файла базы данных:
import pypyodbc
dbname = r'C:/Users/Guest/Desktop/NewDB.mdb'
constr = "DRIVER={{Microsoft Access Driver (*.mdb, *.accdb)}};DBQ={0};".format(dbname)
dbconn = pypyodbc.connect(constr)
cur = dbconn.cursor()
cur.execute("""CREATE TABLE Table1 (
ID autoincrement,
Col1 varchar(50),
Col2 double,
Col3 datetime);""")
dbconn.commit()
Какая версия ms доступа? В docssuggest вы используете устаревший способ открытия базы данных, если ms доступ 2000 или после. – Schollii
Привет, Schollii, я пытаюсь создать 2002 - 2003 mdb – WRJ