MsiDatabaseMergeW, fonction (msiquery.h)
La fonction MsiDatabaseMerge fusionne deux bases de données, ce qui autorise les lignes en double.
Syntaxe
UINT MsiDatabaseMergeW(
[in] MSIHANDLE hDatabase,
[in] MSIHANDLE hDatabaseMerge,
[in] LPCWSTR 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 |
---|---|
|
Des conflits de fusion de lignes ont été signalés. |
|
Un handle non valide ou inactif a été fourni. |
|
Une table non valide a été fournie. |
|
La fonction a réussi. |
|
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 sur 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 code. 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 sans conflit 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 des 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 rechercher 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 des 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 ayant le 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 comme un 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.
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 |