Partager via


MsiDatabaseMergeA, fonction (msiquery.h)

La fonction MsiDatabaseMerge fusionne deux bases de données, ce qui autorise les lignes en double.

Syntaxe

UINT MsiDatabaseMergeA(
  [in] MSIHANDLE hDatabase,
  [in] MSIHANDLE hDatabaseMerge,
  [in] LPCSTR    szTableName
);

Paramètres

[in] hDatabase

Handle de la base de données obtenue à partir de MsiOpenDatabase.

[in] hDatabaseMerge

Handle de la base de données obtenue à partir de MsiOpenDatabase pour fusionner dans la base de données de base.

[in] szTableName

Nom de la table à recevoir conflit de fusion informations.

Valeur retournée

La fonction MsiDatabaseMerge retourne l’une des valeurs suivantes :

Code de retour Description
ERROR_FUNCTION_FAILED
Des conflits de fusion de lignes ont été signalés.
ERROR_INVALID_HANDLE
Un handle non valide ou inactif a été fourni.
ERROR_INVALID_TABLE
Une table non valide a été fournie.
ERROR_SUCCESS
La fonction a réussi.
ERROR_DATATYPE_MISMATCH
Différence de schéma entre les deux bases de données.

Remarques

La fonction MsiDatabaseMerge et la méthode Merge de l’objet Database ne peuvent pas être utilisées pour fusionner un module inclus dans le package d’installation. Elles ne doivent pas être utilisées pour fusionner des modules de fusion dans un package Windows Installer. Pour inclure un module de fusion dans un package d’installation, les auteurs de packages d’installation doivent suivre les instructions décrites dans la rubrique Application de modules de fusion.

MsiDatabaseMerge ne copie pas les fichiers d’armoireincorporés ou les transformations incorporées de la base de données de référence dans la base de données cible. Les flux de données incorporés répertoriés dans la table binaire ou la table d’icônes sont copiés de la base de données de référence vers la base de données cible. Le stockage incorporé dans la base de données de référence n’est pas copié dans la base de données cible.

La fonction MsiDatabaseMerge fusionne les données de deux bases de données. Ces bases de données doivent avoir la même page de codes. MsiDatabaseMerge échoue si des tables ou des lignes dans les bases de données sont en conflit. Il existe un conflit si les données d’une ligne de la première base de données diffèrent des données de la ligne correspondante de la deuxième base de données. Les lignes correspondantes se trouvent dans la même table des deux bases de données et ont la même clé primaire dans les deux bases de données. Les tables des bases de données non conflictuelles doivent avoir le même nombre de clés primaires, le même nombre de colonnes, les mêmes types de colonnes, les mêmes noms de colonnes et les mêmes données dans les lignes avec des clés primaires identiques. Toutefois, les colonnes temporaires n’ont pas d’importance dans le nombre de colonnes et les tables correspondantes peuvent avoir un nombre différent de colonnes temporaires sans créer de conflit tant que les colonnes persistantes correspondent.

Si le nombre, le type ou le nom des colonnes dans les tables correspondantes sont différents, le schéma des deux bases de données est incompatible et le programme d’installation arrête le traitement des tables et la fusion échoue. Le programme d’installation vérifie que les deux bases de données ont le même schéma avant de vérifier les conflits de fusion de lignes. Si ERROR_DATATYPE_MISMATCH est retourné, vous êtes assuré que les bases de données n’ont pas été modifiées.

Si les données de lignes particulières diffèrent, il s’agit d’une ligne conflit de fusion, le programme d’installation retourne ERROR_FUNCTION_FAILED et crée une table nommée szTableName. La première colonne de cette table est le nom de la table en conflit. La deuxième colonne indique le nombre de lignes de la table ayant le conflit. La table qui signale les conflits s’affiche comme suit.

Colonne Type Clé Nullable
Table de charge de travail Texte O N
NumRowMergeConflicts Integer   N
 

Cette fonction ne peut pas être appelée à partir d’actions personnalisées. Un appel à cette fonction à partir d’une action personnalisée entraîne l’échec de la fonction.

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

Notes

L’en-tête msiquery.h définit MsiDatabaseMerge en tant qu’alias qui sélectionne automatiquement la version ANSI ou Unicode de cette fonction en fonction de la définition de la constante de préprocesseur UNICODE. La combinaison de l’utilisation de l’alias neutre en encodage avec du code qui n’est pas neutre en encodage peut entraîner des incompatibilités qui entraînent des erreurs de compilation ou d’exécution. Pour plus d’informations, consultez Conventions pour les prototypes de fonction.

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

Format de définition des colonnes

Fonctions de gestion de base de données