2016-12-08 8 views
0

私はユーザーが単語を入力することができ、アプリケーションが定義を出力することができる単純なアプリケーションを作成しようとしています。 mysqlデータベースファイルを作成して単語と定義をコンパイルしました。私はMySQLを使用すると、私のアプリをより速く作ることができると思った。私はちょうどそれを行う方法を見つけ出すことはできませんQtでMySQLクエリを作成するには?

if(lineEdit == wordInput) 
{ 
    ui->label->setText("Display definition) 
} 

:このプログラムのための擬似コードは、間違いなくこのようにする必要があり

rowed  | Column1(word)   | Column2(definition) 
1    DNA      A double-stranded,helical... 

:私のデータベースには、このようになります。

qry.prepare("SELECT Column1,Column2 FROM tableName WHERE Column1 = :input"); 
qry.bindValue(":input",wordInput); 
if(qry.exec()) 
{ 
    if (qry.next()) 
    { 
    // Extract the results from the SELECT statement 
    QString inputWord = qry.value(0).toString(); 
    QString wordDefinition = qry.value(1).toString(); 

    // Then use the values for whatever you wish. 
    } 
} 
+0

QtソースコードからMySQLドライバをコンパイルしましたか? –

+0

mysqlドライバとはどういう意味ですか? –

+0

コード内のどこでもdb.open()を呼び出しますか? –

答えて

0

いいえ、次のコードは私にとって役に立ちます。既存のコードをコメントアウトしてこのコードを貼り付けてみてください。このコードは基本的に投稿したコードと全く同じですが、背景を設定して余分な線を削除するコードをいくつかコメントアウトしました。

#include "mainwindow.h" 
#include "ui_mainwindow.h" 
#include <QMessageBox> 
#include <QDebug> 
#include <QPalette> 
#include <QSqlQuery> 
#include <QFileInfo> 

#define Path_to_DB "/Users/makkhay/Desktop/nep_eng-2.sqlite" 


MainWindow::MainWindow(QWidget *parent) : 
    QMainWindow(parent), 
    ui(new Ui::MainWindow) 

{ 
    ui->setupUi(this); 
     // Set background picture 
     //QPixmap bkgnd("/Users/makkhay/Desktop/background.jpg"); 
     //bkgnd = bkgnd.scaled(this->size(), Qt::IgnoreAspectRatio); 
     //QPalette palette; 
     //palette.setBrush(QPalette::Background, bkgnd); 
     //this->setPalette(palette); 


     myDB = QSqlDatabase::addDatabase("QSQLITE"); 
     myDB.setDatabaseName(Path_to_DB); 
     QFileInfo checkFile(Path_to_DB); 

     if(checkFile.isFile()) 
     { 
      if(myDB.open()) 
      { 
      ui->label->setText("The database is connected"); 
      } 

     }else{ 
      ui->label->setText("No file found!"); 
     } 


} 

MainWindow::~MainWindow() 
{ 
    delete ui; 
    myDB.close(); 
} 


void MainWindow::on_pushButton_clicked() 
{ 
    if(!myDB.isOpen()){ 
     qDebug() << " No connection to db"; 
     return; 
    } 

    QString wordInput; 
    wordInput = ui->lineEdit->text(); 

    QSqlQuery qry; 

    qry.prepare("SELECT Column1,Column2 FROM Nepali WHERE Column1 = :input"); 
    qry.bindValue(":input",wordInput); 

    if(qry.exec()) 
    { 
     ui->debug->setText(" Checking output!"); 

     while (qry.next()) 
     { 
     // Retrieve Values from select statement 
     QString inputWord = qry.value(0).toString(); 
     QString wordDefinition = qry.value(1).toString(); 

     // Display values 
     ui->output->setText(wordDefinition); 
     } 
    } else { 
     qDebug() << "query failed to execute"; 
    } 

} 
+0

ありがとうございます、今すぐ動作します。クエリは単語を正しく検索していますが、定義をどのように表示しますか?つまり、テーブルから定義を取得してlabeltextに表示するにはどうすればよいですか?私は私のクエリの権利を変更するためにネーミングするかもしれないと思いますか?おそらく、wordDef = qry.prepare( "SELECT Column1、Column2 FROM Nepali WHERE Column1 and Column2 =:input")のように。次のように表示されます:ui-> output-> setText(wordDef);ちなみに、単語はユーザーによって入力され、アプリはその定義を出力します。 –

+0

恐ろしい!いいえ、クエリはすでに両方の列(単語と定義)から値を取得しています。それらの値を抽出するだけです。クエリから値を抽出するコードでこの回答を編集しました(これはqry.next()の直後に行われます)。値を表示することができますし、私の答えでは定義を表示するだけですが、あなたはそれをどのように表示することができます。 –

+0

私を助けてくれてありがとう! –

0

:これまでのところ私は、次のコードを試してみました。また、Column1wordInputとを比較しています(Column2ではなく)。

if(qry.exec("SELECT Column1,Column2 FROM some_table WHERE Column1='"+ wordInput+"'")) 

編集:あなたが選択している表は言及していません。

+0

私はあなたの考えを試みましたが、うまくいかなかった。私は各行を調べてみましたが、if(qry.exec()){ui-> label-> setText( "test output");それは決してそれを出力しないので、if文は常にfalseです。 –

0

あなたはWHERE前にカンマは必要ありません。コードは次のようになります。QRY変数を宣言した後

#include "mainwindow.h" 
#include "ui_mainwindow.h" 
#include <QMessageBox> 
#include <QDebug> 
#include <QPalette> 

#define Path_to_DB "/Users/makkhay/Desktop/nep_eng-2.sqlite" 


MainWindow::MainWindow(QWidget *parent) : 
    QMainWindow(parent), 
    ui(new Ui::MainWindow) 

{ 
    ui->setupUi(this); 
     // Set background picture 
     QPixmap bkgnd("/Users/makkhay/Desktop/background.jpg"); 
     bkgnd = bkgnd.scaled(this->size(), Qt::IgnoreAspectRatio); 
     QPalette palette; 
     palette.setBrush(QPalette::Background, bkgnd); 
     this->setPalette(palette); 


     myDB = QSqlDatabase::addDatabase("QSQLITE"); 
     myDB.setDatabaseName(Path_to_DB); 
     QFileInfo checkFile(Path_to_DB); 

     if(checkFile.isFile()) 
     { 
      if(myDB.open()) 
      { 
      ui->label->setText("The database is connected"); 
      } 

     }else{ 
      ui->label->setText("No file found!"); 
     } 


} 

MainWindow::~MainWindow() 
{ 
    delete ui; 
    myDB.close(); 
} 


void MainWindow::on_pushButton_clicked() 
{ 
// QMessageBox::StandardButton reply= QMessageBox::question(this, 
//          "My Title", " Word not found, quit app?", 
//          QMessageBox::Yes | QMessageBox::No); 


// if(reply == QMessageBox::Yes){ 

//  QApplication::quit(); 
//} 


    if(!myDB.isOpen()){ 
     qDebug() << " No connection to db"; 
     return; 
    } 

    QString wordInput, definition; 
    wordInput = ui->lineEdit->text(); 

    QSqlQuery qry; 

    qry.prepare("SELECT Column1,Column2 FROM Nepali WHERE Column1 = :input"); 
    qry.bindValue(":input",wordInput); 
    // int fieldNo = query.record().indexof("Column1"); 

    if(qry.exec()) 
    { 
     ui->debug->setText(" Checking output!"); // output is visible 

     while (qry.next()) 
     { 
     ui->output->setText("Checing output!"); // output is not visible 


     QString inputWord = qry.value(0).toString(); 
     QString wordDefinition = qry.value(1).toString(); 
     ui->output->setText(wordDefinition); 





     } 
    } 

} 
+0

私を助けていただきありがとうございますが、動作しませんでした –