Partager via


MsiDatabaseMergeA, fonction (msiquery.h)

La fonction MsiDatabaseMerge fusionne deux bases de données, ce qui permet des 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 à fusionner dans la base de données de base.

[in] szTableName

Nom de la table à recevoir des informations de conflit de fusion.

Valeur de retour

La fonction msiDatabaseMerge retourne l’une des valeurs suivantes :

Retourner le code Description
ERROR_FUNCTION_FAILED
Les 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 base de données ne peuvent pas être utilisées pour fusionner un module inclus dans le package d’installation. Ils ne doivent pas être utilisés pour fusionner 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 rubrique.

msiDatabaseMerge ne copie pas sur fichiers d’cabinet incorporés ou 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 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. Un conflit existe 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 de 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’un conflit de fusion de lignes, 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 ayant le conflit. La deuxième colonne donne le nombre de lignes de la table ayant le conflit. Le tableau qui signale des conflits s’affiche comme suit.

Colonne Type Clé Nullable
Table texte Y N
NumRowMergeConflicts entier   N
 

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

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

Note

L’en-tête msiquery.h définit MsiDatabaseMerge comme 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. Le mélange 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.

Exigences

Exigence Valeur
client minimum 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
d’en-tête msiquery.h
bibliothèque Msi.lib
DLL Msi.dll

Voir aussi

format de définition de colonne

fonctions de gestion des bases de données