La Web del Programador: Comunidad de Programadores
 
    Pregunta:  28868 - COMO PUEDO TRATAR LOS ERRORES
Autor:  Manuel Eduardo Ruiz Baca
En mi motor de base de datos, en mi tabla clientes, mi columna DNI la he especificado como UNIQUE.

Cuando ejecuto la aplicación e ingreso un nuevo cliente y en el campo DNI le ingreso un numero DNI repetido me sale este mensaje

Data Windows Error
SQLSTATE = 23000
[Microsoft][ODBC SQL Server Driver][SQL Server]Infracción de la restricción UNIQUE KEY 'cons_02'. No se puede insertar una clave duplicada en el objeto 'CLIENTE'.

Mi pregunta es como podria capturar este error y evitar que en lugar que salga este mensaje me salga un MessageBox donde diga que he ingresado un DNI repetido.

Ojalá puedan ayudarme

  Respuesta:  isaac matal
necesitas codificar el evento DBError en tu datawindow control, aqui te dejo un ejemplo tomado de la ayuda de powerbuilder.

Este ejemplo se da cuando en una base de datos de sybase se intenta insertar un registro y uno de los campos recibe un valor nulo y el campo se declaro como not null en su creacion.

IF sqldbcode = -195 THEN
MessageBox("Missing Information", &
"You have not supplied values for all " &
+"the required fields.")

END IF

// Return code suppresses default message box

RETURN 1

  Respuesta:  Roberto Calderón
amigo:
Veo que estas usando sql server, cada manejador de BD tiene una codificación para sus errores,
entonces lo que debes hacer es averiguar estos, luego en el evento "dberror" del objeto control dw,
validas:
if dbcode = " " then // codigo de error
messagebox('Error','DNI repedito')
return
end if

de esta manera ya no saldra el mensaje que me indicas arriba.
Si deseas optimizar esto, prodrias crear un tabla donde almacenes todos los errores.

Suerte