2011-02-15 12 views
0

シンビアンアプリのデータベースとしてsqliteを使用しようとしていますが、テーブルを作成できません。ここでは、コードがあります:C++、Qt 4 Sqlite:テーブルを作成できません

bool DatabaseManager::createExpenseTable(){ 

    if(QFile::exists(dbName)){ 
     this->showDebugMsg("Database file exist"); 
    }else{ 
     this->showDebugMsg("Database file exist DOES NOT exist"); 
    } 

    // Create table "person" 
    bool ret = false; 
    if (db.isOpen()){ 
     this->showDebugMsg("Database open"); 
     QSqlQuery query; 
     ret = query.exec("create table expense " 
        "(id int primary key, " 
        "item varchar(100)"); 
        //"price double, " 
        //"date datetime)"); 

    }else{ 
     this->showDebugMsg("Database CLOSED"); 
    } 
    if(ret){ 
     this->showDebugMsg("Table created"); 
    }else{ 
     this->showDebugMsg("Table NOT created"); 

    } 
    return ret; 
    } 

私の知る限りデバッグメッセージから見ることができるように「データベース・ファイルが存在する」と「データベースのオープン」データベースが存在し、開かれています。

しかし、私はいつも「テーブルは作成されていません」というメッセージを受け取ります。あなたの誰が問題がどこにあるかを見ていますか?

答えて

1

お待ちください、問題が見つかりました。

this->showDebugMsg(query.lastError().text()); 

「テーブル経費はすでに存在しています」ということで、新しいものは作成されませんでした。皆さんを迷惑にして申し訳ありません。

1

あなたのクエリには閉じ括弧がありません(あなたがコメントアウトしました)。

+0

これは終了しました。コメント部分の直前を見てください。そして、さて、もし彼らが近くにいなければ、コードはコンパイルされません。 – Segolas

+2

引用符付きのSQLに括弧がありません! – hmn

+0

@セゴラス:それは閉じていない。 hmnは正しいです。閉じた括弧を含むコードをコメントアウトしました。引用符を取り除いて文字列を合体すると、あなたが掲示したコードがこのクエリを実行することが分かります: 'create table expense(id int primary key、item varchar(100)'は最後の括弧を欠いています。コンパイラはあなたがSQLドライバに渡すものが正当なSQLかどうかを推測する方法がないため、 'kjrfhiherfhdfgvjhfgvjh'のクエリを使用します。つまり、SQLのことを知らないこともあります。 SQLドライバに。 –

関連する問題