Función MsiViewModify (msiquery.h)

La función MsiViewModify actualiza un registro capturado.

Sintaxis

UINT MsiViewModify(
  [in] MSIHANDLE hView,
  [in] MSIMODIFY eModifyMode,
  [in] MSIHANDLE hRecord
);

Parámetros

[in] hView

Identificador de una vista.

[in] eModifyMode

Especifica el modo de modificación. Este parámetro puede ser uno de los valores siguientes.

Valor Significado
MSIMODIFY_SEEK
-1
Actualiza la información del registro proporcionado sin cambiar la posición en el conjunto de resultados y sin afectar a las operaciones de recuperación posteriores. A continuación, se puede usar el registro para la actualización, eliminación y actualización posteriores. Todas las columnas de clave principal de la tabla deben estar en la consulta y el registro debe tener al menos tantos campos como la consulta. No se puede usar Seek con consultas de varias tablas. Este modo no se puede usar con una vista que contenga combinaciones. Vea también los comentarios.
MSIMODIFY_REFRESH
0
Actualiza la información del registro. Primero debe llamar a MsiViewFetch con el mismo registro. En el caso de una fila eliminada, se produce un error. Funciona tanto con registros de lectura y escritura como de solo lectura.
MSIMODIFY_INSERT
1
Inserta un registro. Se produce un error si existe una fila con las mismas claves principales. Se produce un error con una base de datos de solo lectura. Este modo no se puede usar con una vista que contenga combinaciones.
MSIMODIFY_UPDATE
2
Actualiza un registro existente. Solo claves no primarias. Primero debe llamar a MsiViewFetch. Se produce un error en el caso de un registro eliminado. Solo funciona con registros de lectura y escritura.
MSIMODIFY_ASSIGN
3
Escribe los datos actuales en el cursor en una fila de tabla. Actualiza el registro si las claves principales coinciden con una fila existente e inserta uno si no coinciden. Se produce un error con una base de datos de solo lectura. Este modo no se puede usar con una vista que contenga combinaciones.
MSIMODIFY_REPLACE
4
Actualiza o elimina e inserta un registro en una tabla. Primero debe llamar a MsiViewFetch con el mismo registro. Actualiza el registro si las claves principales no cambian. Elimina la fila antigua e inserta una nueva si han cambiado las claves principales. Se produce un error con una base de datos de solo lectura. Este modo no se puede usar con una vista que contenga combinaciones.
MSIMODIFY_MERGE
5
Inserta o valida un registro en una tabla. Inserta si las claves principales no coinciden con ninguna fila y valida si hay una coincidencia. Se produce un error si el registro no coincide con los datos de la tabla. Se produce un error si hay un registro con una clave duplicada que no es idéntica. Solo funciona con registros de lectura y escritura. Este modo no se puede usar con una vista que contenga combinaciones.
MSIMODIFY_DELETE
6
Quite una fila de la tabla. Primero debe llamar a la función MsiViewFetch con el mismo registro. Se produce un error si se ha eliminado la fila. Solo funciona con registros de lectura y escritura. Este modo no se puede usar con una vista que contenga combinaciones.
MSIMODIFY_INSERT_TEMPORARY
7
Inserta un registro temporal. La información no es persistente. Se produce un error si existe una fila con la misma clave principal. Solo funciona con registros de lectura y escritura. Este modo no se puede usar con una vista que contenga combinaciones.
MSIMODIFY_VALIDATE
8
Valida un registro. No valida entre combinaciones. Primero debe llamar a la función MsiViewFetch con el mismo registro. Obtenga errores de validación con MsiViewGetError. Funciona tanto con registros de lectura y escritura como de solo lectura. Este modo no se puede usar con una vista que contenga combinaciones.
MSIMODIFY_VALIDATE_NEW
9
Valide un nuevo registro. No valida entre combinaciones. Comprueba si hay claves duplicadas. Obtenga errores de validación mediante una llamada a MsiViewGetError. Funciona tanto con registros de lectura y escritura como de solo lectura. Este modo no se puede usar con una vista que contenga combinaciones.
MSIMODIFY_VALIDATE_FIELD
10
Valida los campos de un registro recuperado o nuevo. Puede validar uno o varios campos de un registro incompleto. Obtenga errores de validación mediante una llamada a MsiViewGetError. Funciona tanto con registros de lectura y escritura como de solo lectura. Este modo no se puede usar con una vista que contenga combinaciones.
MSIMODIFY_VALIDATE_DELETE
11
Valida un registro que se eliminará más adelante. Primero debe llamar a MsiViewFetch. Se produce un error si otra fila hace referencia a las claves principales de esta fila. La validación no comprueba la existencia de las claves principales de esta fila en propiedades o cadenas. No comprueba si una columna es una clave externa para varias tablas. Obtenga errores de validación mediante una llamada a MsiViewGetError. Funciona tanto con registros de lectura y escritura como de solo lectura. Este modo no se puede usar con una vista que contenga combinaciones.

[in] hRecord

Identificador del registro que se va a modificar.

Valor devuelto

La función MsiViewModify devuelve los valores siguientes:

Tenga en cuenta que, en situaciones de memoria baja, esta función puede generar una excepción de STATUS_NO_MEMORY.

Comentarios

Los valores MSIMODIFY_VALIDATE, MSIMODIFY_VALIDATE_NEW, MSIMODIFY_VALIDATE_FIELD y MSIMODIFY_VALIDATE_DELETE de la función MsiViewModify no realizan actualizaciones reales; garantizan que los datos del registro sean válidos. El uso de estas enumeraciones de validación requiere que la base de datos contenga la tabla _Validation.

Puede llamar a MSIMODIFY_UPDATE o MSIMODIFY_DELETE con un registro inmediatamente después de usar MSIMODIFY_INSERT, MSIMODIFY_INSERT_TEMPORARY o MSIMODIFY_SEEK siempre que NO haya modificado el 0º campo del registro insertado o buscado.

Para ejecutar cualquier instrucción SQL, se debe crear una vista. Sin embargo, una vista que no crea un conjunto de resultados, como CREATE TABLE o INSERT INTO, no se puede usar con MsiViewModify para actualizar las tablas a través de la vista.

No se puede capturar un registro que contenga datos binarios de una base de datos y, a continuación, usar ese registro para insertar los datos en otra base de datos. Para mover datos binarios de una base de datos a otra, debe exportar los datos a un archivo y, a continuación, importarlos en la nueva base de datos mediante una consulta y MsiRecordSetStream. Esto garantiza que cada base de datos tenga su propia copia de los datos binarios.

Tenga en cuenta que las acciones personalizadas solo pueden agregar, modificar o quitar filas, columnas o tablas temporales de una base de datos. Las acciones personalizadas no pueden modificar los datos persistentes de una base de datos, como los datos que forman parte de la base de datos almacenada en el disco. Para obtener más información, consulte Acceso a la sesión del instalador actual desde dentro de una acción personalizada.

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

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

Funciones generales de acceso a base de datos