4D v16.3

AJOUTER DONNEES AU CONTENEUR

Accueil

 
4D v16.3
AJOUTER DONNEES AU CONTENEUR

AJOUTER DONNEES AU CONTENEUR 


 

AJOUTER DONNEES AU CONTENEUR ( typeDonnées ; données ) 
Paramètre Type   Description
typeDonnées  Chaîne in Type des données à ajouter
données  BLOB in Données à ajouter au conteneur

AJOUTER DONNEES AU CONTENEUR ajoute dans le conteneur les données du type spécifié dans typeDonnées présentes dans le BLOB données.

Note : Dans le cadre d'une opération de copier/coller, le conteneur de données correspond au Presse-papiers.

Passez dans typeDonnées une valeur définissant le type de données à ajouter. Vous pouvez passer une signature 4D, un type UTI (Mac OS), un nom/numéro de format (Windows), ou un type de 4 caractères (compatibilité). Pour plus d'informations sur ces types, reportez-vous à la section Gestion du conteneur de données.

Note pour les utilisateurs Windows : Lorsque la commande est utilisée avec des données de type texte (typeDonnées vaut "TEXT", com.4d.private.text.native ou com.4d.private.text.utf16), la chaîne contenue dans le paramètre BLOB données doit se terminer par le caractère NULL sous Windows.

Généralement, vous utilisez la commande AJOUTER DONNEES AU CONTENEUR pour placer plusieurs instances des mêmes données dans le conteneur de données ou pour y ajouter des valeurs qui ne sont pas du texte ou une image. Pour ajouter de nouvelles données au conteneur, il faut d'abord l'effacer à l'aide de la commande EFFACER CONTENEUR.

Si vous voulez effacer le conteneur et y ajouter :

Notez cependant que si un BLOB contient du texte ou une image, vous pouvez utiliser la commande AJOUTER DONNEES AU CONTENEUR pour y ajouter du texte ou une image.

Exemple  

