Consulta a base de datos mediante un formulario.
-
¡Buenas tardes! Estoy intentando terminar mi proyecto fin de grado lo más pronto posible y me ha surgido una cosa.
He creado un registro de usuario, que controla que se introduzca el DNI de usuario y la contraseña obligatoriamente, lo demás son datos opcionales que todo tengo controlado con clausulas if. El caso es que quería controlar la posibilidad de que se intentara introducir un usuario que ya está en la base de datos, para tener un control de errores sobre este también. Aquí la solución que le he dado:
//Compruebo que se han introducido esos valores. if(name == 1 && surname == 1 && documento == 1 && contra == 1){ //Obtenemos todo los usuarios de la tabla administrador queryConsult.exec("SELECT dni_administrador from administrador"); //Mientras exista el siguiente administrador do{ compruebaDNI = queryConsult.value(0).toString(); if ( compruebaDNI == dni){ exist = 1; } }while(queryConsult.next()); //Si existe, exec nos devolverá true. if(exist){ QMessageBox::warning(this,"Error de usuario", tr("El usuario ya existe en la base de datos.\n")); }else{ queryInsert.prepare("INSERT INTO administrador(dni_administrador,password,nombre_admin,apellidos_admin)" "VALUES (:dni_administrador, :password, :nombre_admin, :apellidos_admin)"); queryInsert.bindValue(":dni_administrador", dni); queryInsert.bindValue(":password", pass); queryInsert.bindValue(":nombre_admin", nombre); queryInsert.bindValue(":apellidos_admin", apellidos); queryInsert.exec(); }
Para que quede más claro, hago una consulta en la que obtengo todos los DNIS, y luego la recorro comprobando que el DNI introducido sea el mismo que alguno de la base de datos. En el caso de que lo encuentre, a la variable exists le doy un 1. Más tarde, si la variable exists tiene un 1, intento lanzar un mensaje de error, y si no que haga el insert a la base de datos. El problema es que introduzco un usuario que ya existe y no me salta el error, alguno puede ver el problema?
-
Hola
¿Y por que no usas la cláusula where de la base de datos?
consulta.exec("select count(*) from administrador where dni_administrador = DNI_A_COMPROBAR"); if(consulta.first()) { // si hay resultado es que ya existe } else { // No existe, crearlo }
Si el motor de base de datos lo soporta, también puedes usar consulta.size(); para comprobar las filas que te devuelve la consulta, si es cero, no existe ese DNI.
Un saludo