Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. QT6 SQLite and QSqlQuery "Parameter count mismatch" Error
Forum Updated to NodeBB v4.3 + New Features

QT6 SQLite and QSqlQuery "Parameter count mismatch" Error

Scheduled Pinned Locked Moved Unsolved General and Desktop
6 Posts 4 Posters 579 Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • M Offline
    M Offline
    Meskaz285
    wrote on last edited by Meskaz285
    #1

    I wrote this function to add data to a database:

    void MainWindow::save1() {
    QString stid,stname,stsur,stage,stgen,stbday,stcourses;
    stid=ui->Stid->text();
    stname=ui->name->text();
    stsur=ui->surname->text();
    stage=ui->age->text();
    if(ui->male->isChecked())
    stgen="male";
    if(ui->female->isChecked())
    stgen="female";
    stbday=ui->birthday->text();
    stcourses=ui->courses->text();
    QSqlQuery qry;
    qry.prepare("INSERT INTO Student (Student ID,Name,Surname,Age,Gender,Birthday,Courses) VALUES "
    "(:stid,:stname,:stsur,:stage,:stgen,:stbday,:stcourses)");
    qry.bindValue(":stid", stid);
    qry.bindValue(":stname",stname);
    qry.bindValue(":stsur",stsur);
    qry.bindValue(":stage",stage);
    qry.bindValue(":stgen",stgen);
    qry.bindValue(":stbday",stbday);
    qry.bindValue(":stcourses",stcourses);
    qry.exec();
    }

    I keep getting QSqlError("", "Parameter count mismatch", "").
    I tried to find a solution but had no luck. I would like some help here

    jsulmJ JonBJ 2 Replies Last reply
    0
    • M Meskaz285

      I wrote this function to add data to a database:

      void MainWindow::save1() {
      QString stid,stname,stsur,stage,stgen,stbday,stcourses;
      stid=ui->Stid->text();
      stname=ui->name->text();
      stsur=ui->surname->text();
      stage=ui->age->text();
      if(ui->male->isChecked())
      stgen="male";
      if(ui->female->isChecked())
      stgen="female";
      stbday=ui->birthday->text();
      stcourses=ui->courses->text();
      QSqlQuery qry;
      qry.prepare("INSERT INTO Student (Student ID,Name,Surname,Age,Gender,Birthday,Courses) VALUES "
      "(:stid,:stname,:stsur,:stage,:stgen,:stbday,:stcourses)");
      qry.bindValue(":stid", stid);
      qry.bindValue(":stname",stname);
      qry.bindValue(":stsur",stsur);
      qry.bindValue(":stage",stage);
      qry.bindValue(":stgen",stgen);
      qry.bindValue(":stbday",stbday);
      qry.bindValue(":stcourses",stcourses);
      qry.exec();
      }

      I keep getting QSqlError("", "Parameter count mismatch", "").
      I tried to find a solution but had no luck. I would like some help here

      jsulmJ Offline
      jsulmJ Offline
      jsulm
      Lifetime Qt Champion
      wrote on last edited by
      #2

      @Meskaz285 said in QT6 SQLite and QSqlQuery "Parameter count mismatch" Error:

      Student ID

      You seem to have a space between Student and ID

      https://forum.qt.io/topic/113070/qt-code-of-conduct

      M 1 Reply Last reply
      0
      • jsulmJ jsulm

        @Meskaz285 said in QT6 SQLite and QSqlQuery "Parameter count mismatch" Error:

        Student ID

        You seem to have a space between Student and ID

        M Offline
        M Offline
        Meskaz285
        wrote on last edited by
        #3

        @jsulm that was how i named it in the db file. Should i not name it that way?

        1 Reply Last reply
        0
        • C Offline
          C Offline
          Chrisw01
          wrote on last edited by
          #4

          @Meskaz285 You may need to wrap your names with a ` tick. I personally have had a lot of problems with bindValue so I switched to building the string to be executed.

          e.g.:

                   QString sqlString = QString("INSERT INTO Student(`Student ID`, `Name`, `Surname`, `Age`, `Gender`, `Birthday`, `Courses`) VALUES ('%1', '%2', '%3', '%4', '%5', '%6', '%7')").arg(stid).arg(stname).arg(stsur).arg(stage).arg(stgen).arg(stbday).arg(stcourses);
          
                  success = false; errorCount = 0; // success is a bool and errorCount is a int.
          
                  while((success = sql.exec(sqlString)) == false && (errorCount++ < 10)) {
                      QTime dieTime = QTime::currentTime().addSecs(1);
                      while(QTime::currentTime() < dieTime)
                          QCoreApplication::processEvents(QEventLoop::AllEvents, 100);
                  }
                  if((errorCount > 0) && (success == false)) {
                      // Handle your failure here
                  }
                  else {
                   // handle your success here
                  }
          
          

          I have found this method to work best for me. I always had issues with bindValue and the second part of the code you may not need if you use a local sqlServer. I was having issues when using a remote server with sql.exec failing if the network conditions was not perfect.

          Hope that helps...

          1 Reply Last reply
          0
          • M Meskaz285

            I wrote this function to add data to a database:

            void MainWindow::save1() {
            QString stid,stname,stsur,stage,stgen,stbday,stcourses;
            stid=ui->Stid->text();
            stname=ui->name->text();
            stsur=ui->surname->text();
            stage=ui->age->text();
            if(ui->male->isChecked())
            stgen="male";
            if(ui->female->isChecked())
            stgen="female";
            stbday=ui->birthday->text();
            stcourses=ui->courses->text();
            QSqlQuery qry;
            qry.prepare("INSERT INTO Student (Student ID,Name,Surname,Age,Gender,Birthday,Courses) VALUES "
            "(:stid,:stname,:stsur,:stage,:stgen,:stbday,:stcourses)");
            qry.bindValue(":stid", stid);
            qry.bindValue(":stname",stname);
            qry.bindValue(":stsur",stsur);
            qry.bindValue(":stage",stage);
            qry.bindValue(":stgen",stgen);
            qry.bindValue(":stbday",stbday);
            qry.bindValue(":stcourses",stcourses);
            qry.exec();
            }

            I keep getting QSqlError("", "Parameter count mismatch", "").
            I tried to find a solution but had no luck. I would like some help here

            JonBJ Offline
            JonBJ Offline
            JonB
            wrote on last edited by JonB
            #5

            @Meskaz285
            Before you decide to follow @Chrisw01's route and abandon bindings in favour of literal inlines (which has its own issues), from where you are now you have only to try:

            qry.prepare("INSERT INTO Student (`Student ID`,Name,Surname,Age,Gender,Birthday,Courses) 
            

            and the rest the same. You will always need to quote a column name which you have chosen to have a space in whenever you use it in SQL statements, e.g. when you get to your SELECT statements. And how you quote varies across SQL implementations. Up to you, but I wouldn't dream of choosing to have a space in a column name for the hassle :) Some people use underscore characters for that.

            M 1 Reply Last reply
            1
            • JonBJ JonB

              @Meskaz285
              Before you decide to follow @Chrisw01's route and abandon bindings in favour of literal inlines (which has its own issues), from where you are now you have only to try:

              qry.prepare("INSERT INTO Student (`Student ID`,Name,Surname,Age,Gender,Birthday,Courses) 
              

              and the rest the same. You will always need to quote a column name which you have chosen to have a space in whenever you use it in SQL statements, e.g. when you get to your SELECT statements. And how you quote varies across SQL implementations. Up to you, but I wouldn't dream of choosing to have a space in a column name for the hassle :) Some people use underscore characters for that.

              M Offline
              M Offline
              Meskaz285
              wrote on last edited by
              #6

              @JonB Ah thank you. This worked for me

              1 Reply Last reply
              0

              • Login

              • Login or register to search.
              • First post
                Last post
              0
              • Categories
              • Recent
              • Tags
              • Popular
              • Users
              • Groups
              • Search
              • Get Qt Extensions
              • Unsolved