PDA

View Full Version : qsqlquery insert error



fantom
23rd February 2011, 14:54
Hello all,

I am new in using qt and i would like some help. Currently i am trying to insert data to an sqlite db and i I get error, any ideas into what I might be doing wrong? The strings come from a Form's LineEdit fields. Please see below the code:



void Register::Register1()
{
QSqlQuery query;
query.prepare("INSERT INTO User (pk, name, psw) "
"VALUES ( :name, :psw)");

query.bindValue( ":name", ui.RUserNameLineEdit->text() );
query.bindValue( ":psw",ui.RPassword->text() );


if( !query.exec() )

qDebug() << "> Query exec() error." << query.lastError().type();

else

qDebug() << ">Query exec() success.";


Thank you !:)

unit
23rd February 2011, 15:09
You should bind pk value

If pk is autoincrement key, use

INSERT INTO User (pk, name, psw) VALUES (NULL, :name, :psw)

fantom
23rd February 2011, 15:48
Hello unit,

Thank you for your response. Actually i removed totally the primary key but i still get the "Query exec () error. 2".

Do you have any idea? Shall i send you more info(code)?

Added after 22 minutes:

Hello unit,

Thank you for your response. Actually i removed totally the primary key but i still get the "Query exec () error. 2".

Do you have any idea? Shall i send you more info(code)?

unit
23rd February 2011, 16:12
2 is SQL statement syntax error (from enum QSqlError::ErrorType).

Try:



QSqlQuery query;
query.prepare("INSERT INTO User (pk, name, psw) "
"VALUES (NULL, :name, :psw)");
query.bindValue( ":name", ui.RUserNameLineEdit->text() );
query.bindValue( ":psw",ui.RPassword->text() );

and also you should use QSqlDatabase for QSqlQuery object




db = QSqlDatabase::addDatabase("QMYSQL", "_default_");
db.setHostName("127.0.0.1");
db.setDatabaseName("testpay");
db.setUserName("mypay");
db.setPassword("test123");
if(db.open())
{
QSqlQuery query(db);
}

fantom
23rd February 2011, 17:15
Thank you again for the response but still i am getting the error. Please find below the main.cpp and the register.cpp file.

main.cpp



#include "disp.h"
#include "login.h"
#include <QtGui/QApplication>
#include <QSqlDatabase>
#include <QSqlDriver>

void initDB()
{
}

int main(int argc, char *argv[])
{
QApplication a(argc, argv);

QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("d:/database/disp");
bool ok = db.open();

Login w;
w.show();
return a.exec();
}


and register.cpp



#include <QtGui/QWidget>
#include <QSqlQuery>
#include <QString>
#include <QDebug>
#include <QSqlError>
#include "register.h"

Register::Register(QWidget *parent)
: QDialog(parent)
{
ui.setupUi(this);
connect(ui.RegisterOK, SIGNAL( clicked() ), this, SLOT( Register1() ) ) ;
}

Register::~Register()
{

}


void Register::Register1()
{
QSqlQuery query;
query.prepare("INSERT INTO User (name, psw, cpsw, dID) "
"VALUES ( :name, :psw, :cpsw, :dID)");

query.bindValue( ":name", ui.RUserNameLineEdit->text() );
query.bindValue( ":psw",ui.RPassword->text() );
query.bindValue( ":cpsw",ui.ConfirmPassword->text() );
query.bindValue( ":dID",ui.RPatientLineEdit->text() );


if( !query.exec() )

qDebug() << "> Query exec() error." << query.lastError().type();

else

qDebug() << ">Query exec() success.";

}


I really appreciate your patience. I am new in Qt and i am having some troubles :)

Added after 15 minutes:

Thanks Unit i just found the error the query needs to be :



SqlQuery query;
query.prepare("INSERT INTO User VALUES ( :name, :psw, :cpsw, :dID)");