代码之家  ›  专栏  ›  技术社区  ›  Yorgos

动态生成的数据窗口中的列名

  •  4
  • Yorgos  · 技术社区  · 16 年前

    当我使用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 . 这会在稍后提供列名时导致问题( 菲尔德夫人 )作为一个论点 GetItem 函数,而相关的数据存储已为该列命名 我的表字段ID 相反。

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

    2 回复  |  直到 16 年前
        1
  •  6
  •   Terry    16 年前

    通常,在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
  •  1
  •   gregj    16 年前

    我对SQLAnywhere11也有同样的问题,我发现了几个原因。

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

    2)当连接到数据库的用户是表的所有者(创建表的用户)时,我注意到 我的表字段ID 当pb目录表(pbcatcol,pbcatab,…)已经在数据库中创建时。