2010-02-12 13 views
4

Lorsque je crée dynamiquement un datastore en utilisant SyntaxFromSQL (afin de générer le code source de datastore, sur la base d'une instruction SQL SELECT), avec cette syntaxenoms de colonnes dans générés dynamiquement 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) 

comment puis-je vérifier la noms des colonnes générées du magasin de données ds_1? Je vous rappelle que dans le cas d'une instruction select qui joint deux tables ou plus, les noms de colonne résultants peuvent être précédés du nom de table approprié, par ex. au lieu d'obtenir le nom de la colonne field_id je peux obtenir un nom de colonne comme: my_table_field_id. Cela provoque des problèmes lorsque plus tard, je fournir le nom de la colonne (field_id) en tant qu'argument d'une fonction GetItem, tandis que la banque de données pertinente a nommé la colonne my_table_field_id à la place.

Pour aggraver les choses, j'ai découvert que l'une des raisons pour lesquelles j'obtenais différentes définitions de colonnes (précédé par le nom de la table) était le fait que la connexion de l'utilisateur avait été affectée sa role!?!?!

Répondre

6

En général, dans describe() appels, le numéro de colonne peut être utilisé à la place du nom de la colonne, de sorte que vous pouvez faire quelque chose comme:

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 les valeurs, ou tout simplement utiliser les numéros de colonne dans l'avenir. La plupart des fonctions de DataWindow/DataStore référençant les colonnes ont des surcharges qui permettent d'utiliser un nombre entier comme un numéro de colonne au lieu d'une chaîne comme nom de colonne.

Bonne chance,

Terry.

1

J'ai eu le même problème avec SQL Anywhere 11 et j'ai trouvé plusieurs causes.

1) Si vous reconstruisez une base de données en utilisant dbUnload, la valeur de systab.creator peut être incrémentée. Dans ce cas, vous pouvez obtenir différents noms de colonnes

2) Lorsque l'utilisateur connecté à la base de données est le propriétaire des tables (l'utilisateur qui a créé les tables), je l'ai indiqué que je suis arrivé my_table_field_id lorsque le catalogue pb Des tables (pbcatcol, pbcattab, ...) ont déjà été créées dans la base de données.