Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. International
  3. Portuguese
  4. Erro ao inserir no MySql
Qt 6.11 is out! See what's new in the release blog

Erro ao inserir no MySql

Scheduled Pinned Locked Moved Portuguese
9 Posts 3 Posters 3.5k Views 1 Watching
  • 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.
  • L Offline
    L Offline
    lima_will
    wrote on last edited by
    #1

    Pessoal,

    Acredito que seja coisa idiota mas não consegui ainda achar meu erro. Seguinte estou pegando os dados do LineEdit e colocando em uma variavel Qstring:
    @nome = ui->Campo_nome->text();
    end = ui->Campo_end->text();
    cep = ui->Campo_cep->text();
    cid = ui->Campo_cidade->text();
    uf = ui ->combo_UF->currentText();
    email = ui->Campo_e_mail->text();
    rg = ui->Campo_rg->text();
    cpf = ui->Campo_cpf->text();
    tel = ui->Campo_tel->text();
    cel = ui->Campo_celular->text();
    nasc = ui->date_nasc->text();@

    E tentei converter todos em string e uma int, fiz assim:

    @const char *nomes = nome.toStdString().c_str();
    const char *ends = end.toStdString().c_str();
    ceps = cep.toInt();
    const char *cids = cid.toStdString().c_str();
    const char *ufs = uf.toStdString().c_str();
    const char *emails = email.toStdString().c_str();
    const char *rgs = rg.toStdString().c_str();
    const char *cpfs = cpf.toStdString().c_str();
    const char *tels = tel.toStdString().c_str();
    const char *cels = cel.toStdString().c_str();
    const char *nascs = nasc.toStdString().c_str();@

    E depois para testes coloquei a conexão e a execução usei o mesmo arquivo:

    @//INSERINDO NO BANCO
    QSqlDatabase db = QSqlDatabase::addDatabase( "QMYSQL" );

    db.setHostName("localhost");
    db.setDatabaseName("otica");
    db.setUserName("root");
    db.setPassword("will@958");
    
    if( !db.open() )
    {
       qDebug() << db.lastError();
       qFatal( "Failed to connect." );
     }
     qDebug( "Connected!" );
     QSqlQuery qry;
    
    
     qry.prepare( "INSERT INTO funcionarios (nome,endereco,cep,cidade,uf,email,rg,cpf,tel,cel,dat_nasc) VALUES (nomes,ends,ceps,cids,ufs,emails,rgs,cpfs,tels,cels,nascs)" );
       if( !qry.exec&#40;&#41; &#41;
         qDebug(&#41; << qry.lastError(&#41;;
       else
         qDebug( "Inserted!" );@
    

    E está me dando o seguinte erro:
    @
    Connected!
    QSqlError(1054, "QMYSQL: Unable to execute query", "Unknown column 'nomes' in 'field list'")@

    Aonde está meu erro que não consegui enxergar ainda!!

    1 Reply Last reply
    0
    • T Offline
      T Offline
      TioRoy
      wrote on last edited by
      #2

      Aqui:

      @ qry.prepare( "INSERT INTO funcionarios (nome,endereco,cep,cidade,uf,email,rg,cpf,tel,cel,dat_nasc) VALUES (nomes,ends,ceps,cids,ufs,emails,rgs,cpfs,tels,cels,nascs)" );@

      Você está montando uma String, sem passar as variáveis.

      Você precisa fazer bind das variáveis. Ficaria +- assim (código não está completo :-) ):

      @ qry.prepare( "INSERT INTO funcionarios (nome,endereco,cep,cidade,uf,email,rg,cpf,tel,cel,dat_nasc) VALUES (? ,?,?,?,?,?,?,?,?,?,?)" );
      qry.bindValue( 0, nomes );
      qry.bindValue( 1, ends );
      qry.bindValue( 2, ceps );
      //....
      qry.bindValue( 10, cels );
      qry.bindValue( 11, nascs );

      if( !qry.exec() )
      qDebug() << qry.lastError();
      else
      qDebug( "Inserted!" );
      @

      1 Reply Last reply
      0
      • V Offline
        V Offline
        volnei
        wrote on last edited by
        #3

        Olá lima_will,

        Um outro enfoque poderia ser:

        @ qry.prepare( "INSERT INTO funcionarios (nome,endereco,cep,cidade,uf,email,rg,cpf,tel,cel,dat_nasc) VALUES (:nome, :endereco, :cep, :cidade, :uf, :email, :rg, :cpf, :tel, :cel, :dat_nasc)" );

        qry.bindValue( ":nome", nomes );
        qry.bindValue( ":endereco", ends );
        qry.bindValue( ":cep", ceps );
        //....
        qry.bindValue( ":cel", cels );
        qry.bindValue( ":dat_nasc", nascs );
        @

        Eu o considero melhor apenas por questões de legibilidade.

        Um detalhe apenas: A não ser que você tenha uma motivo especial, não
        é necessário converter o campo QLineEdit para um const char * antes
        de usar no bindValue().
        Você pode fazer assim, por exemplo:

        @qry.bindValue( ":dat_nasc", ui->Campo_nome->text() );@

        Veja o protótipo:

        @void QSqlQuery::bindValue(const QString & placeholder, const QVariant & val, QSql::ParamType paramType = QSql::In)@

        Caso precise fazer alguma consistência no campo antes de gravá-lo,
        existem diversas técnicas aplicáveis também.

        1 Reply Last reply
        0
        • L Offline
          L Offline
          lima_will
          wrote on last edited by
          #4

          Caras,

          Muito obrigado depois que vi as respostas o mundo mudou! rssrsrrs

          Valeu mesmo pela ajuda!!

          1 Reply Last reply
          0
          • L Offline
            L Offline
            lima_will
            wrote on last edited by
            #5

            Caras,

            desculpa a ignorancia mas me surgiu uma nova duvida, na tela que estou trabalhando estou preenchendo uma tabela, com um select simples:

            SELECT * FROM clientes;

            Funciona mas se tendo colocar algum parametro passado pelo usuario não sei como encaixar no SELECT. Atualmente está assim:

            Coloquei a conexão acima em uma classe então chamo ela com o comando:
            @Conexao();
            Conexao();

                    this->model = new QSqlQueryModel();
            
                    if(ui->checkBox_Nome->isChecked())
                    {
                        opcao = ui->Campo_nome->text().toUpper();
            
                    }
                    else if(ui->checkBox_CPF->isChecked())
                    {
                        opcao = ui->Campo_cpf->text();
                    }
                    else if(ui->checkBox_RG->isChecked())
                    {
                        opcao = ui->Campo_rg->text();
                    }
            
                    //"SELECT firstname, lastname FROM names WHERE lastname = 'Roe'"
                    model->setQuery("SELECT codCliente,nome,rg,cpf FROM clientes WHERE nome = ?;");
                    qry.addBindValue(opcao);
            
                    ui->tableView->setModel(model);@
            

            Sei que não estou usando o @qry@ e sim esse model (segui um tutorial) como faço agora para massar esse parametro opcao para o select???

            1 Reply Last reply
            0
            • V Offline
              V Offline
              volnei
              wrote on last edited by
              #6

              Olá lima_will,

              Você pode de maneira geral usar esta simples técnica:

              @
              QString stmtSql = QString("SELECT codCliente,nome,rg,cpf FROM clientes WHERE nome = '%0'").arg(opcao);

              model->setQuery(stmtSql);
              ui->tableView->setModel(model);
              @

              1 Reply Last reply
              0
              • L Offline
                L Offline
                lima_will
                wrote on last edited by
                #7

                Olá Volnei,

                Funcionou perfeitamente ! Muito obrigado!
                Acredito que seja minha ultima duvida, agora preciso preencher um combobox, tentei isso aqui:

                @Conexao();

                QString stmtSql = QString("SELECT nome FROM clientes");
                
                
                int index = 0;
                while(stmtSql.next())
                {
                   ui->comboBox_nome->addItem(stmtSql);
                   index++;
                }
                

                @

                Mas não está dando certo!

                1 Reply Last reply
                0
                • V Offline
                  V Offline
                  volnei
                  wrote on last edited by
                  #8

                  Oi

                  Você pode fazer assim por exemplo:

                  @
                  QString smtSql = "SELECT nome FROM clientes";

                  comboBox->clear();
                  QSqlDatabase::database().transaction();
                  QSqlQuery query;
                  query.prepare(stmtSql);
                  query.exec();
                  if( query.lastError().isValid()) {
                  QSqlDatabase::database().rollback();
                  QApplication::restoreOverrideCursor();
                  return;
                  }
                  while( Q_LIKELY(query.next()) )
                  {
                  comboBox->addItem( query.value(0).toString() );
                  }
                  QSqlDatabase::database().commit();
                  @

                  É bem divertido usar o Qt com database. :)

                  1 Reply Last reply
                  0
                  • L Offline
                    L Offline
                    lima_will
                    wrote on last edited by
                    #9

                    Volnei,

                    cara vc é 10!!! funcionou perfeitamente! Muito obrigado mesmo.
                    Mas poderia me explicar? O outro que você me ensinou a prencheer o tableview eu endenti bem. Mas esse ultimo exemplo ficou um pouco confuso para mim.

                    E outra duvida como faço para pegar os dados de um select e jogar em algumas variaveis, tipo fiz este select:
                    @Conexao();

                    QSqlQuery qry;
                    
                    qry.prepare("SELECT codCliente FROM clientes WHERE nome= :nome");
                    qry.bindValue(":nome",cliente);
                    qry.exec&#40;&#41;;
                    idCliente = qry.value(0).toInt();
                    
                    qDebug() << idCliente;@
                    

                    Só que não está dando certo o que errei??

                    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