Compartir a través de


Función MsiDatabaseMergeA (msiquery.h)

La función MsiDatabaseMerge combina dos bases de datos, lo que permite filas duplicadas.

Sintaxis

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

Parámetros

[in] hDatabase

Identificador de la base de datos obtenida de MsiOpenDatabase.

[in] hDatabaseMerge

Identificador de la base de datos obtenida de MsiOpenDatabase para combinar en la base de datos base.

[in] szTableName

Nombre de la tabla que se va a recibir información de conflicto de combinación.

Valor devuelto

La función MsiDatabaseMerge devuelve uno de los siguientes valores:

Código devuelto Descripción
ERROR_FUNCTION_FAILED
Se han notificado conflictos de combinación de filas.
ERROR_INVALID_HANDLE
Se proporcionó un identificador no válido o inactivo.
ERROR_INVALID_TABLE
Se proporcionó una tabla no válida.
ERROR_SUCCESS
La función se realizó correctamente.
ERROR_DATATYPE_MISMATCH
Diferencia de esquema entre las dos bases de datos.

Observaciones

La función MsiDatabaseMerge y el método Merge del objeto database de no se puede usar para combinar un módulo incluido en el paquete de instalación. No deben usarse para combinar módulos de combinación en un paquete de Windows Installer. Para incluir un módulo de combinación en un paquete de instalación, los autores de paquetes de instalación deben seguir las instrucciones que se describen en el tema Aplicar módulos de mezcla.

MsiDatabaseMerge no copia a través de archivos incrustados ni transformaciones incrustadas de la base de datos de referencia en la base de datos de destino. Los flujos de datos incrustados que aparecen en tabla binaria o Icon Table se copian de la base de datos de referencia a la base de datos de destino. El almacenamiento incrustado en la base de datos de referencia no se copia en la base de datos de destino.

La función MsiDatabaseMerge combina los datos de dos bases de datos. Estas bases de datos deben tener la misma página de códigos. MsiDatabaseMerge produce un error si hay tablas o filas en conflicto en las bases de datos. Existe un conflicto si los datos de cualquier fila de la primera base de datos difieren de los datos de la fila correspondiente de la segunda base de datos. Las filas correspondientes se encuentran en la misma tabla de ambas bases de datos y tienen la misma clave principal en ambas bases de datos. Las tablas de bases de datos que no entran en conflicto deben tener el mismo número de claves principales, el mismo número de columnas, los mismos tipos de columna, los mismos nombres de columna y los mismos datos de las filas con claves principales idénticas. Sin embargo, las columnas temporales no importan en el recuento de columnas y las tablas correspondientes pueden tener un número diferente de columnas temporales sin crear conflictos siempre que coincidan las columnas persistentes.

Si el número, el tipo o el nombre de las columnas de las tablas correspondientes son diferentes, el esquema de las dos bases de datos no es compatible y el instalador detiene el procesamiento de tablas y se produce un error en la combinación. El instalador comprueba que las dos bases de datos tienen el mismo esquema antes de comprobar si hay conflictos de combinación de filas. Si se devuelve ERROR_DATATYPE_MISMATCH, se garantiza que no se han cambiado las bases de datos.

Si los datos de filas concretas difieren, se trata de un conflicto de combinación de filas, el instalador devuelve ERROR_FUNCTION_FAILED y crea una nueva tabla denominada szTableName. La primera columna de esta tabla es el nombre de la tabla que tiene el conflicto. La segunda columna proporciona el número de filas de la tabla que tiene el conflicto. La tabla que notifica conflictos aparece de la siguiente manera.

Columna Tipo Llave Nullable
Mesa text Y N
NumRowMergeConflicts entero   N
 

No se puede llamar a esta función desde acciones personalizadas. Una llamada a esta función desde una acción personalizada hace que se produzca un error en la función.

Si se produce un error en la función, puede obtener información de error extendida mediante MsiGetLastErrorRecord.

Nota

El encabezado msiquery.h define MsiDatabaseMerge como alias que selecciona automáticamente la versión ANSI o Unicode de esta función en función de la definición de la constante de preprocesador UNICODE. La combinación del uso del alias neutral de codificación con código que no es neutral de codificación puede dar lugar a errores de coincidencia que dan lugar a errores de compilación o tiempo de ejecución. Para obtener más información, vea Conventions for Function Prototypes.

Requisitos

Requisito Valor
cliente mínimo admitido Windows Installer 5.0 en Windows Server 2012, Windows 8, Windows Server 2008 R2 o Windows 7. Windows Installer 4.0 o Windows Installer 4.5 en Windows Server 2008 o Windows Vista. Windows Installer en Windows Server 2003 o Windows XP
de la plataforma de destino de Windows
encabezado de msiquery.h
biblioteca de Msi.lib
DLL de Msi.dll

Consulte también

formato de definición de columna de

funciones de administración de bases de datos de