Modification d'enregistrements entiers

De RAD Studio
Aller à : navigation, rechercher

Remonter à Modification des données

Dans les fiches, tous les contrôles orientés données, à l'exception des grilles et des navigateurs, donnent accès à un champ unique d'enregistrement.

Par contre, dans votre code, vous pouvez utiliser les méthodes suivantes qui fonctionnent sur des structures d'enregistrements entiers à condition toutefois que la structure des tables de la base sous-jacente à l'ensemble de données soit stable et ne subisse aucun changement. Le tableau suivant récapitule les méthodes disponibles pour manipuler des enregistrements entiers plutôt que des champs individuels de ces enregistrements :

Méthodes qui opèrent sur des enregistrements entiers :

Méthode Description

AppendRecord([tableau de valeurs])

Ajoute un enregistrement avec les valeurs de colonne spécifiées à la fin de la table ; analogue à Append. Exécute implicitement Post.

InsertRecord([tableau de valeurs])

Insère un enregistrement avec les valeurs de colonne spécifiées avant la position en cours du curseur dans la table ; analogue à Insert. Exécute implicitement Post.

SetFields([tableau de valeurs])

Définit les valeurs des champs correspondants ; analogue à l'affectation de valeurs aux composants TField. L'application doit exécuter explicitement Post.

Chacune de ces méthodes accepte comme argument un tableau de valeurs, où chaque valeur correspond à une colonne de l'ensemble de données sous-jacent. Les valeurs peuvent être littérales, variables ou NULL. Si le nombre de valeurs de l'argument est inférieur au nombre de colonnes dans l'ensemble de données, les valeurs restantes sont supposées avoir la valeur NULL.

Pour les ensembles de données non indexés, AppendRecord ajoute un enregistrement à la fin de l'ensemble de données et InsertRecord insère un enregistrement après la position en cours du curseur. Pour les ensembles de données indexés, les deux méthodes placent l'enregistrement à la bonne position dans la table, déterminée par l'index. Dans les deux cas, les deux méthodes déplacent le curseur sur le nouvel enregistrement.

SetFields affecte les valeurs spécifiées dans le tableau de paramètres aux champs de l'ensemble de données. Pour utiliser SetFields, l'application doit d'abord appeler Edit pour mettre l'ensemble de données en mode dsEdit. Pour appliquer les modifications dans l'enregistrement en cours, elle doit exécuter Post.

Si vous utilisez SetFields pour modifier certains champs, et non tous les champs d'un enregistrement existant, vous pouvez transmettre des valeurs NULL pour les champs que vous ne voulez pas changer. Si vous ne fournissez pas un nombre de valeurs correspondant au nombre de champs d'un enregistrement, SetFields leur affecte la valeur NULL. Les valeurs NULL écrasent les valeurs existantes de ces champs.

Par exemple, supposons qu'une base de données dispose d'une table COUNTRY avec les colonnes Name, Capital, Continent, Area et Population. Si un composant Bde.DBTables.TTable appelé CountryTable a été lié à la table COUNTRY, l'instruction suivante insérera un enregistrement dans la table COUNTRY :

CountryTable.InsertRecord(['Japan', 'Tokyo', 'Asia']);
CountryTable->InsertRecord(ARRAYOFCONST(("Japan", "Tokyo", "Asia")));

Cette instruction ne spécifie aucune valeur pour Area et Population, des valeurs NULL leur sont donc affectées. La table est indexée sur Name, l'enregistrement est donc inséré à la position alphabétique de "Japan".

Pour mettre à jour l'enregistrement, l'application peut utiliser le code suivant :

with CountryTable do
begin
  if Locate('Name', 'Japan', loCaseInsensitive) then;
  begin
    Edit;
    SetFields(nil, nil, nil, 344567, 164700000);
    Post;
  end;
end;


TLocateOptions SearchOptions;
SearchOptions->Clear();
SearchOptions << loCaseInsensitive;
if (CountryTable->Locate("Name", "Japan", SearchOptions))
{
  CountryTable->Edit();
  CountryTable->SetFields(ARRAYOFCONST(((void *)NULL, (void *)NULL, (void *)NULL,
        344567, 164700000)));
  CountryTable->Post();
}

Ce code affecte des valeurs aux champs Area et Population, avant de les enregistrer dans la base de données. Les trois pointeurs NULL agissent comme marqueurs de remplissage des trois premières colonnes pour indiquer que leur contenu actuel doit être préservé.

Voir aussi