【问题标题】:Correct VBA Syntax for DB2 Command?DB2 命令的正确 VBA 语法?
【发布时间】:2020-10-12 14:06:39
【问题描述】:

我正在尝试通过 VBA 连接到 DB2。我通过 ODBC 提供程序建立了连接。

我的命令文本字符串如下所示:

strCmd = "INSERT INTO mySchema.myTable (Text) VALUES ('Test')"

当我运行它时,我得到以下运行时错误:

[IBM][CLI Driver][DB2/NT64] SQL0204N “MYSCHEMA.MYTABLE”是一个未定义的名称。 SQLSTATE=42704

我已经验证并确认 DB2 中存在模式和表。我已经验证(通过使用另一个工具 - IBM Data Studio - 凭据具有写入此表的访问权限和权限。

我的语法错了吗?有什么我想念的吗?如果我不添加“MYSCHEMA”。在表名前面,它假定我想要“ADMIN”架构,但我不想要(它甚至不存在)。

如何成功地向 DB2 LUW 执行插入命令?

【问题讨论】:

  • 可能真正的表名有MiXeD CaSe。默认情况下,Db2 总是将对象名称折叠为大写,除非它们被引用。尝试双引号模式名称和对象名称。您可以在 SYSCAT.TABLES 中查看 TABSCHEMA 和 TABNAME 在数据库中 实际 的情况,您的代码应该与此匹配。
  • @mao,谢谢。这正是问题所在。我怀疑仅在构建我的表时使用 UPPERCASE 会更容易(架构已经全部大写)。通过反复试验,我还发现 DB2 表中的列名也是如此。学过的知识;或者构建一个函数来为每个 DB2 元素加上双引号,或者只使用大写来命名它们。再次感谢您!

标签: vba db2


【解决方案1】:

这是经常被问到的。

Db2 自动将不带引号的对象名称折叠成大写。

这使得编程更容易,因为强制引用对象并不那么友好。

这意味着“myTable”。“mySchema”与 MYTABLE.MYSCHEMA 是不同的对象。

因此,一般而言,将工具集配置为在创建对象时引用对象名称会更容易,因此可以将它们折叠为大写。它还允许后续查询避免引用表名和列名。

但有时你别无选择。

【讨论】:

  • 但是,"MYTABLE"."MYSCHEMA" 应该与 MYTABLE.MYSCHEMA 相同...对吗?所以我想如果我在建表,我应该总是用大写来命名它们。
  • 是的“MYTABLE”。“MYSCHEMA”是 MYTABLE.MYSCHEMA。而 myScHemA.MyTaBle 是 MYTABLE.MYSCHEMA。未加引号的对象名称会自动折叠为大写。带引号的名称会保留其大小写,并且必须始终在查询中的引号内引用。
猜你喜欢
  • 1970-01-01
  • 2015-11-13
  • 1970-01-01
  • 2017-07-04
  • 2019-06-10
  • 1970-01-01
  • 2019-11-20
  • 1970-01-01
  • 2016-04-21
相关资源
最近更新 更多