【问题标题】:How to keep Powerbuilder from prepending table owner to table name (Postgres / PB 10.5)如何防止 Powerbuilder 将表所有者添加到表名(Postgres / PB 10.5)
【发布时间】:2014-08-22 09:13:07
【问题描述】:

我正在使用 Windows 7 上的 ODBC 从 Power Builder 10.5 连接到 Postgresql 数据库。我注意到 PB 将表所有者添加到表名之前,例如,如果我作为“用户”连接到数据库,它将查询格式化为“SELECT x, y, z FROM user.tablename”。

这在 Sybase 中是有意义的,但在 postgres 中不能正常工作,因为模式和用户是分开的。

我通过创建一个与用户同名的 postgres 架构进行测试,然后将表放入架构中。因此,当 PB 使用“username.tablename”时,postgres 将其解释为“schemaname.tablename”并且这有效..但这只是一个测试而不是可用的解决方案。

它在文档中说,如果表所有者与当前用户相同,则 PB 不会在所有者前面添加所有者,但如果它们不匹配,则会。但在我的测试程序中,我看到的是相反的情况:如果 UID 与所有者名称相同,则它会在前面添加,如果它们不匹配,则不会。

这是我的连接代码:

sqlca.DBMS = "ODBC"
sqlca.userid  = "pblearn"
sqlca.dbpass = "pblearn"
string ls_DSN = "PBLEARN"

string ls_connect = "ConnectString='"
ls_connect += "DSN=" + ls_DSN + ";"
ls_connect += "UID=" + sqlca.userid + ";"
ls_connect += "PWD=" + sqlca.dbpass + "'"

sqlca.dbparm = ls_connect + ", SQLQualifiers=0"
connect;

我的架构是 pblearn 和 public(默认).. 和两个用户“pblearn”和“pblearn2”。如果我使用 pblearn 连接,会发生前置,我会在 pblearn(表的所有者)架构中看到表,如果我使用 pblearn2,则不会添加用户名,我会在公共架构中看到表。

如何让 PB 不预先添加用户名,或者不考虑用户而预先添加一致的架构名称?

谢谢

【问题讨论】:

  • 哪些用户拥有这些架构中的表?
  • 在两种模式(public 和 pblearn)中,表都归 pblearn 所有。我所做的是在两个模式中创建一个具有相同名称的表,其中包含不同的数据,因此当我在数据窗口中检索时,很容易看到它正在访问哪个模式。
  • 在 PB 中设置数据库配置文件时有一个系统选项卡。如果您将表所有者放入,然后检查“预览”选项卡,您可以看到连接所需的语法。不确定这是否适合您。

标签: postgresql powerbuilder


【解决方案1】:

在您的安装使用的PBODB105.INI 的数据库部分中,添加以下属性:

PBTableOwner='NO'

来自文档:

;PBTableOwner='NO' - 不限定表名,默认为 'YES'

编辑:

如果特定连接不存在任何部分,则 Powerbuilder 作为兼容 ODBC 的客户端和扩展程序运行,可能是 无法使用。的搜索算法 条目是:

IF section and entry for are present current datasource
THEN use entry value
ELSE IF section corresponding to DBMS_Name Driver_Name exist 
THEN use entry value if it exist 
ELSE IF section corresponding to DBMS_Name exist 
THEN use entry value if it exist 

章节标题

  • DataSource_Name(默认情况下没有在 ini 文件中,但如果您需要覆盖更通用的 DBMS_Driver 或 DBMS_Name 设置,您可以放入数据源特定部分
  • DBMS_Name Driver_Name(Driver_Name 已去除 .dll 扩展名)
  • DBMS_Name(SQLGetInfo 调用返回的 DBMS 名称)

因此,为 Postgres 安装添加部分的最简单方法是创建一个以当前数据源名称命名的部分,或者如果您更喜欢使用 DBMS_NAME,请查看以下示例:http://www.rgagnon.com/pbdetails/pb-0061.html 以查看由ODBC 驱动程序。

【讨论】:

  • 非常感谢.. 在我的 PBODB105.INI 中没有 postgres 部分(但该应用程序仍然可以工作??)。我找到了 postgres 的 PBODB 条目的好例子,但我不知道如何命名条目以便使用它..或者我需要什么配置更改...如果你有提示我??我看到您的回答几乎肯定是正确的,但在我接受之前会负责并首先让它发挥作用......谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-09
  • 2017-07-25
相关资源
最近更新 更多