MsiViewModify, fonction (msiquery.h)

La fonction MsiViewModify met à jour un enregistrement extrait.

Syntaxe

UINT MsiViewModify(
  [in] MSIHANDLE hView,
  [in] MSIMODIFY eModifyMode,
  [in] MSIHANDLE hRecord
);

Paramètres

[in] hView

Gérer vers une vue.

[in] eModifyMode

Spécifie le mode de modification. Ce paramètre peut prendre les valeurs suivantes.

Valeur Signification
MSIMODIFY_SEEK
-1
Actualise les informations dans l’enregistrement fourni sans modifier la position dans l’ensemble de résultats et sans affecter les opérations d’extraction suivantes. L’enregistrement peut ensuite être utilisé pour la mise à jour, la suppression et l’actualisation ultérieures. Toutes les colonnes de clé primaire de la table doivent se trouver dans la requête et l’enregistrement doit avoir au moins autant de champs que la requête. La recherche ne peut pas être utilisée avec des requêtes à plusieurs tables. Ce mode ne peut pas être utilisé avec une vue contenant des jointures. Voir aussi les remarques.
MSIMODIFY_REFRESH
0
Actualise les informations dans l’enregistrement. Vous devez d’abord appeler MsiViewFetch avec le même enregistrement. Échoue pour une ligne supprimée. Fonctionne avec les enregistrements en lecture-écriture et en lecture seule.
MSIMODIFY_INSERT
1
Insère un enregistrement. Échoue si une ligne avec les mêmes clés primaires existe. Échoue avec une base de données en lecture seule. Ce mode ne peut pas être utilisé avec une vue contenant des jointures.
MSIMODIFY_UPDATE
2
Met à jour un enregistrement existant. Clés non primaires uniquement. Doit d’abord appeler MsiViewFetch. Échoue avec un enregistrement supprimé. Fonctionne uniquement avec les enregistrements en lecture-écriture.
MSIMODIFY_ASSIGN
3
Écrit les données actuelles dans le curseur dans une ligne de table. Met à jour l’enregistrement si les clés primaires correspondent à une ligne existante et les insèrent si elles ne correspondent pas. Échoue avec une base de données en lecture seule. Ce mode ne peut pas être utilisé avec une vue contenant des jointures.
MSIMODIFY_REPLACE
4
Met à jour ou supprime et insère un enregistrement dans une table. Vous devez d’abord appeler MsiViewFetch avec le même enregistrement. Met à jour l’enregistrement si les clés primaires sont inchangées. Supprime l’ancienne ligne et insère une nouvelle si les clés primaires ont changé. Échoue avec une base de données en lecture seule. Ce mode ne peut pas être utilisé avec une vue contenant des jointures.
MSIMODIFY_MERGE
5
Insère ou valide un enregistrement dans une table. Insère si les clés primaires ne correspondent à aucune ligne et vérifie s’il existe une correspondance. Échoue si l’enregistrement ne correspond pas aux données de la table. Échoue s’il existe un enregistrement avec une clé en double qui n’est pas identique. Fonctionne uniquement avec les enregistrements en lecture-écriture. Ce mode ne peut pas être utilisé avec une vue contenant des jointures.
MSIMODIFY_DELETE
6
Supprimez une ligne de la table. Vous devez d’abord appeler la fonction MsiViewFetch avec le même enregistrement. Échoue si la ligne a été supprimée. Fonctionne uniquement avec les enregistrements en lecture-écriture. Ce mode ne peut pas être utilisé avec une vue contenant des jointures.
MSIMODIFY_INSERT_TEMPORARY
7
Insère un enregistrement temporaire. Les informations ne sont pas persistantes. Échoue si une ligne avec la même clé primaire existe. Fonctionne uniquement avec les enregistrements en lecture-écriture. Ce mode ne peut pas être utilisé avec une vue contenant des jointures.
MSIMODIFY_VALIDATE
8
Valide un enregistrement. Ne valide pas entre les jointures. Vous devez d’abord appeler la fonction MsiViewFetch avec le même enregistrement. Obtenez les erreurs de validation avec MsiViewGetError. Fonctionne avec les enregistrements en lecture-écriture et en lecture seule. Ce mode ne peut pas être utilisé avec une vue contenant des jointures.
MSIMODIFY_VALIDATE_NEW
9
Validez un nouvel enregistrement. Ne valide pas entre les jointures. Recherche les clés en double. Obtenez les erreurs de validation en appelant MsiViewGetError. Fonctionne avec les enregistrements en lecture-écriture et en lecture seule. Ce mode ne peut pas être utilisé avec une vue contenant des jointures.
MSIMODIFY_VALIDATE_FIELD
10
Valide les champs d’un enregistrement extrait ou d’un nouvel enregistrement. Peut valider un ou plusieurs champs d’un enregistrement incomplet. Obtenez les erreurs de validation en appelant MsiViewGetError. Fonctionne avec les enregistrements en lecture-écriture et en lecture seule. Ce mode ne peut pas être utilisé avec une vue contenant des jointures.
MSIMODIFY_VALIDATE_DELETE
11
Valide un enregistrement qui sera supprimé ultérieurement. Vous devez d’abord appeler MsiViewFetch. Échoue si une autre ligne fait référence aux clés primaires de cette ligne. La validation ne vérifie pas l’existence des clés primaires de cette ligne dans les propriétés ou les chaînes. Ne vérifie pas si une colonne est une clé étrangère à plusieurs tables. Obtenez les erreurs de validation en appelant MsiViewGetError. Fonctionne avec les enregistrements en lecture-écriture et en lecture seule. Ce mode ne peut pas être utilisé avec une vue qui contient des jointures.

