Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么QSqlError参数计数不匹配?_C++_Qt - Fatal编程技术网

C++ 为什么QSqlError参数计数不匹配?

C++ 为什么QSqlError参数计数不匹配?,c++,qt,C++,Qt,我正在制作一个连接到SQLite DB的小应用程序。我已经创建了一个QSqlDatabase,它已连接。但是当我运行QSqlQuery时,我得到了参数计数不匹配。按下按钮时执行查询。该函数称为“insertPressed” mainwindow.cpp: 这是设置功能。DB在此函数中初始化 MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { ui-

我正在制作一个连接到SQLite DB的小应用程序。我已经创建了一个
QSqlDatabase
,它已连接。但是当我运行
QSqlQuery
时,我得到了参数计数不匹配。按下按钮时执行查询。该函数称为“insertPressed”

mainwindow.cpp: 这是设置功能。DB在此函数中初始化

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    db = QSqlDatabase::addDatabase("QSQLITE");
    db.setHostName("localhost");
    db.setPort(3306);
    db.setUserName("username");
    db.setPassword("password");
    db.setDatabaseName("qt");
    db.open();

    if(db.open()){
        ui->Success->setText("Connected to Database");
    } else {
        ui->Success->setText("Connection Failed");
        qDebug() << db.lastError();
    }
    QPushButton *select = MainWindow::findChild<QPushButton *>("SelectFile");
    connect(select, SIGNAL(released()), this, SLOT(selectPressed()));

    QPushButton *insert = MainWindow::findChild<QPushButton *>("Insert");
    connect(insert, SIGNAL(released()), this, SLOT(insertPressed()));

    QPushButton *deleteRecord = MainWindow::findChild<QPushButton *>("Delete");
    connect(deleteRecord, SIGNAL(released()), this, SLOT(deletePressed()));
}

所以我解决了这个问题。在进行INSERT查询之前,我没有进行CREATETABLE查询,这就是问题的原因。在插入查询之前,我添加了以下几行


        if (!query.exec("CREATE TABLE IF NOT EXISTS orders(time TIME(0) NOT NULL, source VARCHAR(20) NOT NULL, acct VARCHAR(20) NOT NULL, trader VARCHAR(20) NOT NULL, \
                    dest VARCHAR(20) NOT NULL, exe INT NOT NULL, qty INT NOT NULL, price DOUBLE(5, 2) NOT NULL, status VARCHAR(20) NOT NULL, side VARCHAR(20) NOT NULL,\
                    sym VARCHAR(50) NOT NULL, tif VARCHAR(20) NOT NULL, routing VARCHAR(50) NOT NULL, senderpid VARCHAR(20) NOT NULL, date DATE)")){
            qDebug() << query.lastError();
    }

如果(!query.exec(“如果不存在则创建表”)订单(时间(0)不为空,源VARCHAR(20)不为空,acct VARCHAR(20)不为空,交易员VARCHAR(20)不为空\
dest VARCHAR(20)不为空,exe INT不为空,qty INT不为空,price DOUBLE(5,2)不为空,status VARCHAR(20)不为空,side VARCHAR(20)不为空\
sym VARCHAR(50)不为空,tif VARCHAR(20)不为空,路由VARCHAR(50)不为空,senderpid VARCHAR(20)不为空,日期“”){

qDebug()表“order”中的字段是什么类型的?它们都是字符串/文本类型吗?因为使用query.bindValue(“:date”,stringlist[14]);将尝试将:date绑定为字符串值,而不是日期。它们都是字符串,因为它们是直接从文本文件复制的。我不擅长SQL,所以我不知道是否可以将日期存储为字符串。
QSqlError("", "Parameter count mismatch", "")
QSqlError("", "Parameter count mismatch", "")
QSqlError("", "Parameter count mismatch", "")
QSqlError("", "Parameter count mismatch", "")
QSqlError("", "Parameter count mismatch", "")
QSqlError("", "Parameter count mismatch", "")

        if (!query.exec("CREATE TABLE IF NOT EXISTS orders(time TIME(0) NOT NULL, source VARCHAR(20) NOT NULL, acct VARCHAR(20) NOT NULL, trader VARCHAR(20) NOT NULL, \
                    dest VARCHAR(20) NOT NULL, exe INT NOT NULL, qty INT NOT NULL, price DOUBLE(5, 2) NOT NULL, status VARCHAR(20) NOT NULL, side VARCHAR(20) NOT NULL,\
                    sym VARCHAR(50) NOT NULL, tif VARCHAR(20) NOT NULL, routing VARCHAR(50) NOT NULL, senderpid VARCHAR(20) NOT NULL, date DATE)")){
            qDebug() << query.lastError();
    }