الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

[Qt]الإستعلام يرد 1- رغم أنه صحيح

بدأه SIFE في 16 مايو 2011 · 2 رد · 1,125 مشاهدة · في قسم Cross Platform GUI Libraries العام
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم و رحمة الله

لدي هذه ال SLOT:

void ConfSetup::setNextPage()
{
    int currentIndex = ui->stackedWidget->currentIndex();

    switch(currentIndex)
 	{
   	case 1:
        {
         	ui->stackedWidget->setCurrentIndex(currentIndex + 1);
        }
   	break;

   	case 2:
        {
       	db = QSqlDatabase::addDatabase("QMYSQL");
       	db.setDatabaseName("mysql");
       	db.setHostName(ui->serverEdit->text());
       	db.setPort(ui->portEdit->text().toInt());
       	db.setUserName(ui->userEdit->text());
       	db.setPassword(ui->passwordEdit->text());

       	if(!db.open())
       	{
         	QMessageBox::critical(0, trUtf8("خطأ في الدخول"), trUtf8("إسم المستخدم أو كلمة السر خاطئة"));
       	}
       	else
       	{
         	ui->stackedWidget->setCurrentIndex(currentIndex + 1);
       	}
        }
   	break;

   	case 3:
        {
       	QSqlQuery query;
       	query.prepare("SELECT user FROM user WHERE user=:user");
       	query.bindValue(":user", ui->userDbEdit->text());
       	query.exec();

       	if(query.numRowsAffected() > 0)
         	QMessageBox::critical(0, trUtf8("خطأ في تسجيل إسم مستخدم"), trUtf8("إسم المستخدم موجود من قبل"));
       	else
       	{
         	//  qDebug("%s" , query.executedQuery().toStdString().c_str());
         	qDebug() << db.databaseName();//.isOpen();
         	qDebug() << query.lastError();
         	qDebug("%s" , query.lastQuery().toStdString().c_str());
         	ui->stackedWidget->setCurrentIndex(currentIndex + 1);
       	}
        }
   	break;

   	case 4:
        {
       	QSqlQuery query;
       	query.prepare("SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME=:database");
       	query.bindValue(":database", ui->dbNameEdit->text());
       	query.exec();

       	if(query.numRowsAffected() == 1)
         	QMessageBox::critical(0, trUtf8("خطأ في إنشاء قاعدة بيانات"), trUtf8("توجد قاعدة بيانات بنفس هذا الإسم"));
       	else
         	ui->stackedWidget->setCurrentIndex(currentIndex + 1);
        }
   	break;

   	case 5:
        {
       	QSqlQuery query;
       	query.prepare("INSERT INTO Users(User, Password)" \
                               	"VALUES(:user, :password)");
       	query.bindValue(":user", ui->userEdit->text());
       	query.bindValue(":password", ui->passwordEdit->text());
       	query.exec();

       	if(query.numRowsAffected() != 1)
         	QMessageBox::critical(0, trUtf8("خطأ في إنشاء قاعدة بيانات"), trUtf8("توجد قاعدة بيانات بنفس هذا الإسم"));
       	else
         	ui->stackedWidget->setCurrentIndex(currentIndex + 1);
        }
   	break;

   	}
  //  ui->comboBox->addItem(ui->userDbEdit->text());
  //  ui->lineEdit->setText(addSlashes(ui->slashesEdit->text()));
}

المشكلة أنه في case 3 دائما الإستعلام يرجع قيمة 1- مما يعني أن الإتسعلام لم ينجح، تأكدت من أن الإتصال مغتوح و أن قاعدة البيانات المختارة صحيحة، رغم ذلك يرجع قيمة سالبة، هل من تنفسير لذلك؟

تم تعديل هذه المشاركة بواسطة الشمري في 17 مايو 2011 في 00:32 — السبب: إضافة تنسيق للكود

''‏اللهم إني أسالك إيمانا دائما وأسألك قلبا خاشعا وأسألك علما ‏نافعا وأسألك يقينا صادقا وأسألك دينا قيما وأسألك العافية من كل ‏بلية''

'‏اللهم أغفر للمؤمنين و المؤمنات و المسلمين و المسلمات الأحياء ‏منهم و الأموات'

www.it-scoop.com

#2

الخطأ عندك على ما اعتقد انك كتبت

"SELECT user FROM user WHERE user=:user"

اسم الجدول على ما اعتقد users وليس user

No intellectual battle was ever won through retreat
You do not watch Gintama? Dude, you are missing a lot!


صورةmsrgb1485.gif ocajavase7programmerclr.gif

#3

الخطأ ليس عناك و إنها في ال الدالة numRowsAffected في عادة لاترجع قيم الحقول مع التعليمة SELECT لهذا علي إستخدام بدل منها الدالة size.

اقتباس

int QSqlQuery::numRowsAffected () const

Returns the number of rows affected by the result's SQL statement, or -1 if it cannot be determined. Note that for SELECT statements, the value is undefined; use size() instead. If the query is not active, -1 is returned.

''‏اللهم إني أسالك إيمانا دائما وأسألك قلبا خاشعا وأسألك علما ‏نافعا وأسألك يقينا صادقا وأسألك دينا قيما وأسألك العافية من كل ‏بلية''

'‏اللهم أغفر للمؤمنين و المؤمنات و المسلمين و المسلمات الأحياء ‏منهم و الأموات'

www.it-scoop.com

مواضيع مشابهة