2016-09-13 4 views
0
dataBase = QSqlDatabase::addDatabase("QSQLITE"); 
dataBase.setDatabaseName("login_password.sqlite"); 

QSqlQuery authQuery; 

if(!dataBase.open()) 
{ 
    qDebug() << dataBase.lastError().text(); 
} 

QString create("CREATE TABLE BASE(LOGIN VARCHAR(15) PRIMARY KEY NOT NULL, " 
       "PASSWRD TEXT(50) NOT NULL, RIGHTS INT NOT NULL);"); 

bool state = authQuery.exec(create); 
if(!state) qDebug() << "Не удалось создать таблицу!"; 

クエリで何が問題なのですか?テキストをPRIMARY KEYにすることはできますか?QtでSQLite CREATEクエリ

+3

あなたから取得するエラーメッセージは '何ですかQSqlQuery :: lastError() '? –

+0

関連していませんが、あなたのデータベースに平文でパスワードを保存しようとしているように、 'PASSWRD TEXT(50)'という音は間違っています... –

+0

@MatteoItaliaいいえ、私はそれらを暗号化するつもりです。私はそれを手作業で行うべきです。 – Padmelina

答えて

2

docsから:

警告:SQLドライバをロードし、 QSqlQueryが作成され前に、接続を開く必要があります。また、クエリが存在している間は接続を開いたままにしておく必要があります。それ以外の場合、QSqlQueryの動作は未定義です。

あなたの質問では、データベースを開く前QSqlQueryを作成している、あなたはこのように、dataBase.open()コールの後authQuery宣言文を移動する必要があります。

QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); 
db.setDatabaseName("login_password.sqlite"); 
if (!db.open()) 
    qDebug() << "error opening database: " << dataBase.lastError().text(); 

QSqlQuery authQuery; 
QString create("CREATE TABLE BASE(LOGIN VARCHAR(15) PRIMARY KEY NOT NULL, " 
       "PASSWRD TEXT(50) NOT NULL, RIGHTS INT NOT NULL);"); 
if(!authQuery.exec(create)){ 
    qDebug() << "error executing statement: " << authQuery.lastError().databaseText(); 
} 
+0

質問をした後に誤ってコピーしました – Padmelina