【问题标题】:QSqlQuery not workingQSqlQuery 不工作
【发布时间】:2018-03-11 07:59:11
【问题描述】:

所以我基本上有这个问题,我无法执行我的 QsqlQuery。 我已连接到 SQLite 数据库,并且已检查它是否确实已连接。

QString databaseName = QFileDialog::getOpenFileName(this,tr("Open database"),
                                                        "",
                                                        tr("Databáze (*.db)"));
mydb = QSqlDatabase::addDatabase("QSQLITE");
mydb.setDatabaseName("databaseName");

if (!mydb.open()) {
    ui->statusBar->showMessage("Databáze nebyla připojena!",2000);
    databaseCheck = false;
}
else if (mydb.open()) {
    ui->statusBar->showMessage("Databáze byla úspěšně připojena.",2000);
    databaseCheck = true;
}

这是Mainwindow.cpp 中用于设置数据库连接的代码的一部分。数据库在mainwindow.h中声明,在这部分都在运行。

这里我得到了一个表单,它返回一些关于我想在数据库中创建的员工的数据。 databaseCheck 是一个布尔值,它告诉我数据库是否连接正确。在这种情况下,这些变量namesurname 等在mainwindow.h 中声明为QString

if (databaseCheck) {
    form = new Form(this);
    form->setWindowTitle("Formulář informací o zaměstnanci.");
    form->exec();

    name = form->getName();
    surname = form->getSurname();
    id = form->getId();
    date = form->getDate();
    telephone = form->getTelephone();
    salary = form->getSalary();
    state = form->getState();

    QSqlQuery query(mydb);
    query.prepare("INSERT INTO employees (jmeno,prijmeni,datumnarozeni,telefon,plat,stav) "
                      "VALUES (:name, :surname, :date, :telephone, :salary , :state)");
    query.bindValue(":name", name);
    query.bindValue(":forename", surname);
    query.bindValue(":date", date );
    query.bindValue(":telephone", telephone);
    query.bindValue(":salary", salary);
    query.bindValue(":state", state );
    query.exec();
}

在我用一些关于员工的数据填写表格并接受它之后,它不会向数据库发送任何内容。我正在使用 DB Browser for SQLite 检查数据库,而表 employees 完全为空。有人可以帮帮我吗?

【问题讨论】:

  • 对于捷克语也很抱歉,但我将其作为捷克用户的用户友好程序。反正捷克语不是解决这个问题的必要条件,所以可以忽略。
  • 检查QSqlQuery::lastError()返回的错误
  • 确定你有写权限?
  • query.bindValue(":surname", surname);.
  • 天哪,我现在可以看到了。如果是这样的话......我会生自己的气,这样讨厌的错误。

标签: c++ sql qt sqlite qsqlquery


【解决方案1】:

您的 SQL 似乎是正确的,最好的方法可能是写这样的东西。

if (!query.exec())
      qDebug() << query.lastError();

【讨论】:

  • 写权限是什么意思?是不是要在程序中设置?我是我电脑上的管理员,所以如果它不是 Windows 的东西,那么我不知道你的意思。 PS最后一个错误说:QSqlError("", "Parameter count mismatch", "")
猜你喜欢
  • 1970-01-01
  • 2019-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多