Имена столбцов в динамически генерируемых окнах данных - PullRequest
4 голосов
/ 12 февраля 2010

Когда я динамически создаю хранилище данных, используя 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 ]

6 голосов
/ 12 февраля 2010

Обычно в вызовах 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 голос
/ 26 февраля 2010

У меня была такая же проблема с SQL Anywhere 11, и я нашел несколько причин.

1) Если вы перестраиваете базу данных, используя dbUnload, тогда значение systab.creator может увеличиваться. В этом случае вы можете получить разные имена столбцов

2) Когда пользователь, подключенный к базе данных, является владельцем таблиц (пользователь, создавший таблицы), я заметил, что получил my_table_field_id , когда таблицы каталога pb (pbcatcol, pbcattab, ..) уже был создан в базе данных.

...