2017-05-05 147 views
0

我有一個非常惱人的問題,它對我來說沒有意義什麼是錯的。我創建一個多形式,ATM應用程序,但由於某種原因,我的DB是說其開放的應用程序,但在輸出它拋出的錯誤:QSqlQuery :: EXEC:數據庫無法打開QT SQLITE數據庫無法打開

這裏是MainMenu的。在那裏我創建的DB

mainMenu::mainMenu(QWidget *parent) :QMainWindow(parent),ui(newUi::mainMenu) 
{ 
    ui->setupUi(this); 
    atmDB = QSqlDatabase::addDatabase("QSQLITE","myConnection"); 
    atmDB.setDatabaseName(Path_to_DB); 
    QFileInfo checkFile(Path_to_DB); 
} 

在這裏,它會顯示在屏幕上「連接數據庫」的login.cpp文件中的第一個實例CPP文件

login::login(QWidget *parent) :QDialog(parent),ui(new Ui::login) 
{ 
ui->setupUi(this); 

QSqlDatabase logindb; 

logindb = QSqlDatabase::database("myConnection",true); 
bool x = logindb.open(); 


if(!x){ 
    ui->loginStatusL->setText("No connection to log-in database!"); 
} 
else 
    ui->loginStatusL->setText("Database connected!"); 
} 

但是,當用戶按下按鈕登錄它會拋出SqlQuery e RROR,

void login::on_loginLoginB_clicked() 
{ 
QSqlDatabase loginB; 
loginB = QSqlDatabase::database("myConnection",true); //open database 

QString email, password; 
email = ui->loginEmailbox->text(); 
password = ui->loginPassbox->text(); 
pubEmail = email; 

if(!loginB.isOpen()){ 
    ui->loginStatusL->setText("Connection to database lost"); 
    return; 
} 

QSqlQuery qry; 

if(qry.exec("SELECT * FROM userRecords WHERE email = '"+email+"' and password='"+password+"'")){ 
    int count = 0; 
    while(qry.next()){ 
     count++; 
    } 
    if(count==1){ 
     userMenu usermenu; 
     atmDB.close(); 
     usermenu.setModal(true); 
     usermenu.exec(); 
    } 
    else 
     ui->loginStatusL->setText("Login failed. Email or password incorrect."); 
} 

} 

我也有我的register.cpp文件同樣的問題,它遵循同樣的邏輯。

+1

這段代碼大部分是無關的;將其縮小到[MCVE](http://stackoverflow.com/help/mcve)。 – MrEricSir

回答

0

如果你只是想知道爲什麼QSqlQuery::exec()不能工作,那是因爲你沒有告訴它它應該運行查詢的任何數據庫。 初始化應該看起來更像:

QSqlDatabase loginB; 
//code omitted... 
QSqlQuery qry(loginDB); //Tell QSqlQuery which database to work with 
//call qry.exe() here 

我敢打賭,它是你的register.cpp同樣的問題。

+1

SQLite不使用密碼(也沒有任何其他形式的認證) –

+0

@ el.pescado你絕對正確,謝謝。這是我監督的事情。我編輯了答案來反映這一點。 –