Urgent-parcourir une chaine de caractère

Fermé
soussou - 16 mai 2003 à 15:26
 gator - 22 mai 2004 à 23:56
salut ts le monde,
j'arrive pas à résoudre ce pb :
j'ai cette chaine de car par exple :
select * from t1,t2,t3
et je veux parcourir cette chaine et récupérer après t1 t2 et t3
comment il faut faire svp?!

38 réponses

oui c bien ça, je te remercie bp!
pr le langage c le c.
merci d'avance
0
sebsauvage Messages postés 32847 Date d'inscription mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 15 656
19 mai 2003 à 11:48
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.
0
c bien ça!!
0
sebsauvage Messages postés 32847 Date d'inscription mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 15 656
19 mai 2003 à 12:11
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 ...)
0

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.
0
sebsauvage Messages postés 32847 Date d'inscription mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 15 656
19 mai 2003 à 13:08
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.
0
t'as pas une idée comment on le fait ds une procédure stockée?!
0
sebsauvage Messages postés 32847 Date d'inscription mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 15 656
19 mai 2003 à 13:16
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é.
0
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.
0
sebsauvage Messages postés 32847 Date d'inscription mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 15 656
19 mai 2003 à 13:45
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.)
0
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
0
sebsauvage Messages postés 32847 Date d'inscription mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 15 656
20 mai 2003 à 09:30
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.
0
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
0
soraya
0
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
0
sebsauvage Messages postés 32847 Date d'inscription mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 15 656
21 mai 2003 à 14:23
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)
0
MARS\TOUTOU
22 mai 2004 à 13:25

                
0
en vb ou en asp tu fait une concaténation de la requête c'est pas dur mais c'est la plus grosse c.....rie à faire !
on ouvre la porte à l'injection sql le client fait sa vie dans ta base!
le mieux c'est un choix de constitution par liste.
0