Validación interna

Al crear un paquete de instalación, puede usar la función MsiViewModify o el método View.Modify para asegurarse de que los datos especificados son sintácticamente correctos. Para obtener más información, vea Método Modify. En el nivel más bajo, la columna de una tabla de base de datos puede almacenar enteros (corto o largo), cadenas o datos binarios. Sin embargo, un paquete de instalación requiere enteros o cadenas específicos en determinadas tablas. Estas especificaciones se mantienen en la tabla _Validation. Por ejemplo, la columna FileName de la tabla Archivo es una columna de cadena, pero almacena específicamente un nombre de archivo. Por lo tanto, no solo debe ser una cadena, sino que también debe seguir los requisitos para asignar nombres a los archivos.

Los distintos valores de enumeración de validación usados con la función MsiViewModify permiten la validación inmediata en distintos niveles. La enumeración MSIMODIFY_VALIDATE_FIELD se puede usar para validar campos individuales de un registro. No valida las claves externas. La enumeración MSIMODIFY_VALIDATE valida una fila completa e incluye la validación de clave externa. Si va a insertar una nueva fila en una tabla, use la enumeración MSIMODIFY_VALIDATE_NEW para comprobar que va a agregar datos válidos y usar claves principales únicas. Se produce un error en una inserción si las claves principales no son únicas. Si una llamada a MsiViewModify con una de las enumeraciones de validación devuelve un error, puede realizar llamadas repetidas a MsiViewGetError para diagnosticar el problema. MsiViewGetError indica la columna donde se produjo el error, así como el valor de enumeración para ayudar a corregir el problema. Para más información, consulte Método GetErrror.

También puede usar la validación interna para asegurarse de que otros autores escriban datos correctamente en la tabla personalizada. Agregue cada una de las columnas de la tabla personalizada a la tabla _Validation mediante el nombre de tabla personalizado y el nombre de columna como clave principal. Proporcione una descripción o una finalidad de cada columna en la columna Descripción de la tabla _Validation. Escriba los requisitos aplicables para cada columna mediante las columnas Nullable, MinValue, MaxValue, KeyTable, KeyColumn, Category y Set:

  • Si la columna es Nullabl, escriba una "Y". Si no es así, escriba "N".
  • Si la columna es una columna entera y puede contener un intervalo de enteros, escriba ese intervalo mediante las columnas MinValue y MaxValue.
  • Las columnas de clave externa se identifican mediante las columnas KeyTable y KeyColumn.
  • Para las columnas de cadena, especifique una categoría como Nombre de archivo, GUID o Identificador. Para obtener más información, vea tipos de datos de columna.
  • Si los datos solo pueden pertenecer a un número específico de valores (cadena o entero), use la columna Establecer para enumerar los valores aceptables.

A continuación se muestra una lista de las columnas (además de Tabla, Columna y Descripción) en la tabla _Validation que se pueden rellenar si la columna es del tipo especificado. (Tenga en cuenta que no tiene que rellenar todas las columnas).

Tipo Columnas
Entero Nullable, MinValue, MaxValue, KeyTable, KeyColumn, Set
String Nullable, KeyTable, KeyColumn, Category, Set, MinValue, MaxValue
Binario Nullable, Categoría (la categoría debe ser "Binario")

 

Los entornos de creación pueden usar MSIMODIFY_VALIDATE_DELETE. En esta enumeración se supone que desea eliminar la fila. No se realiza ninguna validación de campo o clave externa. Esta enumeración realiza realmente una validación inversa de clave externa. Comprueba la tabla _Validation para ver las referencias de las columnas KeyTable y KeyColumn de la tabla a la que pertenece la fila "eliminada". Si hay columnas que enumeran la tabla que contiene la fila "eliminada" como una posible clave externa, recorre esa columna para ver si alguno de los valores hace referencia a los valores de la fila "eliminada". Un error devuelto significa que se interrumpe la integridad relacional de la base de datos eliminando la fila.