2010-02-12 3 views
4

Когда я динамически создать хранилище данных, используя SyntaxFromSQL (для того, чтобы генерировать исходный хранилищу код, основанный на заявлении SQL SELECT), с синтаксисом, как этотимена столбцов в динамически генерируемых datawindows

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!?!?!

ответ

6

Как правило, в Описать() вызовы, номер столбца может использоваться вместо имени столбца, так что вы можете сделать что-то вроде:

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) 

Cache значения, или просто использовать номера столбцов в будущее. Большинство функций DataWindow/DataStore, ссылающихся на столбцы, имеют перегрузки, которые позволяют использовать целое число в качестве номера столбца вместо строки в качестве имени столбца.

Удача,

Terry.

1

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

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

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