Le DataSet (ensemble de données) dans LoGeAs

Cette page est une page sur l'utilisation avancé du filtrage dans les états LoGeAs.
Vous pouvez aussi consulter

Utilisation des états dans LoGeAs

Mieux utilisez l'outil de pré-filtrage des états (lorsqu'il est disponible)

Paramétrage des états enveloppe et étiquette|

Créer modifier ... les états

les filtrages dans les états de LoGeAs (utilisateurs avancés)

A partir de la version 9.4.5 LoGeAs Web propose dans les états un objet unique d’accès au données.
Celui-ci à été optimisé pour réduire les échanges avec le serveur et augmenter la résilience à l’accès aux données (data non autorisé à l'utilisateur et injection SQL).

Le filtrage des données

Pour l’accès à la base de données via les états (et les export qui leurs sont liés) LoGeAs propose 3 niveaux de filtrage des données :

le niveau le plus bas est réalisé automatiquement par le logiciel en limitant l’accès par l'utilisateur au seul données pour lesquelles il dispose des droits correspondant (voir ici).

le niveau intermédiaire est généré par un pré-filtre dans lequel il est possible de réduire le jeux de donnée, ainsi que de l'ordonner.

Afin l'état lui même, possède sur son dataset (objet d'accès au donnée) un ensemble de filtrage

Afin de faciliter le choix des données qui vont être traitées, il est possible de lancer à l'ouverture de l'état un “pré-filtre” qui va permettre de limiter les données à trier.

La gestion du pré-filtre

Paramétrer dans l'état l'usage du le pré-filtre

Pour que le filtre soit lancer il faut sur le DataSet concerné:

initialiser à “True” (vrai) l'option ShowFilterDialog

initialiser le “NomEtat”. Il est important de comprendre que les filtres (de ShowDialogFilter) sont commun à plusieurs états des le moment ou il ont le même “NomEtat”

Utilisez le pré-filtre

Voir la page dédié
Le paramétrage des pré-filtres par défaut

Le DataSet TfrxQuery de Logeas informatique

Quelques informations complémentaire pour les développeurs and co
Unité D:\dev\logeas\src\Commun\Program\FRX\frxGSComponents.pas

Organisation des interaction entre les filtrages

Le principe de fonctionnement retenu est le suivant :

au lancement de l'état (Initialisation et exécution) TfrxGSQuery.Create on ne connait pas le nom de la table ou la requête SQL, on crée donc le DataSet principal (dataset et ftable qui pointe vers le même objet) et le secondaire (fTableInterne) vide (enfin avec un ID sinon TkbmMemSQL plante) car TReport à besoin de l'objet

ensuite la création de la table (CreateTable) est appelez en fonction de l'initialisation des données

pour le composant SQL (TfrxGSQuery) - Chargement de la requête SQL

l'ensemble des données et ensuite chargé (modulo le filtrage dans TBase.OnGetDataSet)

l'assistant de filtrage est ensuite lancé, il initialiser WhereClause et OrderClause du DataSet

CreateTable est alors relancé, il ne touche pas fTable(TkbmMemSQL) mais recharge fTableInterne via TBase.OnGetDataSet en lui passant le WhereClause et le OrderClause. **Remarque : A ce stade l'état ne dispose donc que des données filtrées par l'utilisateur et accepter par le filtrage de TBase.OnGetDataSet (lié aux droits d’accès)

Enfin on filtre éventuellement ftable/Dataset avec le filtre défini dans le composant de l'état.

Les propriétés du DataSet "TfrxGSQuery"

Propriétés liées au pré-filtrage

Propriété	Type	Lecture/Ecriture	Commentaire
FilterName	String	Lecture/Ecriture	Nom de filtre choisi dans le pré-filtre
NonEtat	String	Lecture/Ecriture
ShowFilterDialog	Boolean	Lecture/Ecriture	lance ou non le pré-filtre

Propriétés liées au filtrage finales des données reçues

Propriété	Type	Lecture/Ecriture	Commentaire
SQL	String	Lecture/Ecriture	Requête SQL demandée
Filter	String	Lecture/Ecriture	Si “Filtered” est vrai, active un filtre supplémentaire sur les données reçu depuis la base
Filtered	Boolean	Lecture/Ecriture	Active “Filter” ci-dessus

Propriétés liées à la possibilité d'export (hors interface)

Propriété	Type	Lecture/Ecriture	Commentaire
CanExport	Boolean	Lecture/Ecriture	Active le menu d'export de la table sur le clic droit sur le nom de l'état (à l’exécution)

Propriétés informatives

Propriété	Type	Lecture/Ecriture	Commentaire
Description	String	Lecture/Ecriture
DescriptionInterne	String	Lecture seul	Donne un résumé de la dernière exécution du composant
SQLFinal	String	Lecture seul	Requête SQL exécutée sur la base de donnée
UserName	String	Lecture/Ecriture	Nom de la table dans l'interface, les scripts …

Propriétés autres

Propriété	Type	Lecture/Ecriture	Commentaire
BCDTOCurrency	Boolean	Lecture/Ecriture	?
CloseDataSource	Booleaan	Lecture/Ecriture
GSDataSet	TDataSet	Lecture seul	Permet au pré-filtre d'accéder au dataset de donnée
IndexTag	Integer
Name	String	Lecture/Ecriture	Nom du composant
ShowFilterDialog	Boolean	Lecture/Ecriture	lance ou non le pré-filtre

Propriétés non implémentées ou non testées

