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
Código devuelto | Descripción |
---|---|
|
Se han notificado 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 realizó correctamente. |
|
Diferencia de esquema entre las dos bases de datos. |
Observaciones
La función
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