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 notificaron 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 ha realizado correctamente.
ERROR_DATATYPE_MISMATCH
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

Consulte también

Formato de definición de columnas

Funciones de administración de base de datos