当我使用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
!?!?!
答案 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 时) ...)已在数据库中创建。