Имена столбцов в динамически генерируемых окнах данных

StackOverflow https://stackoverflow.com/questions/2251137

Вопрос

Когда я динамически создаю хранилище данных с помощью 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?Напоминаю вам, что в случае оператора выбора, который объединяет две или более таблиц, именам результирующих столбцов может предшествовать соответствующее имя таблицы, напримервместо получения имени столбца field_id Я могу получить имя столбца, например: my_table_field_id.Это вызывает проблемы, когда позже я указываю имя столбца (field_id) в качестве аргумента GetItem функция, в то время как соответствующее хранилище данных назвало столбец my_table_field_id вместо.

Что еще хуже, я обнаружил, что одной из причин, по которой я получал разные определения столбцов (перед которыми стояло имя таблицы), был тот факт, что логину пользователя был назначен sa role !?!?!

Это было полезно?

Решение

Обычно в вызовах 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, ссылающихся на столбцы, имеют перегрузки, которые позволяют использовать целое число в качестве номера столбца, а не строку в качестве имени столбца.

Удачи,

Терри.

Другие советы

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top