Accueil > > > DECOMPOSITION SQL - ALGORITHME SIMPLE ET EFFICACE
DECOMPOSITION SQL - ALGORITHME SIMPLE ET EFFICACE
Information sur la source
Description
Une DLL qui permet de décomposer un texte SQL ou de jouer avec et d'avoir la décomposition de chaque Clause. Pour mon utilisation perso je n'ai pas vraiment besoin de scruter le contenu de la clause From, raison pour laquelle la méthode utilisée pour le traitement de la clause From a des manquements et des limites. J'en ai plus besoin pour mon contrôle qui permet de visualiser des recordsets par passage des paramètres de CommandText et ConnectionString et Criteria. De ce fait au lieu de Charger la Commande et après faire un .Filter=..., qui n'est pas optimisé je charge directement la commande ajustée sur les bons enregistrements. Le problème également est que je dois compter les enregistrements, .MoveLast aprés .MoveFirst, il vaut mieux dans tous les cas avoir moins d'enregistrements à parcourir. En réalité J'ai ajouté à la propriété get SQL la possibilité de rajouter des valeurs dans les clauses WHERE, HAVING et ORDER BY de la SQL initiale.La propriété Let SQL permet de passer des paramètres jouant également sur les clauses citées plus haut. On peut reinitialiser les critères et le tri. L'algorithme utilisé est assez simple, le texte est préformaté en un passage de la chaine SQL et après la lecture devient aisé. Le principe de cette algorithme peut être réutilisé dans bien des cas. Comme dab, vos commentaires seraient les bienvenus afin que je puisse optimiser le code.
Source
- 'méthode Init de la Classe
- Public Function Init(ByVal psSQL As String, _
- Optional ByVal psLeftNameSeparator As String, _
- Optional ByVal psRightNameSeparator As String, _
- Optional ByVal psTextIdentificator As String)
-
- If psLeftNameSeparator <> vbNullString Then msLeftNameSeparator = psLeftNameSeparator
- If psRightNameSeparator <> vbNullString Then msRightNameSeparator = psRightNameSeparator
- If psTextIdentificator <> vbNullString Then msTextIdentificator = psTextIdentificator
-
- msSQL = TransformSQL(psSQL)
-
- 'Pour mes besoins actuels, je ne joue qu'avec les instructions de la forme
- ' SELECT ... FROM ... WHERE ... GROUP BY ... HAVING ... ORDER BY ...
- ' au mieux avec TRANSFORM ... SELECT ... FROM ... WHERE ... GROUP BY ... HAVING ... ORDER BY ... PIVOT ...
-
-
- Call ExtraitVariable("PIVOT", msPivot)
- Call ExtraitVariable("ORDER BY", msOrderBy)
- Call ExtraitVariable("HAVING", msHaving)
- Call ExtraitVariable("GROUP BY", msGroupBy)
- Call ExtraitVariable("WHERE", msWhere)
- Call ExtraitVariable("FROM", msFrom)
- Call ExtraitVariable("SELECT", msSelect)
- Call ExtraitVariable("TRANSFORM", msTransform)
-
- End Function
-
- 'Propriétés de la classe
- Public Property Get SQL(Optional ByVal psWhereCriteria As String, _
- Optional ByVal psHavingCriteria As String, _
- Optional ByVal psSort As String) As String
-
- Public Property Let SQL(Optional ByVal psWhereCriteria As String, _
- Optional ByVal psHavingCriteria As String, _
- Optional ByVal psSort As String, ByVal psSQL As String)
-
- Public Property Get SQLTransform(Optional ByRef psField As String, Optional ByRef psCaption As String) As String
-
- Public Property Get SQLSelect(Optional ByRef psPredicate As String, Optional ByRef paFields As Variant, Optional ByRef paCaptions As Variant) As String
-
- 'Propriété Get SQLFrom
- 'paTables est un tableau des tables utilisées dans la SQL
- 'paRelationShips est un tableau des relations
- 'L'algorithme utilisée pour pour cette proprité a des limites certes mais permet de retrouver nos petits dans bien des cas
- Public Property Get SQLFrom(Optional ByRef paTables As Variant, Optional ByRef paRelationShips As Variant) As String
-
- Public Property Get SQLWhere() As String
-
- Public Property Let SQLWhere(ByVal psSQLWhere As String)
-
- Public Property Get SQLGroupBy(Optional ByRef paFields As Variant) As String
-
- Public Property Get SQLHaving() As String
-
- Public Property Let SQLHaving(ByVal psSQLHaving As String)
-
- Public Property Get SQLOrderBy(Optional ByRef paFields As Variant) As String
-
- Public Function ClearOrderBy()
-
- Public Property Get SQLPivot(Optional ByRef psField As String, Optional ByRef paColumnsNames As Variant) As String
'méthode Init de la Classe
Public Function Init(ByVal psSQL As String, _
Optional ByVal psLeftNameSeparator As String, _
Optional ByVal psRightNameSeparator As String, _
Optional ByVal psTextIdentificator As String)
If psLeftNameSeparator <> vbNullString Then msLeftNameSeparator = psLeftNameSeparator
If psRightNameSeparator <> vbNullString Then msRightNameSeparator = psRightNameSeparator
If psTextIdentificator <> vbNullString Then msTextIdentificator = psTextIdentificator
msSQL = TransformSQL(psSQL)
'Pour mes besoins actuels, je ne joue qu'avec les instructions de la forme
' SELECT ... FROM ... WHERE ... GROUP BY ... HAVING ... ORDER BY ...
' au mieux avec TRANSFORM ... SELECT ... FROM ... WHERE ... GROUP BY ... HAVING ... ORDER BY ... PIVOT ...
Call ExtraitVariable("PIVOT", msPivot)
Call ExtraitVariable("ORDER BY", msOrderBy)
Call ExtraitVariable("HAVING", msHaving)
Call ExtraitVariable("GROUP BY", msGroupBy)
Call ExtraitVariable("WHERE", msWhere)
Call ExtraitVariable("FROM", msFrom)
Call ExtraitVariable("SELECT", msSelect)
Call ExtraitVariable("TRANSFORM", msTransform)
End Function
'Propriétés de la classe
Public Property Get SQL(Optional ByVal psWhereCriteria As String, _
Optional ByVal psHavingCriteria As String, _
Optional ByVal psSort As String) As String
Public Property Let SQL(Optional ByVal psWhereCriteria As String, _
Optional ByVal psHavingCriteria As String, _
Optional ByVal psSort As String, ByVal psSQL As String)
Public Property Get SQLTransform(Optional ByRef psField As String, Optional ByRef psCaption As String) As String
Public Property Get SQLSelect(Optional ByRef psPredicate As String, Optional ByRef paFields As Variant, Optional ByRef paCaptions As Variant) As String
'Propriété Get SQLFrom
'paTables est un tableau des tables utilisées dans la SQL
'paRelationShips est un tableau des relations
'L'algorithme utilisée pour pour cette proprité a des limites certes mais permet de retrouver nos petits dans bien des cas
Public Property Get SQLFrom(Optional ByRef paTables As Variant, Optional ByRef paRelationShips As Variant) As String
Public Property Get SQLWhere() As String
Public Property Let SQLWhere(ByVal psSQLWhere As String)
Public Property Get SQLGroupBy(Optional ByRef paFields As Variant) As String
Public Property Get SQLHaving() As String
Public Property Let SQLHaving(ByVal psSQLHaving As String)
Public Property Get SQLOrderBy(Optional ByRef paFields As Variant) As String
Public Function ClearOrderBy()
Public Property Get SQLPivot(Optional ByRef psField As String, Optional ByRef paColumnsNames As Variant) As String
Conclusion
Pour aider cette DLL à retrouver les noms de tables dans la clause From, il vaudrait mieux que les tables dans la clause From soient des crochets ([...])
J'espère avoir des avis qui me permettront de voir les manquements et surtout de l'optimiser.
ASIMENGO
Sources du même auteur
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
Algorithme de compression LZW [ par PhiPhi ]
Je recherche un algorithme de compression LZW pour une application non commerciale, si possible disponible en vb5.0 ou vb6.0 avec le code source.code
connexion ODBC [ par nds ]
Je voudrais appeler un etat crystal report7 (.rpt) à partir d'un controle activeX "CrystalReport" dans VB et pouvoir modifier le requete SQL qui alime
Probleme requete SQL [ par steph ]
Bonjour à touscomment faire dans une requete SQL pour sélectionner des enregistrements avec une clause WHERE faisant référence à une TEXTBOX du formul
Connection SQL et RDO [ par Linda ]
Bonjour !Voici mon problème.Dans SQL Server j'ai créé un role d'application.Je voudrais connecter mon application à ce rôle comment dois-je faire ?Mer
combo sous access [ par presseb ]
J'ai un probleme sous un formulaire access un combo fait appel a un champs d'une base de données SQLQuand je supprime a l'aide d'une requete sql des c
Requete SQL [ par funtay ]
bonjour, j'ai un problème de syntaxe dans une requete SQL.En fait ,j'ai une date de début (c'est un maskedbox( txt_datedeb)) et une date de fin (c'est
Commande SQL LIKE avec Access [ par Valere ]
Dans un script ASP j'interroge une base access avec une requete de type select * from MaTable Where MonChamp Like 't*' et je me retrouve avec un recor
Compter les enregistrements d'une requete SQL [ par JCLK ]
Je travaille habituellement avec ColdFusion, et j'ai du mal a transformer mes programmes en ASP.Je voudrais compter les enregistrements d'une requete
ASP, SQL et champ DATE [ par idev ]
En ASP avec une base Access, la requete suivante ne fonctionne pas. Erreur de syntaxe. Tout essayer mais je ne trouve pas la bonne syntaxe.SQL = "INSE
Insérer un gif dans une base SQL [ par Sabrina ]
J'utilise ASP pour afficher des gifs pomper sur une base SQL7, et j'aimerais insérer avec VB mes gifs dans cette base via ODBC ...Merci ...
|
Derniers Blogs
TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 !TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 ! par ROMELARD Fabrice
Speakers: Fabrice Meillon et Stanislas Quastana Cette session est basée entièrement sur celle donnée lors de la BUILD cet hiver. Il n'y a pas d'ajout d'information en rapport avec cet évènement passé. Windows 8 Server sera intégralem...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice [HTML5] AUTOUR DU W3C : NOUVEAUX STANDARDS ET WEB MOBILE (LILLE)[HTML5] AUTOUR DU W3C : NOUVEAUX STANDARDS ET WEB MOBILE (LILLE) par Gio
Je m'y prends un peu tard je sais, mais bon je suis développeur web et donc hyper fainéant ! Toujours dans le cadre des technologies émergentes, ici HTML5, parce qu'on aime HTML5 chez Wyg , nous seront présent, le vieux ( Aurélien V.) et moi, pour pr...
Cliquez pour lire la suite de l'article par Gio [WP7] DYNAMICALLY CHANGE STARTUP PAGE[WP7] DYNAMICALLY CHANGE STARTUP PAGE par KooKiz
Let's say that you want to allow the user to customize the startup page of your application. You can easily change the startup page by editing the 'NavigationPage' attribute in the manifest file. But the manifest cannot be modified once the applicatio...
Cliquez pour lire la suite de l'article par KooKiz SESSION SILVERLIGHT 5 3D : SLIDES ET DEMOSSESSION SILVERLIGHT 5 3D : SLIDES ET DEMOS par Groc
Durant les techdays, j'ai eu le plaisir d'animer une session sur Silverlight 5 et la 3D avec Simon Ferquel. Comme promis, voici nos slides et mes démos (celles avec le viper BSG) ici et là. Pour mémoire, les démos utilisent toutes le viper BSG...
Cliquez pour lire la suite de l'article par Groc
Logiciels
DocTranslate (V3.1.0.0)DOCTRANSLATE (V3.1.0.0)DocTranslate est un traducteur de document Microsoft Word, PowerPoint et Excel. Il permet d'autom... Cliquez pour télécharger DocTranslate Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System
|