2013-10-01 70 views
4

我即将开始工作,需要数据库加载到MS Access 2003(我认为它使用JET数据库)的项目。我无法忍受使用MS Access gui/interface的想法,并想知道是否可以在Postgres中构建数据库并将其移植到MS Access或输出可在窗口上加载的.mdb。从我的搜索中,似乎有很多MS Acess到Postgres迁移教程/设施,但我找不到任何相反的方向。postgres到MS Access

如何在Postgres中构建我的db并输出某种类型的将在MS Access中加载的转储文件?

回答

8

在您的Windows机器上安装PostgreSQL ODBC driver

创建一个指向PostgreSQL数据库的DSN。

启动Access会话并使用DSN导入PostgreSQL表。

我已经在过去做了几次,发现它快速简单。使用ODBC驱动程序进行访问会将PostgreSQL列数据类型转换为与Access兼容的类型。

这种方法应该适用于简单的表格。但是,如果您的设计使用高级PostgreSQL功能,则这些功能可能无法很好地(或完全)转换为Access。

但是,由于您尚未创建数据库,我鼓励您容忍Access表设计GUI。我首先在Access中设计数据库似乎比较简单。

+0

如何创建DSN?对我来说,它没有列出安装的ODBC驱动程序。 –

3

您不需要使用Access GUI表设计工具卡住。您实际上可以编写一个SQL'脚本'(一个以分号分隔的SQL DDL命令列表),将其保存在文件系统的某个位置,然后使用一点VBA在Access中执行脚本并构建所有表,视图(查询),索引和其他约束。

原始想法在这里:https://stackoverflow.com/a/1839290/20371,但我已经修改了VBA有点合我的胃口:

Public Sub ExecSqlScript(fileName As String) 
    intF = FreeFile() 

    Open fileName For Input As #intF 
    strSql = Input(LOF(intF), #intF) 
    Close intF 

    strSql = Replace(Replace(strSql, Chr(10), " "), Chr(13), " ") 
    vSql = Split(strSql, "; ") 

    On Error GoTo MessageError 
    For Each s In vSql 
    s = Trim(s) 
    If Left(s, 2) <> "--" Then 

     Debug.Print "Execute: " & s 
     Debug.Print 
     CurrentProject.Connection.Execute s 
    End If 
    Next 

    Exit Sub 
MessageError: 
    Debug.Print "ERROR: " & Err.Description 
    Debug.Print 
    Resume Next 
End Sub 
与上面可以摊开每个语句在尽可能多的行,只要你喜欢

左右;并且只要在任何陈述的第一行前加上--即可“注释掉”。

使用这个,你可以建立一个脚本来迭代地设计你的数据库:只需要多次删除/删除和重新创建你的表,视图,索引等。访问上述VBA可以接受的ANSI-92 SQL,就像其他大多数SQL一样,具有自己的语法变体。我建立了一个示例数据库创建脚本,以便获取它的挂起:https://gist.github.com/yawaramin/6802876

1

根据HansUp的回答,我成功将postgres迁移到MS Access。
起初,我不知道什么是DSN(数据源名称)。 它可以设置,运行C:\Windows\odbcad32.exe
我设置了这个之后,我收到一个错误,说驱动程序和应用程序的结构是不同的。然后我发现我需要使用32位odbc驱动程序并运行C:\\Windows\\**SysWOW64**\\odbcad32.exe

完美!我成功了。不要放弃。也许你更接近成功。