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?



  • Buenas noches.
    Me surgen varias dudas de si funcionarian algunas cosas pero el fallo que me parece ver es que comparas "compruebaDNI" con "dni" y no veo que "dni" tenga ningún valor.
    Esprero que sea eso.
    Un saludo.


  • Moderators

    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



  • podrias crear un procedimiento almacenado, que en caso que ya existe puede enviar un mensaje, y con consulta.lasterro().tostring() pueden indicarle un mensaje al usuario que ya existe el id.


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.