Translateurs SQL (tech)

De Wiki1000

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étierDéveloppement DSM

Outils personnels