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 |
---|---|
|
Se notificaron conflictos de combinación de filas. |
|
Se proporcionó un identificador no válido o inactivo. |
|
Se proporcionó una tabla no válida. |
|
La función se ha realizado correctamente. |
|
Diferencia de esquema entre las dos bases de datos. |
Comentarios
La función MsiDatabaseMerge y el método Merge del objeto Database no se pueden usar para combinar un módulo incluido en el paquete de instalación. No se deben usar 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 estos deben seguir las directrices que se describen en el artículo Aplicación de módulos de combinación.
MsiDatabaseMerge no copia los archivos de gabineteincrustados ni las transformaciones insertadas de la base de datos de referencia en la base de datos de destino. Los flujos de datos incrustados que aparecen en la tabla Binaria o tabla Icono 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 no conflictivas 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 en 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 son incompatibles 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 | Clave | Nullable |
---|---|---|---|
Tabla | Texto | Y | N |
NumRowMergeConflicts | Entero | No |
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 neutro de codificación con código que no es neutral de codificación puede provocar discrepancias que dan lugar a errores de compilación o en tiempo de ejecución. Para obtener más información, vea Convenciones para prototipos de función.
Requisitos
Requisito | Value |
---|---|
Cliente mínimo compatible | 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 |
Plataforma de destino | Windows |
Encabezado | msiquery.h |
Library | Msi.lib |
Archivo DLL | Msi.dll |