Propriété	Type	Lecture/Ecriture	Commentaire
IgnoreDupParams	Boolean	Lecture/Ecriture	Indique pour les requêtes avec paramètres si on doit géré les doublons (non géré)
Params	TfrxParams	Lecture/Ecriture	Accès au paramétrage de la requête SQL
RangeBegin	Lecture/Ecriture	Limitation de la requête à un sous ensemble (non implémenté)
RangeEnd	Lecture/Ecriture	Limitation de la requête à un sous ensemble (non implémenté)
RangeEndCount	Lecture/Ecriture	Limitation de la requête à un sous ensemble (non implémenté)
Master	DataSet	Lecture/Ecriture	Gestion des liaisons master/détail entre DataSet (non géré)
FieldAliases	TStringList	Lecture/Ecriture

Syntaxe SQL de la requête

Fonctions disponibles

Lien externe

MATH.TRIG

SIN(x)

COS(x)

TAN(x)

LOG(x)

LOG2(x)

EXP(x)

MATH

TRUNC(x) Returns integer part

FRAC(x) Returns fractional part

MOD(x,y) Return remainder after integer division

DIV(x,y) Integer division

SQRT(x) Square root

SQR(x) Square. Same as x*x

ROOT(x,y) Calculate y’th root of x.

MIN(x1..,xn) Return minimum argument value

MAX(x1..,xn) Return maximum argument value

AVG(x1..xn) Return average value of all arguments

SUM(x1..,xn) Return sum of all arguments

ABS(x) Return absolute (Non negative) value of x

POW(x,y) Return x in the power of y

STRING

UPPER(x) Return uppercase value

LOWER(x) Return lowercase value

TRIM(x) Return value trimmed for leading and trailing spaces

MID(x,y,z) Return z characters from x starting at y (first character is 1)

LEFT(x,y) Return y leftmost characters of x

RIGHT(x,y) Return y rightmost characters of x

LENGTH(x) Return the length in characters of x

LEFTPAD(x,y,z) Pad left of x with the character y until the complete result has a length of z

RIGHTPAD(x,y,z) Pad right of x with the character y until the complete result has a length of z

CHR(x) Convert the integer value x to a unicode character

POS(x,y) Return the position in y, where the substring x is to be found. 0 is returned if x is not in y

REPLACE(x,y,z,v,w) Search x for value y. When found, replace y with z. If v (optional) is true, then all occurrences are replaced. If w (optional) is true, then search is case insensitive

SPLIT(x,y,OUT z) Search x for the sub string y. When found return the leading part as result or null if nothing found. If z is provided (optional) then the trailing part is returned in the variable given by z. *NEW IN 7.77*

DATETIME

NOW Returns current date and time as a Delphi TDateTime type floating point value.

DATE(x) Returns the date part of x which is a Delphi TDateTime type floating point value, as an integer. Same as TRUNC(somedate)

TIME(x) Returns the time part of x which is a Delphi TDateTime type floating point value as a float. Same as FRAC(somedate)

YEAR(x) Returns the year as an integer (2017) of the Delphi TDateTime type floating point value.

MONTH(x) Returns the month as an integer (1 = Jan, 12=Dec) of the Delphi TDateTime type floating point value.

DAY(x) Returns the day of month as an integer (1..31) of the Delphi TDateTime type floating point value.

HOURS(x) Returns the hour value as an integer (0..23) of the Delphi TDateTIme type floating point value.

MINUTES(x) Returns the minutes part as an integer (0..59) of the Delphi TDateTime type floating point value.

SECONDS(x) Returns the seconds part as an integer (0..59) of the Delphi TDateTime type floating point value.

DATESTRING(x) Returns the date of a Delphi TDateTime type floating point value as a formatted string according to the FormatSettings defined on the TkbmMemSQL component.

TIMESTRING(x) Returns the time of a Delphi TDateTime type floating point value as a formatted string according to the FormatSettings defined on the TkbmMemSQL component.

CAST

CASTTODATETIME(x) Casts x to a Delphi TDateTime floating point value. If x is a string, it will be parsed according to the FormatSettings.

CASTTOSTRING(x) Casts x to a string. If x is a TDateTime value, it will be converted to a date/time string value according to the FormatSettings.

CASTTONUMBER(x) Casts x to a number. If x is a string, it will be converted to a floating point value according to the FormatSettings.

CONDITIONAL

IF(x,y,z,v) Depending on x, either y, z or v (optional) will be returned. If x is true, then y will be returned. If x is false, then z will be returned and if x is null then v alternative z will be returned if v is not specified.

ISNULL(x) Return true or false depending on if x is null.

CONVERSION

DATATYPE(x,OUT y, OUT z) Parses the SQL style datatype (eg. VARCHAR(30)) given in x, and returns the Delphi TFieldType best matching as an integer or NULL if the given SQL datatype is invalid. If y is provided (optional), the size of the declaration (eg 30) is returned in the referenced variable. If z is provided (optional), the precision of the declaration (eg 0) is returned in the referenced variable.

Fonctions ajoutées

Nom et format	Explication
StrMonth(<DateTime>)	Rend le nom du mois sous forme abrégée

Syntaxe SQL

Lien externe

Limitations/problèmes connues

le requetteur ne gère pas plusieurs niveau (exemple : SELECT * FROM (SELECT * FROM Personne)) FAUX ???

les requettes doivent être au format SQL pas au format mormot !!!

les parametre dans les requettes SQL ne sont pas gérés

lors des regroupement par Group BY le renommage des champs initiaux d'une table pose probléme …

tous les champs déclaré doivent être repris dans ORDER BY!!!

lors d'un plantage (mauvaise requette par exemple) il arrive que les tables disparaisse… Fermer le logiciel et rechargé !!!