A voir également:
- Parcourir une chaine de caractère php
- Caractère ascii - Guide
- Caractère spéciaux - Guide
- Caractere speciaux - Guide
- Caractere vide - Guide
- Chaine tnt gratuite sur mobile - Guide
38 réponses
ah !!!! J'ai compris.
Tu as le texte d'un requête SQL et tu veux la parser pour en extraire le nom des tables !
Ok.... pfiou.
Bon je pense qu'on doit pouvoir s'en tirer avec une expression régulière.
Tu as le texte d'un requête SQL et tu veux la parser pour en extraire le nom des tables !
Ok.... pfiou.
Bon je pense qu'on doit pouvoir s'en tirer avec une expression régulière.
Désolé j'avais mal compris.
En C, tu dois pouvoir en principe accéder à la librairie pcre.
(Pratiquement tous les langages permettent de faire des expressions regulières).
Je n'ai pas de compilateur C sous la main, mais ne Python, je ferais ça:
import re
requete = 'select toot,titi,tutu from t1,t2 ,t3 where f=5'
regexp = re.compile('from (.*?) where')
tables = regexp.search(requete).group(1)
print tables.split(',')
Quand on le lance, ça donne ça:
>python essai.py
['t1', 't2 ', 't3']
ça retourne bien la liste des tables.
(mais bon il faut encore gérer le cas où les tables sont renommées dans la requête, genre 'select a.toto, b.titi from clients a, commandes b where ...)
En C, tu dois pouvoir en principe accéder à la librairie pcre.
(Pratiquement tous les langages permettent de faire des expressions regulières).
Je n'ai pas de compilateur C sous la main, mais ne Python, je ferais ça:
import re
requete = 'select toot,titi,tutu from t1,t2 ,t3 where f=5'
regexp = re.compile('from (.*?) where')
tables = regexp.search(requete).group(1)
print tables.split(',')
Quand on le lance, ça donne ça:
>python essai.py
['t1', 't2 ', 't3']
ça retourne bien la liste des tables.
(mais bon il faut encore gérer le cas où les tables sont renommées dans la requête, genre 'select a.toto, b.titi from clients a, commandes b where ...)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
juste une chose svp : en fait le langage c sera incorporé ds une procédure stockée sql, ce qui fait je cros que c pas ttes les commandes du lagge c sont autorisées.
Arg... parser du langage SQL en C qui sera inclu dans une procédure stockée...
Là à mon avis tu t'engage dans une uzine à gaz.
Tu devrais peut-être repenser la solution.
Là à mon avis tu t'engage dans une uzine à gaz.
Tu devrais peut-être repenser la solution.
La question est: est-ce que c'est vraiment une bonne solution d'essayer de parser du SQL en C dans une procédure stockée.
Il faut avoir une très bonne raison technique pour faire ça, parceque c'est à la fois difficile, fragile et dangereux du point de vue sécurité.
Il faut avoir une très bonne raison technique pour faire ça, parceque c'est à la fois difficile, fragile et dangereux du point de vue sécurité.
la raison est que j'utilise SQL server. 2tant donnée que je veux parsé une req sql et le seul moyen pr faire ça sur sql server est d'utiliser des PS (car elles permettent de rajouter de la pgmat au lgge qsl, et le lgge utilisé ds les PS est le C), maintenant le pb est comment utiliser le lgge C ds une PS ds mon cas.
Je ne me suis jamais amusé à utiliser du C dans une procédure stockée.
Il va falloir que tu creuse dans MSDN...
Mais écrire un parseur SQL dans une procédure stockée, ça me paraît limite infaisable, ou bien terriblement compliqué et de toute façon bien trop fragile.
Il faut que tu prenne la grammaire complète de la commande SELECT et que ré-écrire toi-même un parseur pour cette syntaxe.
Bon courage !
(Je continue à penser que tu ne devrait te reposer ton problème autrement et trouver une autre solution que parser du SQL en C dans une procédure stockée.)
Il va falloir que tu creuse dans MSDN...
Mais écrire un parseur SQL dans une procédure stockée, ça me paraît limite infaisable, ou bien terriblement compliqué et de toute façon bien trop fragile.
Il faut que tu prenne la grammaire complète de la commande SELECT et que ré-écrire toi-même un parseur pour cette syntaxe.
Bon courage !
(Je continue à penser que tu ne devrait te reposer ton problème autrement et trouver une autre solution que parser du SQL en C dans une procédure stockée.)
qu'est ce que vous me conseillez?!
juste une indication, la requête est formulée par un utilisateur, donc il faut que j'étudie ts les cas possibles de la req...
merci d'avance
juste une indication, la requête est formulée par un utilisateur, donc il faut que j'étudie ts les cas possibles de la req...
merci d'avance
Moi si un user me dit qu'il veut envoyer une requête SQL pour qu'elle doit exécutée sur le serveur, c'est NIET.
c quoi niet?!
une question svp : puisque je ne peux pas faire ça en sql server.....je vais essayer d'utiliser visual basic, vous savez comment je règle mon pb en utilisant VB?!
merci d'avance
une question svp : puisque je ne peux pas faire ça en sql server.....je vais essayer d'utiliser visual basic, vous savez comment je règle mon pb en utilisant VB?!
merci d'avance
bonjour,
j'essaye d'utiliser visual c++ pr régler mon pb. Pouvez vous m'aider à écrire le même prgme (que vous m'avez écrit en c) en c++?
merci d'avance
j'essaye d'utiliser visual c++ pr régler mon pb. Pouvez vous m'aider à écrire le même prgme (que vous m'avez écrit en c) en c++?
merci d'avance
niet = non.
Je ne laisse pas les utilisateurs d'une application lancer la requête SQL qu'ils veulent, comme ça, sur le serveur SQL.
Question sécurité, c'est bien trop dangereux.
Pour accéder aux données de la base en VC++, tu peux passer par les librairies ODBC ou ADO.
Si tu veux manipuler le serveur (ajouter/supprimer des tables, accéder aux scripts de création des objets, etc.) et que ton serveur SQL est Microsoft SQL Server, tu peux passer par les objets SQL-DMO (exemple en Python, mais ça se transpose facilement au C++: http://wikipython.flibuste.net/moin.py/CodesBDD)
Je ne laisse pas les utilisateurs d'une application lancer la requête SQL qu'ils veulent, comme ça, sur le serveur SQL.
Question sécurité, c'est bien trop dangereux.
Pour accéder aux données de la base en VC++, tu peux passer par les librairies ODBC ou ADO.
Si tu veux manipuler le serveur (ajouter/supprimer des tables, accéder aux scripts de création des objets, etc.) et que ton serveur SQL est Microsoft SQL Server, tu peux passer par les objets SQL-DMO (exemple en Python, mais ça se transpose facilement au C++: http://wikipython.flibuste.net/moin.py/CodesBDD)