A l'aide des commandes du thème Conteneur de données et des BLOBs, vous pouvez écrire des méthodes de Couper/Copier/Coller pour gérer des données structurées au lieu d'une seule information. Dans l'exemple suivant, les deux méthodes projet écrire enregistrement dans Presse papiers et lire enregistrement dans Presse papiers vous permettent de traiter un enregistrement comme une information à copier dans le Presse-papiers.

  ` Méthode projet écrire enregistrement dans Presse papiers
  ` écrire enregistrement dans Presse papiers ( Numérique )
  ` écrire enregistrement dans Presse papiers ( Numéro de table )
 
 C_ENTIER LONG($1;$vlChamp;$vlTypeChamp)
 C_POINTEUR($vpTable;$vpChamp)
 C_ALPHA(255;$vaNomDoc)
 C_TEXTE($vtDonnéesEnregistrement;$vtDonnéesChamp)
 C_BLOB($vxDonnéesEnregistrement)
 
  ` Effacer le Presse-papiers (il restera vide s'il n'y a pas d'enregistrement courant)
 EFFACER CONTENEUR
  ` Obtenir un pointeur vers la table dont le numéro est passé en paramètre
 $vpTable:=Table($1)
  ` S'il y a un enregistrement courant pour cette table
 Si((Numero enregistrement($vpTable->)>=0) | (Nouvel enregistrement($vpTable->)))
  ` Initialiser la variable Texte qui contiendra l'image de texte de l'enregistrement
    $vtDonnéesEnregistrement:=""
  ` Pour chaque champ de l'enregistrement :
    Boucle($vlChamp;1;Lire numero dernier champ($1))
  ` Obtenir le type du champ
       LIRE PROPRIETES CHAMP($1;$vlChamp;$vlTypeChamp)
  ` Obtenir un pointeur vers le champ
       $vpChamp:=Champ($1;$vlChamp)
  ` Selon le type du champ, copier (ou non) ses données de façon appropriée
       Au cas ou
          :(($vlTypeChamp=Est un champ alpha) | ($vlTypeChamp=Est un texte))
             $vtDonnéesChamp:=$vpChamp->
          :(($vlTypeChamp=Est un numérique) | ($vlTypeChamp=Est un entier) | ($vlTypeChamp=Est un entier long)| ($vlTypeChamp=Est une date)|($vlTypeChamp=Est une heure))
             $vtDonnéesChamp:=Chaine($vpChamp->)
          :($vlTypeChamp=Est un booléen)
             $vtDonnéesChamp:=Chaine(Num($vpChamp->);"Oui;;Non")
          Sinon
  ` Passer et ignorer les autres types de champs
             $vtDonnéesChamp:=""  
       Fin de cas
  ` Accumuler les données sur le champ dans une variable texte qui stocke l'image de texte de l'enregistrement
       $vtDonnéesEnregistrement:=$vtDonnéesEnregistrement+Nom du champ($1;$vlChamp)+":"+Caractere(9)+$vtDonnéesChamp+CR
  ` Note : La méthode CR retourne Caractere(13) sous Mac OS et Caractere(13)+Caractere(10) sous Windows
    Fin de boucle
  ` Mettre l'image de texte de l'enregistrement dans le Presse-papiers
    FIXER TEXTE DANS CONTENEUR($vtDonnéesEnregistrement)  
  ` Nommez le fichier d'Album dans le Dossier temporaire
    $vaNomDoc:=Dossier temporaire+"Album"+Chaine(1+(Hasard%99))
  ` Supprimer le fichier d'Album s'il existe (il faut tester une erreur ici)
    SUPPRIMER DOCUMENT($vaNomDoc)
  ` Créez le fichier d'Album
    REGLER SERIE(10;$vaNomDoc)
  ` Envoyer l'enregistrement entier dans le Presse-papiers
    ENVOYER ENREGISTREMENT($vpTable->)
  ` Fermer le fichier d'Album
    REGLER SERIE(11)
  ` Charger le fichier d'Album dans un BLOB
    DOCUMENT VERS BLOB($vaNomDoc;$vxDonnéesEnregistrement)
  ` Nous n'avons plus besoin du fichier d'Album
    SUPPRIMER DOCUMENT($vaNomDoc)
  ` Ajouter l'image complète de l'enregistrement dans le Presse-papiers
  ` Note: nous utilisons le type de données "4Drc" de façon arbitraire
    AJOUTER DONNEES AU CONTENEUR("4Drc";$vxDonnéesEnregistrement)
  ` Le Presse-papiers contient :
  ` (1) Une image de texte de l'enregistrement (comme illustré dans les copies d'écran ci-dessous)
  ` (2) Une image entière de l'enregistrement (y compris les images, sous-tables et les champs de type BLOB)
 Fin de si

Lors de la saisie d'un enregistrement, si vous appliquez la méthode écrire enregistrement dans Presse papiers à la table, le Presse-papiers contiendra le texte de l'enregistrement et également l'image entière de l'enregistrement.

Vous pouvez coller cette image de l'enregistrement dans un autre enregistrement, à l'aide de la méthode lire enregistrement dans Presse papiers, qui est la suivante :

  ` Méthode lire enregistrement dans Presse papiers
  ` lire enregistrement dans Presse papiers ( Numéro )
  ` lire enregistrement dans Presse papiers ( Numéro de table )
 C_ENTIER LONG($1;$vlChamp;$vlTypeChamp;$vlPosCR;$vlPosColon)
 C_POINTEUR($vpTable;$vpChamp)
 C_ALPHA(255;$vaNomDoc)
 C_BLOB($vxDonnéeesPressePapiers)
 C_TEXTE($vtDonnéeesPressePapiers;$vtDonnéesChamp)
 
  ` Obtenir un pointeur vers la table dont le numéro est passé en tant que paramètre
 $vpTable:=Table($1)
  ` S'il y a un enregistrement courant pour cette table
 Si((Numero enregistrement($vpTable->)>=0) | (Nouvel enregistrement($vpTable->)))
    Au cas ou
  ` Est-ce que le Presse-papiers contient une image entière de l'enregistrement ?
       :(Tester conteneur("4Drc")>0)
  ` Si oui, extraire le contenu du Presse-papiers
          LIRE DONNEES CONTENEUR("4Drc";$vxDonnéesPressePapiers)
  ` Nommer le fichier d'Album dans le Dossier temporaire
          $vaNomDoc:=Dossier temporaire+"Album"+Chaine(1+(Hasard%99))  
  ` Supprimer le fichier d'Album s'il existe (il faut tester l'erreur ici)
          SUPPRIMER DOCUMENT($vaNomDoc)
  ` Enregistrer le BLOB dans le fichier d'Album
          BLOB VERS DOCUMENT($vaNomDoc;$vxDonnéesPressePapiers)
  ` Ouvrir le fichier d'Album
          REGLER SERIE(10;$vaNomDoc)
  ` Recevoir l'enregistrement entier du fichier d'Album
          RECEVOIR ENREGISTREMENT($vpTable->)
  ` Fermer le fichier d'Album
          REGLER SERIE(11)
  ` Nous n'avons plus besoin du fichier d'Album
          SUPPRIMER DOCUMENT($vaNomDoc)
  ` Est-ce que le Presse-papiers contient du texte ?
       :(Tester conteneur("TEXT")>0)
  ` Extraire le texte du Presse-papiers  
          $vtDonnéesPressePapiers:=Lire texte dans conteneur
  ` Initialiser le numéro de champ à incrémenter
          $vlChamp:=0
          Repeter
  ` Chercher la ligne de champ suivante dans le texte
             $vlPosCR:=Position(CR;$vtDonnéesPressePapiers)
             Si($vlPosCR>0)
  ` Extraire la ligne de champ
                $vtDonnéesChamp:=Sous chaine($vtDonnéesPressePapiers;1;$vlPosCR-1)
  ` S'il y a un signe deux points ":"
                $vlPosColon:=Position(":";$vtDonnéesChamp)
                Si($vlPosColon>0)
  ` Récupérer seulement les données de champ (supprimer le nom du champ)
                   $vtDonnéesChamp:=Sous chaine($vtDonnéesChamp;$vlPosColon+2)
                Fin de si
  ` Incrémenter le numéro du champ
                $vlChamp:=$vlChamp+1
  ` Le Presse-papiers peut contenir plus de données dont nous n'avons pas besoin...
                Si($vlChamp<=Lire numero dernier champ($vpTable))
  ` Obtenir le type du champ
                   LIRE PROPRIETES CHAMP($1;$vlChamp;$vlTypeChamp)
  ` Obtenir un pointeur vers le champ
                   $vpChamp:=Champ($1;$vlChamp)
  ` Selon le type du champ, copier (ou non) le texte d'une manière appropriée
                   Au cas ou
                      :(($vlTypeChamp=Est un champ alpha) | ($vlTypeChamp=Est un texte))
                         $vpChamp->:=$vtDonnéesChamp
                      :(($vlTypeChamp=Est un numérique) | ($vlTypeChamp=Est un entier) | ($vlTypeChamp=Est un entier long))
                         $vpChamp->:=Num($vtDonnéesChamp)
                      :($vlTypeChamp=Est une date)
                         $vpChamp->:=Date($vtDonnéesChamp)
                      :($vlTypeChamp=Est une heure)
                         $vpChamp->:=Heure($vtDonnéesChamp)
                      :($vlTypeChamp=Est un booléen)
                         $vpChamp->:=($vtDonnéesChamp="Oui")
                      Sinon
  ` Passer et ignorer les autres types de données
                   Fin de cas
                Sinon
  ` Tous les champs ont été affectés, sortir de la boucle
                   $vtDonnéesPressePapiers:=""
                Fin de si
  ` Eliminer le texte qui vient d'être extrait
                $vtDonnéeesPressePapiers:=Sous chaine($vtDonnéeesPressePapiers;$vlPosCR+Longueur(CR))
             Sinon
  ` Aucun délimiteur trouvé, sortir de la boucle
                $vtDonnéesPressePapiers:=""
             Fin de si
  ` Répéter jusqu'à ce que nous ayons des données
          Jusque(Longueur($vtDonnéesPressePapiers)=0)
       Sinon
          ALERTE("Le Presse-papiers ne contient pas de données pouvant être collées en tant qu'enregistrement.")
    Fin de cas
 Fin de si

Si les données dans le BLOB sont correctement ajoutées au conteneur, la variable système OK prend la valeur 1. Sinon, OK est mise à 0 et une erreur peut être générée.



Voir aussi  

EFFACER CONTENEUR
FIXER IMAGE DANS CONTENEUR
FIXER TEXTE DANS CONTENEUR

 
PROPRIÉTÉS 

Produit : 4D
Thème : Conteneur de données
Numéro : 403
Nom intl. : APPEND DATA TO PASTEBOARD

Cette commande modifie la variable système OK

 
HISTORIQUE 

Modifié : 4D v11 SQL

 
UTILISATION DE L'ARTICLE

4D - Langage ( 4D v16)
4D - Langage ( 4D v16.1)
4D - Langage ( 4D v16.2)
4D - Langage ( 4D v16.3)