QSqlError(“”,“参数计数不匹配”,“”)

时间:2015-10-09 01:53:25

标签: qsqlquery qsqldatabase

抱歉我的英文。我正在尝试从数据库表中选择一些数据,以便从另一个数据库插入表中。

这是我的代码:

void Partes::Guardar_Solicitud()
{
    hospital=QSqlDatabase::addDatabase("QSQLITE");
    hospital.setDatabaseName("C:/Sqlite3/Hospital.sqlite");

    if(hospital.open()){
        qDebug()<<"8.Se ha conectado a la base de datos Hospital";
    }else{
        qDebug()<<"8.ERROR. No se ha conectado a la base de datos Hospital";
    }

    QSqlQuery seleccionar;
    seleccionar.prepare("SELECT*FROM Partes WHERE N_Parte=:ID");
    seleccionar.bindValue(":ID",ui->lineEditN_Parte->text());

        if(seleccionar.exec())
        {
            qDebug()<<"9.Los datos del parte se han seleccionado correctamente";
        }else{
            qDebug()<<"9.ERROR. Los datos del parte no se han seleccionado correctamente";
            qDebug()<<"9.ERROR:"<<seleccionar.lastError();
        }

        seleccionar.next();

            QString _N_Solicitud = seleccionar.value(0).toByteArray().constData();
            QString _Fecha_Emision = seleccionar.value(1).toByteArray().constData();
            QString _Codigo_Equipo = seleccionar.value(2).toByteArray().constData();
            QString _Equipo = seleccionar.value(3).toByteArray().constData();
            QString _Marca = seleccionar.value(9).toByteArray().constData();
            QString _Modelo = seleccionar.value(10).toByteArray().constData();
            QString _N_Serie = seleccionar.value(11).toByteArray().constData();
            QString _Localizacion = seleccionar.value(6).toByteArray().constData();
            QString _Descripcion_Solicitud = seleccionar.value(19).toByteArray().constData();


        empresa=QSqlDatabase::addDatabase("QSQLITE");
        empresa.setDatabaseName("C:/Sqlite3/Empresa.sqlite");

        if(empresa.open()){
            qDebug()<<"10.Se ha conectado a la base de datos Empresa";
        }else{
            qDebug()<<"10.ERROR. No se ha conectado a la base de datos Empresa";
        }

        QSqlQuery seleccionar2;
        seleccionar2.prepare("SELECT*FROM Tecnicos WHERE Nombre_Usuario='a' and Contraseña='7'");

            if(seleccionar2.exec())
            {
                qDebug()<<"11.Los datos del usuario se han seleccionado correctamente";
            }else{
                qDebug()<<"11.ERROR. Los datos del usuario no se han seleccionado correctamente";
                qDebug()<<"11.ERROR:"<<seleccionar2.lastError();
            }

            seleccionar2.next();


                QString _Unidad_Hospitalaria = seleccionar2.value(5).toByteArray().constData();
                QString _Unidad_Tecnica = seleccionar2.value(6).toByteArray().constData();
                QString _Peticionario = seleccionar2.value(0).toByteArray().constData();
                QString _Telefono = seleccionar2.value(8).toByteArray().constData();
                QString _Tecnico_Asignado = seleccionar2.value(0).toByteArray().constData();
                QString _Estado_Solicitud = seleccionar2.value(7).toByteArray().constData();


        QSqlQuery guardar_s;
                guardar_s.prepare("INSERT INTO Solicitudes_Trabajo (N_Solicitud, Fecha_Emision, Unidad_Hospitalaria,"
                                  "Codigo_Equipo, Equipo, Marca)"
                                  "VALUES (:N_Solicitud, :Fecha_Emision, :Unidad_Hospitalaria, :Codigo_Equipo, :Equipo,"
                                   ":Marca)");
                guardar_s.bindValue(":N_Solicitud", _N_Solicitud);
                guardar_s.bindValue(":Fecha_Emision", _Fecha_Emision);
                guardar_s.bindValue(":Unidad_Hospitalaria", _Unidad_Hospitalaria);
                guardar_s.bindValue(":Codigo_Equipo", _Codigo_Equipo);
                guardar_s.bindValue(":Equipo", _Equipo);
                guardar_s.bindValue(":Marca", _Marca);

    if(guardar_s.exec( ))
    {
        ui->label_Guardar->setText("Solicitud guardada correctamente");
        qDebug()<<"12.Los datos del parte se han guardado en la Solicitud de Trabajo";
    }
    else
    {
        ui->label_Guardar->setText("La solicitud no se ha guardado correctamente");
        qDebug()<<"12.ERROR. Los datos del parte no se han guardado en la Solicitud de Trabajo";
        qDebug()<<"12.ERROR:"<<guardar_s.lastError();
    }
}

