Translateurs SQL (tech)
De Wiki1000
Version du 1 mars 2019 à 17:31 par Syfre (discuter | contributions)
Sommaire |
Introduction
Le traducteur de code est un objet technique permetant d’écrire du code SQL indépendant du type de serveur de base de données utilisé.
Vous pouvez accéder aux fonctions du traducteur par l'attribut "Translator" d'un curseur ou d'une requête.
Propriétés
DBOUTOPCONCATSTRINGS | Renvoie l'opérateur de concaténation de chaîne. |
Méthodes
DBOUTVARIANT | Traduit une valeur iValue en fonction de son type. |
DBOUTROWCOUNT | Traduit l'instruction SQL qui force le moteur de données à arrêter l'exécution de la requête après avoir renvoyé le nombre de lignes spécifié. |
DBOUTSTR | Traduit une valeur de type string. |
DBOUTOID | Traduit un oid. |
DBOUTDATEPART | Traduit la fonction DATEPART qui renvoie un entier représentant l'élément de date précisé dans la date spécifiée. |
DBOUTSUBSTR | Traduit l'instruction SUBSTRING qui renvoie une partie d'une expression de type caractère, binaire, texte ou image. |
DBOUTDAYSBETWEEN | Traduit la fonction DATEDIFF qui renvoie le nombre de jours traversées entre deux dates données. |
DBOUTISNULL | Traduit la fonction ISNULL qui remplace NULL par la valeur de remplacement spécifiée. |
DBOUTWHERESTRING | Traduit une expression en tenant compte de la gestion des NULL du moteur de basse de données. |
DBOUTJOIN | Traduit une syntaxe pour une jointure simple. |
DBOUTLEFTOUTERJOIN | Traduit la syntaxe d'une jointure externe. Les paramètres sont identiques à ceux de la fonction DBOUTJOIN. |
DBOUTTABLENAME | Traduit un nom de table avec options de verrouillage. |
dbOutWhereNull | Terme null |
dbOutWhereNotNull | Terme not null |
Exemples
Utilisation de dbOutVariant
cursor.SQL.Add(Format('WHERE (dateEcriture = %s)', [cursor.Translator.dbOutVariant(vdateEcriture)]));
Utilisation de dbOutTableName
cursor.SQL.Add('SELECT * FROM ' + cursor.Translator.dbOutTableName('TPIECE','Piece', dbtoNOLock)); // Sur MSSQL la fonction retourne SELECT * FROM TPIECE Piece (NOLOCK)
Utilisation de dbOutJoin
cursor.SQL.Add('SELECT * FROM ' + cursor.Translator.dbOutTableName('TPIECE','Piece', dbtoNOLock)); cursor.SQL.Add(cursor.Translator.dbOutJoin('TJOURNAL','Journal', dbtoNOLock, 'oid','Piece',oidJournal,vWhereJoin)); cursor.SQL.Add('WHERE Journal.code = "AC"'); if (vWhereJoin <> '') then cursor.SQL.ADD(' and '+ vWhereJoin); // // Sur MSSQL la fonction retourne : // // SELECT * FROM TPIECE (NOLOCK) // LEFT OUTER JOIN TJOURNAL Journal (NOLOCK) // ON(Journal.oid = Piece.oidJournal) // WHERE (Journal.Code = "AC") // // et sur ORACLE // // SELECT * FROM TPIECE Piece, TJOURNAL Journal // WHERE (Journal.Code = "AC") // and (Journal.oid = Piece.oidJournal)
Utilisation de dbOutDatePart
cursor.SQL.Add(cursor.Translator.dbOutDatePart(dpYear,'dateEcriture')); // Sur MSSQL la fonction retourne : DATEPART(year,dateEcriture) // et sur ORACLE : to_NUMBER(to_CHAR(dateEcriture, ''YYYY''))
Utilisation de dbOutSubStr
cursor.SQL.Add(cursor.Translator.dbOutSubstr(Caption,1,5)); // Sur SQL Server la fonction retourne : SUBSTRING(Caption,1,5) // et sur ORACLE : SUBSTR(Caption,1,5)
Utilisation de dbOutDaysBetween
cursor.SQL.Add(cursor.Translator.dbOutDaysBetween('beginDate','endDate')); // Sur MSSQL la fonction retourne : DATEDIFF(day, beginDate, endDate) // et sur ORACLE : ROUND(to_DATE('beginDate','DD/MM/YYYY HH24 :MI :SS')) // ROUND(to_DATE('endDate','DD/MM/YYYY HH24 :MI :SS'))
Utilisation de dbOutisNull
cursor.SQL.Add(cursor.Translator.dbOutIsNull('sum(montant)',0)); // Sur MSSQL la fonction retourne : ISNULL(sum(montant),0) // et sur ORACLE : NVL(sum(montant),0)
Utilisation de dbOutWhereString
cursor.SQL.Add(cursor.Translator.dbOutWhereString('Caption','=',valeur)); // Sur ORACLE si le valeur est vide la fonction retourne Caption is null
— Code métier — Développement DSM —