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ですか? 2 つ以上のテーブルを結合する select ステートメントの場合、結果の列名の前に関連するテーブル名が付くことがあります。たとえば、列名を取得する代わりに、次のfield_idような列名を取得することがありますmy_table_field_idfield_idこれは、後で関数の引数として列名 ( ) を指定すると問題が発生しGetItemますが、関連するデータストアではmy_table_field_id代わりに列に名前が付けられています。

さらに悪いことに、異なる列定義 (テーブル名が前に付いている) を取得していた理由の 1 つは、ユーザーのログインに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)

値をキャッシュするか、将来的には列番号を使用してください。列を参照するほとんどのデータウィンドウ/データストア関数にはオーバーロードがあり、列名として文字列の代わりに整数を列番号として使用できます。

幸運を、

テリー。

于 2010-02-12T15:48:47.307 に答える
1

SQL Anywhere 11 でも同じ問題が発生し、いくつかの原因が見つかりました。

1) dbUnload を使用してデータベースを再構築すると、systab.creator の値がインクリメントされる場合があります。この場合、異なる列名を取得できます

2) データベースに接続しているユーザーがテーブルの所有者 (テーブルを作成したユーザー) である場合、pb カタログ テーブル ( pbcatcol、pbcattab、...) が既にデータベース。

于 2010-02-26T16:38:27.217 に答える