You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在VBA中转义PostgreSQL表名与列名以解决语法错误?

解决PostgreSQL中含空格/数字开头的表名/列名转义问题

PostgreSQL规定,包含空格、特殊字符或以数字开头的标识符(表名、列名)必须用双引号包裹,否则会触发SQL语法错误。针对你的VBA迁移代码,只需对表名和列名添加双引号转义即可解决问题。

修改后的VBA代码

'create tables in PostgreSQL database
Dim tdf As DAO.TableDef
For Each tdf In CurrentDb.TableDefs
    If Left(tdf.Name, 4) <> "MSys" Then
        Dim strCreateTable As String
        '给表名添加双引号转义
        strCreateTable = "CREATE TABLE """ & tdf.Name & """ ("
        For Each fld In tdf.Fields
            '给列名添加双引号转义
            strCreateTable = strCreateTable & """ & fld.Name & """ & " " & GetPostgreSQLDataType(fld.Type) & ","
        Next fld
        strCreateTable = Left(strCreateTable, Len(strCreateTable) - 1) & ")"
        'MsgBox strCreateTable
        cnn.Execute strCreateTable
    End If
Next tdf

关键注意事项

  • 使用双引号包裹后,PostgreSQL会严格区分标识符的大小写,而Access默认不区分。后续查询这些表/列时,必须使用与创建时一致的大小写并包裹双引号,否则会出现对象不存在的错误。
  • 确保GetPostgreSQLDataType函数能准确映射Access字段类型到PostgreSQL对应类型,这是保证数据完整性的核心环节。

内容的提问来源于stack exchange,提问作者Shen super

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 06:39:57