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

Erro ao inserir no MySql

Scheduled Pinned Locked Moved Portuguese
9 Posts 3 Posters 2.9k 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.
  • 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