PDA

Ver la Versión Completa : consulta para dni repetido


vetustas
18-11-2003, 17:31:02
Necesito una consulta SQL que me sirva para saber si un dni que he introducido está ya en la base de datos, tengo la siguiente tabla
alumno(cod_alumno,dni_alumno,...)
lo que yo tenia era:
SELECT dni_alumno
FROM alumno
WHERE dni_alumno=:dni

el dni se lo paso en un procedimiento, y luego lo que hacia era ver si me devolvia algun resultado. El problema es que si estoy tratando con un alumno y modifico sus datos luego me dice que esta repetido al haber encontrado un resultado (el propio alumno que trato). Estaria bien añadir a la consulta una condición como por ejemplo devolver resultado solo si el código del alumno no coincide (entonces si se tratarán de alumnos distintos).

Bueno, espero una ayudita:D

roman
18-11-2003, 17:38:37
No estoy seguro de entender pero me imagino que deseas evitar que se repitan registros con el mismo dni y al momento de guardar los cambios (sea de un nuevo registro o de uno ya existente) quieres asegurarte de que no esté ya en la base.

Pero imagino que puedes determinar, según el estado del dataset, si estas en modo de inserción o de edición de manera que al guardar los cambios tendrías que revisra el dni sólo en caso de que estes insertando un nuevo registro y omitir la verificación en caso contrario.

Por otra parte también podrías crear un índice único sobre el dni para que sea la misma base de datos la que detecte si se está insertando un registro con el mismo dni.

// Saludos

vetustas
18-11-2003, 17:42:34
Gracias por responder tan rapido y si, me referia a eso concretamente. :)
Me puedes decir como se hace las dos cosas que me comentas? lo de verificar el estado del dataset y lo de poner dni como indice?

Graciassss

roman
18-11-2003, 17:49:17
vetustas comentó:
Me puedes decir como se hace las dos cosas que me comentas? lo de verificar el estado del dataset y lo de poner dni como indice?


Todo DataSet tiene la propiedad State que determina el estado del DataSet (busca en la ayuda para ver todos los posibles valores). Cuando insertas un registro State es igual a dsInsert mientras que al editarlo State es dsEdit.

En cuanto al índice depende de qué base de datos uses. Si mal no recuerdo usas IB y no conozco IB pero supongo que con los mismo con lo que creas tus bases puedes crear los índices.

// Saludos

vetustas
18-11-2003, 17:55:32
A ver si he entendido bien, tu me propones que solo verifique el dni si estoy en modo inserción y no en edición...pero que pasa si cuando están en modo edición (porque yo tengo que dejarles modificar datos) me cambian el dni y me ponen uno que ya está. Entonces haciendolo asi no me valdria no?

En cuanto al índice depende de qué base de datos uses. Si mal no recuerdo usas IB

Pos no, uso Paradox. Y creia tener definido el campo dni como índice secundario. Pero no se si será eso a lo que te refieres

Muchas graciassss