[in] hRecord

Gérez l’enregistrement à modifier.

Valeur retournée

La fonction MsiViewModify retourne les valeurs suivantes :

Notez que dans les situations de mémoire insuffisante, cette fonction peut déclencher une exception STATUS_NO_MEMORY.

Remarques

Les valeurs MSIMODIFY_VALIDATE, MSIMODIFY_VALIDATE_NEW, MSIMODIFY_VALIDATE_FIELD et MSIMODIFY_VALIDATE_DELETE de la fonction MsiViewModify n’effectuent pas de mises à jour réelles ; ils garantissent que les données contenues dans l’enregistrement sont valides. L’utilisation de ces énumérations de validation nécessite que la base de données contienne la table _Validation.

Vous pouvez appeler MSIMODIFY_UPDATE ou MSIMODIFY_DELETE avec un enregistrement immédiatement après avoir utilisé MSIMODIFY_INSERT, MSIMODIFY_INSERT_TEMPORARY ou MSIMODIFY_SEEK à condition que vous n’ayez PAS modifié le 0e champ de l’enregistrement inséré ou recherché.

Pour exécuter une instruction SQL, une vue doit être créée. Toutefois, une vue qui ne crée pas de jeu de résultats, telle que CREATE TABLE ou INSERT INTO, ne peut pas être utilisée avec MsiViewModify pour mettre à jour les tables via la vue.

Vous ne pouvez pas extraire un enregistrement qui contient des données binaires d’une base de données, puis utiliser cet enregistrement pour insérer les données dans une autre base de données. Pour déplacer des données binaires d’une base de données à une autre, vous devez exporter les données dans un fichier, puis les importer dans la nouvelle base de données à l’aide d’une requête et du MsiRecordSetStream. Cela garantit que chaque base de données a sa propre copie des données binaires.

Notez que les actions personnalisées peuvent uniquement ajouter, modifier ou supprimer des lignes, des colonnes ou des tables temporaires d’une base de données. Les actions personnalisées ne peuvent pas modifier les données persistantes dans une base de données, telles que les données qui font partie de la base de données stockée sur disque. Pour plus d’informations, consultez Accès à la session actuelle du programme d’installation à partir d’une action personnalisée.

Si la fonction échoue, vous pouvez obtenir des informations d’erreur étendues à l’aide de MsiGetLastErrorRecord.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows Installer 5.0 sur Windows Server 2012, Windows 8, Windows Server 2008 R2 ou Windows 7. Windows Installer 4.0 ou Windows Installer 4.5 sur Windows Server 2008 ou Windows Vista. Windows Installer sur Windows Server 2003 ou Windows XP
Plateforme cible Windows
En-tête msiquery.h
Bibliothèque Msi.lib
DLL Msi.dll

Voir aussi

Fonctions générales d’accès à la base de données