Translateurs SQL (tech)
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 | function DbOutVariant(const iValue: Variant):string; |
Traduit une valeur iValue en fonction de son type. |
DBOUTROWCOUNT | function DbOutRowCount(iCount:Integer):string; |
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 | function DbOutStr(const iString: string):string; |
Traduit une valeur de type string. |
DBOUTOID | function DbOutOid(const iOID: string):string; |
Traduit un oid. |
DBOUTDATEPART | function DbOutDatePart( iPart: TPartOfDate; const iColumn: string):string; |
Traduit la fonction DATEPART qui renvoie un entier représentant l'élément de date précisé dans la date spécifiée.
iPart peut avoir les valeurs suivantes :
iColumn est une expression correspondant à une valeur de type date. |
DBOUTSUBSTR | function DbOutStr( const iColumn: string; iOfs,iLen : Integer):string; |
Traduit l'instruction SUBSTRING qui renvoie une partie d'une expression de type caractère, binaire, texte ou image.
iOfs : Entier précisant où la sous-chaîne commence. iLen : Entier précisant la longueur de la sous-chaîne (le nombre de caractères ou d'octets à renvoyer). |
DBOUTDAYSBETWEEN | function DbOutDaysBetween(iBeginDate,iEndDate:Variant) :string; |
Traduit la fonction DATEDIFF qui renvoie le nombre de jours traversées entre deux dates données. |
DBOUTISNULL | function DbOutIsNull(iExpr,iResultat : string) : string; |
Traduit la fonction ISNULL qui remplace NULL par la valeur de remplacement spécifiée. |
DBOUTWHERESTRING | function DbOutWhereString( const iFieldName: string; const iOperator: string; const iFieldValue: string):string; |
Traduit une expression en tenant compte de la gestion des NULL du moteur de basse de données.
A utiliser avec les opérateurs de comparaison ">","<",">=","<=" ,"=". |
DBOUTJOIN | function DbOutJoin( const iTableJoint: string; const iAliasJoint: string; iOptsJoint: TdbTableOption; const iColumnLeft: string; const iAliasRight: string; const iColumnRight: string; var iWhereForJoin:string):string; |
Traduit une syntaxe pour une jointure simple.
iTableJoint - nom de la table jointe. iALiasJoint - nom d'alias de la table jointe. iOptJoint - Options de verrouillage de la table jointe pour MSSQL. Vous disposez des options de verrouillage suivantes :
iColumnLeft - colonne de la table gauche de la jointure. iAliasRight - alias de la table du colonne right. iColumnRight - colonne de la table droite de la jointure. Le critère sur lesquels est basée la jointure est (iCumnLeft = iColumnRight). iWhereForJoin - renvoie une condition SQL à mettre dans la clause WHERE. |
DBOUTLEFTOUTERJOIN | function DbOutLeftOuterJoin( const iTableJoint: string; const iAliasJoint: string; iOptsJoint: TdbTableOption; const iColumnLeft: string; const iAliasRight: string; const iColumnRight: string; var WhereForJoin : string) : string; |
Traduit la syntaxe d'une jointure externe. Les paramètres sont identiques à ceux de la fonction DBOUTJOIN. |
DBOUTTABLENAME | function DbOutTableName( const iTableName: string; const iAliasName: string; iOpts: TdbTableOption):string; |
Traduit un nom de table avec options de verrouillage.
iTableName - Nom de la table. iAliasName - Nom du alias. iOptJoint - Options de verrouillage. Voir l'options de verrouillage du DBOUTJOIN. |
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 —