将Postgres转换为MS Access

5
我即将开始一个需要在MS Access 2003中加载数据库(我想它使用JET db)的项目。我无法忍受使用MS Access图形界面,想知道是否有可能在Postgres中构建数据库并将其移植到MS Access或输出可在Windows上加载的.mdb文件。根据我的搜索,似乎有很多MS Acess到Postgres迁移教程/设施,但是我找不到任何相反方向的内容。
我该如何在Postgres中构建我的数据库并输出某种转储文件以在MS Access中加载?
3个回答

8
在您的Windows设备上安装PostgreSQL ODBC driver
创建一个指向您的PostgreSQL数据库的DSN。
启动Access会话,并使用DSN导入PostgreSQL表。
我以前做过几次,发现这很快,也很容易。ODBC驱动程序将把PostgreSQL列数据类型转换为与Access兼容的类型。
这种方法适用于简单表格。但是,如果您的设计使用了高级的PostgreSQL功能,则这些功能可能无法(或完全)转换为Access。
由于您还没有创建数据库,因此鼓励您容忍Access表设计GUI。在Access中首先设计数据库似乎对我来说更简单。

1
如何创建DSN呢?对我来说,它没有列出已安装的ODBC驱动程序。 - Jan-Willem Gmelig Meyling

3
您不必使用Access GUI表格设计工具。您可以编写SQL“脚本”(一个分号分隔的SQL DDL命令列表),将其保存在文件系统中的某个位置,然后使用一些VBA来在Access中执行该脚本,并构建所有表、视图(查询)、索引和其他约束条件。
原始想法在这里:https://dev59.com/b3I-5IYBdhLWcg3weoJP#1839290,但是我对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

因此,您可以将每个语句分成任意数量的行;只需要在任何语句的第一行前面加上--来“注释掉”它。

有了这个,您就可以构建一个脚本来迭代地设计数据库:尽可能多次地删除和重新创建您的表、视图、索引等。Access ANSI-92 SQL(以上VBA将接受的内容)具有自己的语法变化,就像大多数其他SQL一样。我已经为您提供了一个示例数据库创建脚本以帮助您理解:https://gist.github.com/yawaramin/6802876


1

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

太棒了!我成功了。永不放弃。也许你离成功更近了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接