如何在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
相关产品推荐
相关产品推荐

