|
Trouver une ressource
Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !
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
Fichier Zip
Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !
Télécharger le zip
Sources du même auteur
Sources de la même categorie
Sources en rapport avec celle ci
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 ...
|
Téléchargements
Logiciels à télécharger sur le même thème :
|