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

时间:2010-02-12 10:37:14

标签: sybase powerbuilder dynamic-sql datastore

当我使用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!?!?!

2 个答案:

答案 0 :(得分:6)

通常,在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函数都有重载,允许将整数用作列号,而不是字符串作为列名。

祝你好运,

特里。

答案 1 :(得分:1)

我遇到了与SQL Anywhere 11相同的问题,我发现了几个原因。

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

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