No data supplied for parameters in prepared statement"
-
Hello
im new to qt and C++
im trying to insert data from UI to database, im following db connection and sql executing from documentation
error no data supplied keep show up if using placeholderif i do it direcly (no input from ui) like this
if (!sql.exec("INSERT INTO karyawan (nik,nama,alamat,telp,golongan,status,anak,masa,gaji)" "VALUE('1001542','anwar','BJM','085149','I','menikah','1','2','3200000')")){ qDebug()<<sql.lastError().text(); }else{ qDebug()<<"Data Berhasil Disimpan"; }
its success or using single quotes between placeholder
but the problem using single quotes is the data inserted is the name of placeholder not the datasql.prepare("INSERT INTO karyawan (nik,nama,alamat,telp,golongan,status,anak,masa,gaji)" "VALUE(':nik',':nama',':alamat',':telp',':golongan',':status',':anak',':masa',':gaji')"); data inserted
QSqlDatabase koneksi = QSqlDatabase::addDatabase("QODBC"); koneksi.setDatabaseName("dsn_penggajian"); koneksi.setUserName("root"); koneksi.setPassword(""); if(!koneksi.open()){ qDebug()<<koneksi.lastError().text(); }else{ qDebug()<<"Database Terkoneksi"; } QSqlQuery sql(koneksi); sql.prepare("INSERT INTO karyawan (nik, nama, alamat, telp, golongan, status, anak, masa, gaji) " "VALUES (:nik, :nama, :alamat, :telp, :golongan, :status, :anak, :masa, :gaji)"); sql.bindValue(":nik", ui->nIKLineEdit->text()); sql.bindValue(":nama", ui->namaLineEdit->text()); sql.bindValue(":alamat", ui->alamatLineEdit->text()); sql.bindValue(":telp", ui->telpLineEdit->text()); sql.bindValue(":golongan", ui->golonganComboBox->currentText()); sql.bindValue(":status", ui->statusNikahComboBox->currentText()); sql.bindValue(":anak", ui->jumlahAnakLineEdit->text().toInt()); sql.bindValue(":masa", ui->masaKerjaLineEdit->text().toInt()); sql.bindValue(":gaji", uji.getGajiTotal()); sql.exec(); if (sql.exec()){ qDebug()<<"Data Berhasil Disimpan" }else{ qDebug()<<sql.lastError().text(); qDebug()<<sql.executedQuery(); qDebug() << "nik:" << ui->nIKLineEdit->text(); qDebug() << "nama:" << ui->namaLineEdit->text() qDebug() << "alamat:" << ui->alamatLineEdit->text(); qDebug() << "telp:" << ui->telpLineEdit->text(); qDebug() << "golongan:" << ui->golonganComboBox->currentText(); qDebug() << "status:" << ui->statusNikahComboBox->currentText(); qDebug() << "anak:" << ui->jumlahAnakLineEdit->text().toInt() qDebug() << "masa:" << ui->masaKerjaLineEdit->text().toInt(); qDebug() << "gaji:" << uji.getGajiTotal(); } DEBUG HERE Database Terkoneksi "QODBCResult::exec: Unable to execute statement:" Error: "[MySQL][ODBC 8.4(w) Driver][mysqld-5.5.5-10.4.32-MariaDB]No data supplied for parameters in prepared statement" "QODBCResult::exec: Unable to execute statement:" Error: "[MySQL][ODBC 8.4(w) Driver][mysqld-5.5.5-10.4.32-MariaDB]No data supplied for parameters in prepared statement" "[MySQL][ODBC 8.4(w) Driver][mysqld-5.5.5-10.4.32-MariaDB]No data supplied for parameters in prepared statement, S1000 QODBC: Unable to execute statement" "INSERT INTO karyawan (nik, nama, alamat, telp, golongan, status, anak, masa, gaji) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)" QSqlDatabase(driver="QODBC", database="dsn_penggajian", host="", port=-1, user="root", open=true) nik: "9348" nama: "iuweweui" alamat: "eiweu" telp: "929390" golongan: "I" status: "Menikah" anak: 1212 masa: 1212 gaji: 5000000
-
@arcahyadi said in No data supplied for parameters in prepared statement":
sql.exec(); if (sql.exec()){
You call exec twice...
@Christian-Ehrlicher fixed, im used old mysql, update mysql and the problem clear
-
Don't use any quotes at all for prepared values as shown in the documentation.
-
Don't use any quotes at all for prepared values as shown in the documentation.
-
prepare() has a return value - check it, same goes for sql.exec();
-
prepare() has a return value - check it, same goes for sql.exec();
its give return true
-
prepare() has a return value - check it, same goes for sql.exec();
@Christian-Ehrlicher sorry typo, prepare return true and exec return false
-
Please provide a minimal compileable example including the creation of the table. Should be doable with less than 20 lines of code. What exact Qt version do you use?
-
Hello
im new to qt and C++
im trying to insert data from UI to database, im following db connection and sql executing from documentation
error no data supplied keep show up if using placeholderif i do it direcly (no input from ui) like this
if (!sql.exec("INSERT INTO karyawan (nik,nama,alamat,telp,golongan,status,anak,masa,gaji)" "VALUE('1001542','anwar','BJM','085149','I','menikah','1','2','3200000')")){ qDebug()<<sql.lastError().text(); }else{ qDebug()<<"Data Berhasil Disimpan"; }
its success or using single quotes between placeholder
but the problem using single quotes is the data inserted is the name of placeholder not the datasql.prepare("INSERT INTO karyawan (nik,nama,alamat,telp,golongan,status,anak,masa,gaji)" "VALUE(':nik',':nama',':alamat',':telp',':golongan',':status',':anak',':masa',':gaji')"); data inserted
QSqlDatabase koneksi = QSqlDatabase::addDatabase("QODBC"); koneksi.setDatabaseName("dsn_penggajian"); koneksi.setUserName("root"); koneksi.setPassword(""); if(!koneksi.open()){ qDebug()<<koneksi.lastError().text(); }else{ qDebug()<<"Database Terkoneksi"; } QSqlQuery sql(koneksi); sql.prepare("INSERT INTO karyawan (nik, nama, alamat, telp, golongan, status, anak, masa, gaji) " "VALUES (:nik, :nama, :alamat, :telp, :golongan, :status, :anak, :masa, :gaji)"); sql.bindValue(":nik", ui->nIKLineEdit->text()); sql.bindValue(":nama", ui->namaLineEdit->text()); sql.bindValue(":alamat", ui->alamatLineEdit->text()); sql.bindValue(":telp", ui->telpLineEdit->text()); sql.bindValue(":golongan", ui->golonganComboBox->currentText()); sql.bindValue(":status", ui->statusNikahComboBox->currentText()); sql.bindValue(":anak", ui->jumlahAnakLineEdit->text().toInt()); sql.bindValue(":masa", ui->masaKerjaLineEdit->text().toInt()); sql.bindValue(":gaji", uji.getGajiTotal()); sql.exec(); if (sql.exec()){ qDebug()<<"Data Berhasil Disimpan" }else{ qDebug()<<sql.lastError().text(); qDebug()<<sql.executedQuery(); qDebug() << "nik:" << ui->nIKLineEdit->text(); qDebug() << "nama:" << ui->namaLineEdit->text() qDebug() << "alamat:" << ui->alamatLineEdit->text(); qDebug() << "telp:" << ui->telpLineEdit->text(); qDebug() << "golongan:" << ui->golonganComboBox->currentText(); qDebug() << "status:" << ui->statusNikahComboBox->currentText(); qDebug() << "anak:" << ui->jumlahAnakLineEdit->text().toInt() qDebug() << "masa:" << ui->masaKerjaLineEdit->text().toInt(); qDebug() << "gaji:" << uji.getGajiTotal(); } DEBUG HERE Database Terkoneksi "QODBCResult::exec: Unable to execute statement:" Error: "[MySQL][ODBC 8.4(w) Driver][mysqld-5.5.5-10.4.32-MariaDB]No data supplied for parameters in prepared statement" "QODBCResult::exec: Unable to execute statement:" Error: "[MySQL][ODBC 8.4(w) Driver][mysqld-5.5.5-10.4.32-MariaDB]No data supplied for parameters in prepared statement" "[MySQL][ODBC 8.4(w) Driver][mysqld-5.5.5-10.4.32-MariaDB]No data supplied for parameters in prepared statement, S1000 QODBC: Unable to execute statement" "INSERT INTO karyawan (nik, nama, alamat, telp, golongan, status, anak, masa, gaji) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)" QSqlDatabase(driver="QODBC", database="dsn_penggajian", host="", port=-1, user="root", open=true) nik: "9348" nama: "iuweweui" alamat: "eiweu" telp: "929390" golongan: "I" status: "Menikah" anak: 1212 masa: 1212 gaji: 5000000
@arcahyadi said in No data supplied for parameters in prepared statement":
sql.exec(); if (sql.exec()){
You call exec twice...
-
@arcahyadi said in No data supplied for parameters in prepared statement":
sql.exec(); if (sql.exec()){
You call exec twice...
@Christian-Ehrlicher fixed, im used old mysql, update mysql and the problem clear
-