4

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

4

2 回答 2

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

祝你好运,

特里。

于 2010-02-12T15:48:47.307 回答
1

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

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

2) When the user connected to the database is the owner of the tables (the user who created the tables), i noted that i got my_table_field_id when the pb catalog tables (pbcatcol, pbcattab, ...) had already been created in the database.

于 2010-02-26T16:38:27.217 回答