Variables DataTable

Les variables DataTable fournissent un accés aux données externes et hébergent des données locales.

L'objet .NET sous-jacent de Value est le type DataTable.

Une alternative pour accéder à des données externes est l'utilisation de edvData

Données externes

 

La table est représentée par une grille de données.

Les données sont issues d'une base de données (ici Oracle) dont l'accés est défini par la variable Source de type DataSource.

La requête SQLSelect fournit la requête de sélection :
SELECT * FROM EDTest
WHERE IdTest < :IdTest
ORDER BY IdTest

 

Ici, SQLSelect.IDTEST correspond au paramètre de requête Oracle :IdTest.
Row.IDTEST et Row.LIBELLE sont les champs résultant de l'exécution de la requête.
Ces variables sont générées automatiquement dans les variables respectives SQLSelect et Row.

En l'absence de Row, les variables de colonnes n'existent pas.

Variable Type/Class Commentaire
Source DataSource Chaîne de connexion à une source de données. Peut être vide ou absent pour des données internes.
Status Integer 1 ou 0 si la table est chargée ou non.
RowsCount Integer Nombre de lignes dans la table
Row Integer Numéro de ligne courante. Changer le numéro provoque l'affectation des valeurs aux variables de champs nommées avec des [ ].
Plage de valeur : de 0 à RowsCount -1.
-1 signifie que la table n'est pas chargée. Après appel de NewRow Row vaut RowsCount signifiant qu'on est au-delà des lignes d'origine.
L'utilisation de Row pour naviguer dans une table est une solution lourde en événements générés.
SQLSelect Code Requête SQL de sélection. Utilisée par Open et pour définir les champs-variables nommées avec des [ ].
Peut contenir des scripts JScript avec les balises <?= ?> et <? ?>.
Les champs doivent avoir un nom intégrable conforme aux noms de variables EDV.
SQLUpdate
SQLInsert
SQLDelete
Code Requêtes de mise à jour. Utilisée par Validate et respectivement par Update, Insert et Delete pour définir les variables-champs nommées avec des [ ].
Ces requêtes doivent utiliser les paramètres de requêtage (commençant par : pour Oracle, @ pour SQLServer).
Peuvent contenir des scripts JScript avec les balises <?= ?> et <? ?>.
Open Boolean Charge la table sur la base de la requête de SQLSelect. Change Status à 1 en cas de succés.
Close Boolean Décharge toutes les données de la variable. Change Status à 0.
Peut être utilise pour libérer de la mémoire.
Validate Boolean Valide les modifications faites dans la table vers la base de données externes par le biais des requêtes de mise à jour.
NewRow Boolean Initialise les champs à leur valeur par défaut. Reste à true jusqu'à Update. Positionne Row à RowsCount.
Search Boolean Positionne Row sur la ligne correspondante aux champs clés.
La table doit avoir au moins une colonne de clé.
Update
Insert
Delete
Boolean Exécutent les requêtes SQL respectives en remplaçant les paramètres de requêtes par les valeurs de variables nommées avec des [ ].
Ces fonctions n'ont aucune action sur des sources Internal ou XML, pour cela, Validate doit être utilisée.
La table doit avoir au moins une colonne de clé.

Données internes

En mode Design, le contrôle de grille de données vous permet de définir les colonnes de votre table.

En l'absence de Source, la table est indépendante de toute base externe. Les données associées sont enregistrées dans votre fichier de variables.

La colonne Null définit si le champ doit être obligatoirement rempli.
La colonne Key indique que le champ est unique. Si plusieurs champs sont cochés, c'est la combinaison de ceux-ci qui doit être unique.

Depuis une table connectée à une base externe et via le Designer, lorsque vous validez une modification de structure de table, vous êtes averti de la rupture du lien possible entre les données et votre base.

Attention : Les données d'un DataTable ne sont enregistrées dans les fichiers .edvars uniquement si MyDataTable.TableName = "Internal".

Table de variables EDV

Vous pouvez exécuter des requêtes sur les variables EDV grâce aux variables DataTable :

Trois formes permettent une recherche :

Les expressions régulières, dans EDV, commencent toujours par ^ si EDV doit deviner que c'en est une.
La fonction RegEx.Escape convertit les caractères courants en caractères à rechercher dans une expression régulière ('.' devient '\.' (donc '\\.')).

D'autres méthodes de recherche de variables :

Script Retourne
edvClient.GetVariables(cheminEDV | expressionRégulière | sql [, depth]) Dictionary<string, IVariable>
edvClient.GetVariablesParentsFirst(cheminEDV | expressionRégulière | sql) KeyValuePair<string, IVariable> []
edvClient.GetVariablesChildrenFirst(cheminEDV | expressionRégulière | sql) KeyValuePair<string, IVariable> []
edvars(cheminEDV | expressionRégulière | sql, depth, order ) List<IVariable>

Consultez la référence EDVServer.Client.GetVariables

 

Champs-clés

En mode Design, le contrôle de grille de données vous permet de définir les colonnes clés de votre table, qu'elles soient externes ou internes.

Ce paramétrage est obligatoire pour l'utilisation des propriétés Search, Update et Delete.

Dans les scripts

Le parcours des lignes dans un script peut se faire de deux manières :

