【问题标题】:Column names in dynamically generated datawindows动态生成的数据窗口中的列名
【发布时间】:2011-01-16 02:33:27
【问题描述】:

当我使用 SyntaxFromSQL 动态创建数据存储时(为了生成数据存储源代码,基于 SQL SELECT 语句),语法如下

string ERRORS, sql_syntax, dwsyntax_str, presentation_str
dwsyntax_str = trans_object.SyntaxFromSQL ( sql_syntax, presentation_str, ERRORS)
ds_1.Create( dwsyntax_str, ERRORS)

如何查看数据存储ds_1 生成的列的名称?我提醒您,在连接两个或多个表的 select 语句的情况下,生成的列名可能前面有相关的表名,例如而不是得到列名field_id,我可能会得到一个列名,如:my_table_field_id。当稍后我提供列名 (field_id) 作为 GetItem 函数的参数时,这会导致问题,而相关的数据存储已将列命名为 my_table_field_id

更糟糕的是,我发现我得到不同的列定义(前面是表名)的原因之一是用户的登录名被分配了sa role!?!?!

【问题讨论】:

    标签: sybase powerbuilder dynamic-sql datastore


    【解决方案1】:

    通常,在 Describe() 调用中,可以使用列号代替列名,因此您可以执行以下操作:

    string ls_FirstColumnName, ls_SecondColumnName
    
    ls_FirstColumnName = dw_1.Describe ("#1.Name")
    ls_SecondColumnName = dw_1.Describe ("#2.Name")
    MessageBox ("Column Names", ls_FirstColumnName + "~r~n" + ls_SecondColumnName)
    

    缓存这些值,或者将来只使用列号。大多数引用列的 DataWindow/DataStore 函数都有重载,允许将整数用作列号而不是字符串作为列名。

    祝你好运,

    特里。

    【讨论】:

      【解决方案2】:

      我在使用 SQL Anywhere 11 时遇到了同样的问题,我发现了几个原因。

      1) 如果您使用 dbUnload 重建数据库,则 systab.creator 的值可能会增加。这种情况下可以得到不同的列名

      2) 当连接到数据库的用户是表的所有者(创建表的用户)时,我注意到当 pb 目录表(pbcatcol、pbcattab、 ...) 已在数据库中创建。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-11-17
        • 1970-01-01
        • 2021-01-03
        • 1970-01-01
        • 1970-01-01
        • 2019-08-27
        • 1970-01-01
        相关资源
        最近更新 更多