2017-03-01 11 views
0

QLineEditからsqliteデータベースにデータを保存します。 QlineEditとバインドするには?説明してください。QLineEditをsqliteデータベースとバインドする方法は?

は、ここに私のコードです:それは私が手動で挿入した場合、それは動作します

**QString user_name = ui->txt_UserName->text(); 
    QString pass = ui->txt_Pass->text(); 

    QSqlQuery query; 
    query.prepare ("CREATE TABLE login_info(" 
           "user_id text primary key," 
           "pass text)" 
        ); 
    query.prepare ("INSERT INTO login_info (user_id) VALUES('shajksfl')"); 
    query.prepare ("DELETE FROM login_info"); 
    query.bindValue (":user_name", user_name); 

    query.prepare ("SELECT * FROM login_info"); 

    if(!query.exec()){ 
     // 
     qDebug() << query.lastInsertId(); 
     QMessageBox::critical (this, "Eror!", "Unable to save data.", QMessageBox::Ok, QMessageBox::Cancel); 
    } else { 

     QMessageBox::information (this, "Success!", "Success to save data.", QMessageBox::Ok, QMessageBox::Cancel); 

     while(query.next()){ 
      QString usr = query.value (0).toString(); 
      QString pswd = query.value (1).toString(); 

      qDebug() << usr << pswd << endl; 
     } 
    }** 

を動作しません。

答えて

0

「バインド」とは、テキストが変更されたときにデータベースに自動的に保存したり、データベースが変更されたときにテキストを更新したりするということです。ネイティブでは不可能です。

あなたは、単に(すなわち、単にトークンを交換することにより、安全な方法であなたのクエリで値を設定)SQLクエリで値をバインドしたい場合は、これはあなたが何をすべきかです:

query.prepare ("INSERT INTO login_info (user_id) VALUES(:user_name)"); 
query.bindValue (":user_name", user_name); 

これは、 ":user_name"をuser_name変数に含まれる値で置き換え、引用符と必要なものすべてを追加します。

さらに、prepareを複数回使用してからexecを使用することはできません。準備された各クエリの後にexecに電話する必要があります。例を示すQt documentation pageを見てください。

+0

ありがとうございます。できます。 qtableviewにデータを表示する方法は? –

+0

それを聞いてうれしいです。 QTableViewの場合は、 'QSqlTableModel'か独自のモデルを使用する必要があります。別の方法は、QTableWidgetを使用することです。しかし、これは別の質問になるでしょう! :)正しい答えをあなたにタグ付けし、好きな場合は新しいものを開きます。 –

0

実行することなくいくつかの「prepare()」を使用し、プレースホルダを使用せずにバインドします。
は、あなたが別のクエリを実行したい場合は、別のステートメントを準備する必要がありQSqlQuery::prepare(const QString&)

QString user_id = txt_UserName->text(); 
QSqlQuery query; 
query.prepare("INSERT INTO login_info (user_id) VALUES(':user_id')"); 
query.bindValue(":user_id", user_id); 
query.exec(); 

Qtのドキュメントをご覧ください。
コードでは、execメソッドは次のクエリを実行します。DELETE FROM login_info
これで動作しません。
よろしくお願いいたします。

関連する問題