gpt4 book ai didi

PowerBuilder 12.5 修改后的 DataWindow 不使用表所有者限定列名

转载 作者:行者123 更新时间:2023-12-04 04:39:49 29 4
gpt4 key购买 nike

我正在尝试维护一个 PowerBuilder 程序,并且无法访问编写代码的前一个程序员。我修改了一个 DataWindow,现在它生成的源代码在选择的列名中不包含表所有者 (dbo)。但它确实在 WHERE 子句中包含了 dbo。见下文。

(旧源代码显示 dbo.FieldAuxs 在选择和 where 中随处可见。)

retrieve="PBSELECT( VERSION(400) TABLE(NAME=~"FieldAuxs~" ) 
COLUMN(NAME=~"FieldAuxs.id~")
COLUMN(NAME=~"FieldAuxs.clientid~")
COLUMN(NAME=~"FieldAuxs.status~")
COLUMN(NAME=~"FieldAuxs.historyear~")
WHERE( EXP1 =~"dbo.FieldAuxs.id~" OP =~"=~" EXP2 =~":al_id~" ) ) ARG(NAME = ~"al_id~" TYPE = number) " update="FieldAuxs" updatewhere=1 updatekeyinplace=no arguments=(("al_id", number)) )

这会导致错误:列前缀 dbo.FieldAuxs 与查询中使用的表名或别名不匹配...

我的数据库配置文件正在以我的身份(而不是 dbo)将我登录到 PowerBuilder 开发环境中。我相信这就是我想做的。

我已阅读有关将我的 SQLCA.DBParm 设置为 SQLQualifiers=1 的内容,但在数据库配置文件设置中看不到 DBParms 输入区域。似乎在 12.5 之前的某些版本中,您可以直接在某个框中键入 DBParm 值。但是在 12.5 中,它们只有设置 DBParm 值的复选框和下拉列表。而且我没有看到可以转换为为 SQLQualifiers 设置值的选择。根据文档: SQLQualifiers=1 --Qualify identifiers with owner names in SQL statements。

我一定没有正确设置我的 DataWindow 自动生成源代码,该源代码仅在 WHERE 子句中而不是在选择中完全限定列名。

欢迎提出想法!

最佳答案

你描述的问题是一个常见的问题。

典型原因 - 开发人员在开发模式下使用不同的数据库用户 ID

一位开发人员以“模式所有者”身份登录数据库(在开发模式下),另一位开发人员以标准用户(例如 john_doe)身份登录数据库(在开发模式下)。

开发人员一般应该在开发或创建数据窗口时避免以架构所有者身份登录 特别是在多模式数据库中,因为当用户在正常(非模式所有者)用户 ID 下运行应用程序时,数据窗口将失败。

尽管这在概念上很简单,但它一直在发生,因为开发人员在开发中经常可以访问他们用于创建表或修改列等的模式/表所有者,然后他们忘记切换回正常的用户 ID 连接到开发数据窗口。

当 PowerBuilder 限定标识符时 (来自 PB12.5 帮助)

如果表所有者的名称与登录到数据库的用户的名称相同,PowerBuilder 不会在它生成的 SQL 语句中使用所有者名称限定标识符。因此,如果您需要 PowerBuilder 来限定所有者名称,您需要使用不拥有该表的用户登录。

使用 SQLQualifiers 数据库参数 (来自 PB12.5 帮助)

此参数不适用于大多数数据库。根据 PB 12.5 的文档,SQLQualifiers 特定于 目录 Sybase DirectConnect 只要。

其他解决方案和注意事项

将数据窗口 SQL 转换为语法会起作用,但除非绝对必要,否则我通常会尽量避免这样做。你不应该转换为语法的原因是你失去了数据窗口中内置的一些魔法。如果您正在处理支持两个或更多后端数据库的应用程序,那么转换为语法将需要为每个 DBMS 创建一组单独的数据窗口。例如,考虑与 MS SQL Server 相比 Oracle 的左外连接语法,如果以语法编码数据窗口将在一个数据库中工作,但是如果保留在图形模式下,PowerBuilder 会根据正在使用的 DBMS 自动使用正确的左外连接语法。在转换为超出原始问题范围的语法时,您会否定许多其他优势(魔法)。

关于PowerBuilder 12.5 修改后的 DataWindow 不使用表所有者限定列名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13243524/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com