titre_site.jpg (51607 octets)

COPY TO ARRAY

 

Copie les données à partir de champs non Mémo de la table en cours, remplace les éléments d'un tableau existant et déplace le pointeur d'enregistrement sur le dernier enregistrement copié.

Syntaxe

COPY TO ARRAY <tableau>[<portée>] [FOR <condition 1>][WHILE <condition 2>][FIELDS <liste de champs>]

<portée>

Le nombre d'enregistrements à copier dans le tableau spécifié. RECORD <n> identifie un enregistrement unique par son numéro d'enregistrement. Vous pouvez aussi spécifier un signet pour les tables qui ne disposent pas de numéros d'enregistrements. NEXT <n> identifie n enregistrements, en commençant par l'enregistrement en cours. ALL spécifie tous les enregistrements. REST spécifie tous les enregistrements à partir de l'enregistrement en cours jusqu'à la fin du fichier.

FOR <condition 1>WHILE <condition 2>

Détermine les enregistrements affectés par COPY TO ARRAY. FOR restreint COPY TO ARRAY aux enregistrements qui satisfont à <condition 1>. WHILE commence le traitement à l'enregistrement en cours et le poursuit avec chaque enregistrement suivant tant que <condition 2> est vraie.

FIELDS <liste de champs>

Copie les données des champs de la liste dans l'ordre de <liste de champs>. Sans FIELDS, dBASE copie tous les champs que le tableau peut contenir selon l'ordre des champs dans la table en cours.

 ico_MsDos.jpg (1668 octets)  vdb5.gif (351 octets) Description



Utilisez COPY TO ARRAY pour copier les enregistrements de la table en cours dans un tableau existant. Pour copier les champs et les enregistrements spécifiés, utilisez DECLARE Exemple[<variable 1>,<variable 2>], où <variable 1> représente le nombre maximum d'enregistrements à copier et <variable 2> le nombre maximum de champs à copier. Si vous utilisez DECLARE Exemple[2,3], vous pouvez copier un maximum de trois champs à partir d'un maximum de deux enregistrements. Pour copier les données de tous les champs et de tous les enregistrements d'une table sans les champs Mémo, utilisez DECLARE Exemple[RECCOUNT( ), FCOUNT( )].

Avec un tableau à deux dimensions, le premier indice est le nombre d'enregistrements à copier, et le second indice est le nombre de champs à copier. Par exemple, si vous émettez la commande DECLARE Test[2,3], COPY TO ARRAY Test peut copier trois champs de deux enregistrements.
COPY TO ARRAY peut copier dans des tableaux à plus de deux dimensions (multi-dimensionnel), mais elle n'utilise que les deux derniers indices. L'avant-dernier indice de <tableau> détermine le nombre d'enregistrements que peut contenir le tableau, et le dernier indice détermine le nombre de champs que le tableau peut contenir. Par exemple, DECLARE Test[4,5,2,3] et DECLARE Test[2,3] créent toutes les deux un tableau dans lequel COPY TO ARRAY copie trois champs de deux enregistrements.

Avec un tableau à une dimension, COPY TO ARRAY ne peut copier qu'un seul enregistrement. Dans ce cas, le nombre d'éléments détermine le nombre de champs à copier. Par exemple, si vous émettez DECLARE Test[5], COPY TO ARRAY copie les cinq premiers champs de l'enregistrement en cours.
COPY TO ARRAY copie dans l'ordre d'index ou des numéros d'enregistrements, et à l'intérieur de chaque enregistrement, dans l'ordre des numéros de champs à moins que vous utilisiez l'option FIELDS pour spécifier l'ordre des champs à copier.

Si le nombre spécifié par le dernier indice du tableau est plus grand que le nombre de champs copiés à partir de la table, les éléments de tableaux supplémentaires restent initialisés à .F. ou à une valeur précédemment stockée. De même, si le nombre spécifié par l'avant-dernier indice du tableau est plus grand que le nombre d'enregistrements copiés à partir de la table, les éléments de tableaux supplémentaires restent initialisés à .F. ou à une valeur précédemment stockée.

 

Plus2_5-Icon.jpg (1250 octets) xDML vers ooDML

Avec cette commande XBase DML vous pouvez copier une table entière dans un tableau, à l'exception des champs mémo. Vous pouvez préciser une liste des champs, vous pouvez limiter les lignes à copier, etc

Pour faire le même genre de traitement, le travail est un peu plus grand, puisque l'OODML ne comporte pas cette fonctionnalité. Cependant, cela peut être fait assez facilement.

Une méthode simple est de créer une petite routine avec deux boucles. L'exemple suivant copie toutes les lignes et les champs d'une table dans un tableau:

Code    Plus2_5-Icon.jpg (1250 octets)

Copier la totalité d'une table

nCols = form.rowset.fields.size
nRows = form.rowset.count()
aTable = new array( nRows, nCols )
for i = 1 to nRows
   for j = 1 to nCols
   if form.rowset.fields.type $ "MEMO, OLE"
     aTable[i,j] = form.rowset.fields.type
   endif
   aTable[ i, j ] = form.rowset.fields[ j ].value
   next
next


Copier un enregistrement

aCopieVersTableau= new array()
for I = 1 to form.rowset.fields.size
  if form.rowset.fields[I].fieldName # '_dbaselock_'
    aCopieVersTableau.add(form.rowset.field[I].value)
  endif
next
// source : dbase.programming - De : Jean-Pierre Martel
//   Date : 2000/07/10        - Objet : Re: About copy to array

 

 

 

retour

Sources :

Aide Visual dbase V5.7
http://www.dbase.com/Knowledgebase/INT/xb2vdb7oodml/x2oodml.htm

 

Retour à l'accueil

Si vous voyez des erreurs, n'hésitez pas à le signaler.

Dernière modification : lundi 20 septembre 2010

©  M.A.