Duplication

Les DataTable du .Net ont une méthode .Clone() qui retourne une structure identique mais vide de données.

var src  : DataTable = .MyDom.MyDataTable;
var dest : DataTable = src.Clone();
var newRow : DataRow; //Important de typer pour la surcharge de Rows.Add()
for(var row : DataRow in src.Rows){
	//dest.Rows.Add(row.ItemArray) ne fonctionne malheureusement pas directement
   newRow = dest.NewRow();
   newRow.ItemArray = row.ItemArray;
   dest.Rows.Add(newRow);
}

Transformation de texte

Un texte peut être transformé en objet DataTable par la méthode : edvTools.DataTableFromString(String)

Le texte doit utilisé la tabulation (\t) comme séparateur de colonnes et le retour chariot (\n ou newline) comme séparateur de lignes.

La première ligne contient le nom des champs, éventuellement précédé du type .Net entre paranthèses, dans le format (Type)Nom.

Exemple de construction de texte qui peut être mis dans le script d'une variable de type DataTable :
var lStr = new StringBuilder();
lStr.AppendLine("(Int32)NoLigne\t(String)Nom");
for(var i=1; i < 10; i++)
   lStr.AppendLine(i + "\tValeur " + i);
edvTools.DataTableFromString(lStr.ToString());

La fonction inverse edvTools.DataTableToString(DataTable) retourne le texte décrivant la table. Vous pouvez utiliser cette fonction pour avoir un modèle de texte.

Ces fonctions sont utilisées en interne pour afficher un texte à l'aide d'un contrôle EDVCtrlDataTable ou EDVCtrlArray.


Propriétés de l'objet .Net

Propriété
Fonction

Type .Net Commentaire
Rows DataRowCollection Tableau de tous les enregistrements dans la table.
Select("condition") DataRow[] Tableau des enregistrements répondant aux critères passés en paramètre. Ces critères sont analysés par .net et non EDV.
Attention aux apostrophes dans la chaîne SQL, ils doivent être doublés, ce qui peut se faire par .ToString().Replace("'","''")
Select("condition", "order") DataRow[] Idem avec la liste des champs de tri.
Compute("agregat", "condition") Object Permet de faire une opération sur l'ensemble des lignes répondant à la "condition" du 2nd paramètre.
Par exemple : edvInfo = (.MonDom.MaTable).Compute("SUM(Montant)", "IdProd = 5")

D'autres propriétés peuvent être utilisées.

Pour vous simplifier la vie, EDV met à disposition des raccourcis accessibles en tant que propriétés de la variable EDV.

Propriété
Fonction

Type .Net Commentaire
Rows DataRowCollection Tableau de tous les enregistrements dans la table.
Select("...") DataRow Enumerator Tableau des enregistrements répondant aux critères passés en paramètre. Ces critères sont analysés par .net et non EDV.
Attention aux apostrophes dans la chaîne SQL, ils doivent être doublés, ce qui peut se faire par .ToString().Replace("'","''")
Select("...", "...") DataRow Enumerator Idem avec la liste des champs de tri.
Select(DataRow) DataRow[] Tableau des enregistrements correspondant aux données passées en paramètre. Le nom des colonnes de clé primaire de destination doivent exister dans le DataRow source.

L'objet Rows précédemment utilisé dans cette page est un raccourci proposé par la classe EDV DataTable vers la propriété Rows de l'objet .Net sous-jacent.
La même appel peut être fait en JScript par MaDataTable:Value.Rows ou (MaDataTable).Rows.

La propriété .Net Select se fait avec cette syntaxe : MaDataTable:Select("Key = 'value'")ou(MaDataTable).Select("Key = 'value'").GetEnumerator()
La première forme est un raccourci prévu par EDV, la seconde forme est l'appel directe à .Net qui nécessite l'appel de l'énumerateur pour une boucle for (... in ...).

Pour simplifier les choses, une conversion de type se fait entre .Net et JScript et le nombre de lignes dans un tableau se récupère par .length et non .Count...

Champs Date et Heure

Le filtre sur les champs Date se fait avec la date entre apostrophes MaDataTable:Select("ChpDate > '05/04/2010'")
La conversion de date : MaDataTable:Select("ChpDate > '" + (.MonDom.MaVarDate).ToString("dd/MM/yyyy") + "'")
ou MaDataTable:Value.Select("ChpDate >= '" + DateTime.Now.ToString("dd/MM/yyyy") + "'").GetEnumerator()

Dans le cas où vous stockez l'heure avec ou sans la date, notez que le format .Net comprend 7 chiffres après la seconde.
(MaDataTable).Compute("SUM(Montant)", "DateHeureRef = #" + myDate.ToString("yyyy-MM-dd HH:mm:ss:fffffff") + "#")

Notez l'utilisation alternative de # pour encadrer les dates au format anglo-saxon.

Attention à MS Access qui ne tolère pas les millisecondes; les recherches à partir d'un DateTime.Now ne retournent aucune ligne.

 

Voir aussi

Le type des variables
Les variables DataTable de type Fichier Texte
Les variables DataSource
Les variables
Les recherches de variables
L'accès aux données par edvData
.Net System.Data.DataTable