表“Partes”属于“Hospital”数据库。 表“Solicitudes_Trabajo”属于“Empresa”数据库。

此代码工作正常,并将值完美地插入表中。但是当我添加更多要插入的值时,会出现QSqlError。

这是INSERT INTO代码不起作用:

QSqlQuery guardar_s;
    guardar_s.prepare("INSERT INTO Solicitudes_Trabajo (N_Solicitud, Fecha_Emision, Unidad_Hospitalaria, Codigo_Equipo,"
                      "Equipo, Marca, Modelo, N_Serie, Localizacion, Unidad_Tecnica, Peticionario, Telefono, "
                      "Descripcion_Solicitud, Tecnico_Asignado, Tipo_Solicitud, Estado_Solicitud) "
                  "VALUES (:N_Solicitud, :Fecha_Emision, :Unidad_Hospitalaria, :Codigo_Equipo, :Equipo, :Marca, :Modelo,"
                      ":N_Serie, :Localizacion, :Unidad_Tecnica, :Peticionario, :Telefono, :Descripcion_Solicitud,"
                      ":Tecnico_Asignado, :Tipo_Solicitud, :Estado_Solicitud)");
    guardar_s.bindValue(":N_Solicitud", _N_Solicitud);
    guardar_s.bindValue(":Fecha_Emision", _Fecha_Emision);
    guardar_s.bindValue(":Unidad_Hospitalaria",_Unidad_Hospitalaria);
    guardar_s.bindValue(":Codigo_Equipo", _Codigo_Equipo);
    guardar_s.bindValue(":Equipo", _Equipo);
    guardar_s.bindValue(":Marca", _Marca);
    guardar_s.bindValue(":Modelo", _Modelo);
    guardar_s.bindValue(":N_Serie", _N_Serie);
    guardar_s.bindValue(":Localizacion", _Localizacion);
    guardar_s.bindValue(":Unidad_Tecnica", _Unidad_Tecnica);
    guardar_s.bindValue(":Peticionario", _Peticionario);
    guardar_s.bindValue(":Telefono", _Telefono);
    guardar_s.bindValue(":Descripcion_Solicitud", _Descripcion_Solicitud);
    guardar_s.bindValue(":Tecnico_Asignado", _Tecnico_Asignado);
    guardar_s.bindValue(":Tipo_Solicitud", "a");
    guardar_s.bindValue(":Estado_Solicitud", _Estado_Solicitud);

QDebug:

7.Los datos del usuario se han mostrado correctamente
QSqlDatabasePrivate::removeDatabase: connection 'qt_sql_default_connection' is still in use, all queries will cease to work.
QSqlDatabasePrivate::addDatabase: duplicate connection name 'qt_sql_default_connection', old connection removed.
8.Se ha conectado a la base de datos Hospital
9.Los datos del parte se han seleccionado correctamente
QSqlDatabasePrivate::removeDatabase: connection 'qt_sql_default_connection' is still in use, all queries will cease to work.
QSqlDatabasePrivate::addDatabase: duplicate connection name 'qt_sql_default_connection', old connection removed.
10.Se ha conectado a la base de datos Empresa
11.Los datos del usuario se han seleccionado correctamente
12.ERROR. Los datos del parte no se han guardado en la Solicitud de Trabajo
12.ERROR: QSqlError("", "Parameter count mismatch", "")

是否要为Qt Creator插入太多数据?为什么它能够插入6个值但是无法插入16个值?

感谢您的回复!

1 个答案:

答案 0 :(得分:1)

最后这是一个错字。我试图通过使用:

将值插入名为Localización的列中
guardar_s.prepare("INSERT INTO Solicitudes_Trabajo (Localizacion)

问题在于重音标记。