Probleme requete SQL avec connection ODBC : presence de point dans le nom de tab [Résolu]

Signaler
Messages postés
7
Date d'inscription
mardi 13 mai 2003
Statut
Membre
Dernière intervention
25 juillet 2011
-
Messages postés
7
Date d'inscription
mardi 13 mai 2003
Statut
Membre
Dernière intervention
25 juillet 2011
-
Bonjour a tous,

Je rencontre un probleme lors de l'execution de la requete "SELECT Colonne.1 FROM TableX"

Le soucis vient de la presence d'un point dans le nom de la colonne "Colonne.1".
Je precise que je ne peux pas changer le nom de la colonne.

Le site de MSDN propose trois contournements de ce probleme que je n'arrive pas a mettre en oeuvre.
Voir : http://support.microsoft.com/kb/972856/fr

Par contre une requete type SELECT * fonctionne, toutefois je ne peux l'employer comme solution car la base est extremement volumineuse !
Auriez vous une idee pour contourner ce probleme simplement ?

Merci d'avance pour votre aide,
cordialement, eddy s



voici le detail du code au besoin, la ligne en rouge genere l'erreur "ERROR [42000] [ABB][SPIDER ODBC Driver]".

Cmd = "SELECT TableX.[Colonne.1], TIME FROM TableX"
Dim Con As Odbc.OdbcConnection
Con = New Odbc.OdbcConnection(ConSTR)
Dim Quer As New Odbc.OdbcCommand(Cmd, Con)
Dim DataAdaptw As Odbc.OdbcDataAdapter
DataAdaptw = New Odbc.OdbcDataAdapter(Quer)
Try
Con.Open()
GridView1.DataSource = DataAdaptw.SelectCommand.ExecuteReader()
GridView1.DataBind()
Con.Close()
Catch ex As Exception
MsgBox(ex.Message)
End Try

7 réponses

Messages postés
1540
Date d'inscription
lundi 26 mai 2003
Statut
Membre
Dernière intervention
1 août 2013
12
Arf ! Le souci c'est que la syntaxe SQL varie d'un SGBD à l'autre, même en utilisant le même package (en l'occurrence ODBC). Par exemple pour SQL Server il s'agit de crochets [], mais pour Oracle il me semble qu'il faut des doubles-quotes "" (et dans MySQL c'est des quotes spéciales ``).

Donc tu ne sais pas quel SGBD est derrière, mais sais-tu s'il peut varier ? Car s'il est stable dans le temps il suffit de trouver dans un premier temps duquel il s'agit, puis de le prendre pour acquis par la suite.
Messages postés
7
Date d'inscription
mardi 13 mai 2003
Statut
Membre
Dernière intervention
25 juillet 2011

Une enquete s'imposait en effet aupres du client quant au type de SGDB utilise, il s'avere que celui-ci n'est ni SQLServer, ni MySql, ni Access mais un fournisseur specifique dedie au SCADA et associe a celui-ci. Il possede sa propre synthaxe SQL dont j'ai pu avoir le document de specifications ... je suis dans la *
La connection est etablie grace a un objet DNS qui etait deja configure, et avec lequel je communiquais joyeusement depuis des semaines sans connaitre le SGDB.

Mon post est donc hors sujet et je m'en excuse.

RESOLUTION : mon probleme de "." dans le nom de colonne est insoluble avec la sytntaxe sql disponible, j'utiliserai donc une requete SELECT * versee dans un dataReader. J'interroge ensuite le champ Colonne.1 du datareader. c'est laborieux et tres gourmand mais ca marche.

merci pour les pistes, a bientot, eddy
Messages postés
1540
Date d'inscription
lundi 26 mai 2003
Statut
Membre
Dernière intervention
1 août 2013
12
Salut,

perso j'aurais même écrit [TableX].[Colonne.1] (avec les crochets sur le nom de la table). Je ferai également remarquer que la requête que tu nous montre n'est pas valide (y'a une virgule qui traîne).

pour l'erreur en elle-même je dirais que DataSource n'accepte pas un IDataReader comme valeur. Quand on regarde sur la MSDN il est écrit :
La classe DataGridView prend en charge le modèle de liaison de données standard des Windows Forms. Cela signifie que la source de données peut être de tout type qui implémente l'une des interfaces suivantes :

L'interface IList, y compris les tableaux unidimensionnels.

L'interface IListSource, telle que les classes DataTable et DataSet.

L'interface IBindingList, telle que la classe BindingList.

L'interface IBindingListView, telle que la classe BindingSource.

Or un DataReader n'implémente aucune de ces interfaces.
Messages postés
7
Date d'inscription
mardi 13 mai 2003
Statut
Membre
Dernière intervention
25 juillet 2011

Bonjour Jopop, merci pour cet element
J'ai essaye ta synthaxe, sans succes.

Je precise que la table comprend une colonne "TIME".

L'execution de la requete "SELECT TIME FROM TableX" fonctionne tres bien, les donnees s'affichent correctement dans le gridview.
Si j'essaye la requete suivante : SELECT Colonne.1 FROM TableX, j'obtiens une erreur.

C'est bien le point dans Colonne.1 qui pose probleme

eddy
Messages postés
1540
Date d'inscription
lundi 26 mai 2003
Statut
Membre
Dernière intervention
1 août 2013
12
Re,

Je suis doublement étonné.

Etonné que la syntaxe avec les crochets sur la table ne passent pas. De souvenir j'avais lu pas mal de requêtes écrites ainsi (moi même ne m'étant jamais servi de SQL Server).

Etonné qu'il veuille bien d'un IDataReader comme DataSource, alors que la MSDN déclare que ce n'est pas possible (je me sers jamais des DataGridView non plus ^^).

As-tu essayé une syntaxe avec des alias, comme le propose ton lien :
SELECT [Colonne.1] AS Colonne_1, TIME FROM TableX
Messages postés
7
Date d'inscription
mardi 13 mai 2003
Statut
Membre
Dernière intervention
25 juillet 2011

tu vas rire :

"SELECT TIME AS TIME_Bidule FROM ..." fonctionne,
"SELECT [TIME] AS TIME_Bidule FROM ..." plante !

ps : je ne suis pas sur que la bdd soit sqlserver, elle peut etre access tout simplement car j'utilise une connection ODBC.
en fait j'ai bien peu d'elements sur elle car le client ne parle pas ma langue et qu'elle est distante et integree a un SCADA.

toutefois, certaines requetes marchent sans probleme, ce qui exclue l'hypothese d'un probleme de connection ou d'un probleme de gridview.

eddy
Messages postés
7
Date d'inscription
mardi 13 mai 2003
Statut
Membre
Dernière intervention
25 juillet 2011

Il est absolument stable,
je vais creuser un poil pour en savoir plus,
merci, eddy