Función MsiViewGetErrorA (msiquery.h)

La función MsiViewGetError devuelve el error que se produjo en la función MsiViewModify .

Sintaxis

MSIDBERROR MsiViewGetErrorA(
  [in]      MSIHANDLE hView,
  [out]     LPSTR     szColumnNameBuffer,
  [in, out] LPDWORD   pcchBuf
);

Parámetros

[in] hView

Identificador de la vista.

[out] szColumnNameBuffer

Puntero al búfer que recibe el nombre de columna terminada en null. No intente determinar el tamaño del búfer pasando un valor NULL (value=0) para szColumnName. Puede obtener el tamaño del búfer pasando una cadena vacía (por ejemplo, ""). A continuación, la función devuelve MSIDBERROR_MOREDATA y pcchBuf contiene el tamaño de búfer necesario en TCHAR, no incluido el carácter nulo de terminación. Al devolver MSIDBERROR_NOERROR, pcchBuf contiene el número de TCHAR escritos en el búfer, no incluido el carácter nulo de terminación. Este parámetro es una cadena vacía si no hay errores.

[in, out] pcchBuf

Puntero a la variable que especifica el tamaño, en TCHAR, del búfer al que apunta la variable szColumnNameBuffer. Cuando la función devuelve MSIDBERROR_NOERROR, esta variable contiene el tamaño de los datos copiados en szColumnNameBuffer, no incluido el carácter nulo de terminación. Si szColumnNameBuffer no es lo suficientemente grande, la función devuelve MSIDBERROR_MOREDATA y almacena el tamaño necesario, no incluido el carácter nulo de terminación, en la variable a la que apunta pcchBuf.

Valor devuelto

Esta función devuelve uno de los valores siguientes.

Código de error Significado
MSIDBERROR_INVALIDARG
Un argumento no era válido.
MSIDBERROR_MOREDATA
El búfer era demasiado pequeño para recibir datos.
MSIDBERROR_FUNCTIONERROR
Error en la función.
MSIDBERROR_NOERROR
La función se completó correctamente sin errores.
MSIDBERROR_DUPLICATEKEY
El nuevo registro duplica las claves principales del registro existente en una tabla.
MSIDBERROR_REQUIRED
No se permiten valores NULL; o la columna está a punto de eliminarse, pero otra fila hace referencia a ella.
MSIDBERROR_BADLINK
No se encontró el registro correspondiente en una tabla externa.
MSIDBERROR_OVERFLOW
Los datos son mayores que el valor máximo permitido.
MSIDBERROR_UNDERFLOW
Los datos son menores que el valor mínimo permitido.
MSIDBERROR_NOTINSET
Los datos no son miembros de los valores permitidos en el conjunto.
MSIDBERROR_BADVERSION
Se proporcionó una cadena de versión no válida.
MSIDBERROR_BADCASE
El caso no era válido. El caso debe estar en mayúsculas o en minúsculas.
MSIDBERROR_BADGUID
Se proporcionó un GUID no válido.
MSIDBERROR_BADWILDCARD
Se proporcionó un nombre de archivo comodín no válido o el uso de caracteres comodín no era válido.
MSIDBERROR_BADIDENTIFIER
Se proporcionó un identificador no válido.
MSIDBERROR_BADLANGUAGE
Se proporcionaron identificadores de idioma no válidos.
MSIDBERROR_BADFILENAME
Se proporcionó un nombre de archivo no válido.
MSIDBERROR_BADPATH
Se proporcionó una ruta de acceso no válida.
MSIDBERROR_BADCONDITION
Se proporcionó una instrucción condicional no válida.
MSIDBERROR_BADFORMATTED
Se proporcionó una cadena de formato no válida.
MSIDBERROR_BADTEMPLATE
Se proporcionó una cadena de plantilla no válida.
MSIDBERROR_BADDEFAULTDIR
Se proporcionó una cadena no válida en la columna DefaultDir de la tabla Directory .
MSIDBERROR_BADREGPATH
Se proporcionó una cadena de ruta de acceso del Registro no válida.
MSIDBERROR_BADCUSTOMSOURCE
Se proporcionó una cadena no válida en la columna CustomSource de la tabla CustomAction .
MSIDBERROR_BADPROPERTY
Se proporcionó una cadena de propiedad no válida.
MSIDBERROR_MISSINGDATA
Falta una referencia a una columna en la tabla _Validation .
MSIDBERROR_BADCATEGORY
La columna de categoría de la tabla _Validation de la columna no es válida.
MSIDBERROR_BADCABINET
Se proporcionó un nombre de gabinete no válido.
MSIDBERROR_BADKEYTABLE
La tabla de la columna Keytable de la tabla _Validation no se encontró ni cargó.
MSIDBERROR_BADMAXMINVALUES
El valor de la columna MaxValue de la tabla _Validation es menor que el valor de la columna MinValue.
MSIDBERROR_BADSHORTCUT
Se proporcionó un nombre de destino de acceso directo no válido.
MSIDBERROR_STRINGOVERFLOW
La cadena es demasiado larga para la longitud especificada por la definición de columna.
MSIDBERROR_BADLOCALIZEATTRIB
Se proporcionó un atributo de localización no válido. (Las claves principales no se pueden localizar).
 
 

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

Comentarios

Solo debe llamar a la función MsiViewGetError cuando MsiViewModify devuelve ERROR_INVALID_DATA, lo que indica que los datos no son válidos. Los errores solo se registran para MSIMODIFY_VALIDATE, MSIMODIFY_VALIDATE_NEW y MSIMODIFY_VALIDATEFIELD.

Si se devuelve ERROR_MORE_DATA, el parámetro que es un puntero proporciona el tamaño del búfer necesario para contener la cadena. Tras la operación correcta, proporciona el número de caracteres escritos en el búfer de cadenas. Por lo tanto, puede obtener el tamaño necesario del búfer pasando un búfer pequeño (un carácter mínimo) y examinando el valor en pcchPathBuf cuando la función devuelve MSIDBERROR_MOREDATA. No intente determinar el tamaño del búfer pasando null como szColumnNameBuffer o un tamaño de búfer de 0 en el DWORD al que hace referencia pcchBuf.

Una vez que se devuelve MSIDBERROR_NOERROR, no quedan más errores de validación. El valor devuelto MSIDBERROR indica el tipo de error de validación que se produjo para el valor ubicado en la columna identificada por szColumnNameBuffer.

Nota:

El encabezado msiquery.h define MsiViewGetError 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

   
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

Pasar Null como argumento de las funciones de Windows Installer