2016-07-08 15 views
0

Ich habe ein Problem mit Qt und SQLite. Bis vor kurzem habe ich keine Probleme Erstellen von Tabellen, aber jetzt, wenn ich versuche, eine Tabelle zu erstellen (mit der exakt gleichen Funktion) Ich erhalte eine Fehlermeldung:Qt Sqlite Fehler 1 - Tabelle existiert bereits

QSqlError("1", "Unable to fetch row", "table selections already exists") 

Meine Abfrage-Strings sind wie folgt:

CREATE TABLE external_files (path VARCHAR (255) NOT NULL, used INTEGER (12) NOT NULL); 

Dies ist das gleiche wie zuvor.

Die seltsame Sache ist, obwohl alle Tabellen ohne ein Problem erstellt werden, aber ich bekomme immer noch Fehlermeldungen.

Wenn Sie irgendwelche Ideen haben, warum dies passiert, würde ich es begrüßen. :)

UPDATE: Minimal, vollständiges, überprüfbares Beispiel:

#include <QCoreApplication> 
#include <QSqlDatabase> 
#include <QSqlQuery> 
#include <QSqlError> 
#include <QFile> 
#include <QTextStream> 
#include <QDebug> 

int main(int argc, char *argv[]) 
{ 
    QCoreApplication a(argc, argv); 

    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE", "CONN"); 
    db.setDatabaseName("test.db"); 
    if(!db.open()){ 
     qDebug() << "Connection failed!"; 
    } 

    QFile tableListFile(":/resources/sql/tables.sql"); 
    if(tableListFile.open(QIODevice::ReadOnly)) 
    { 
     QTextStream stream(&tableListFile); 
     while(!stream.atEnd()) 
     { 
      QString queryString = stream.readLine(); 
      qDebug() << "Query string: " << queryString; 
      QSqlQuery query(queryString, db); 
      if(!query.exec()){ 
       qDebug() << "Query error: " << query.lastError(); 
      } 
     } 
    } 

    db.close(); 

    return a.exec(); 
} 

Vielen Dank im Voraus.

+0

Die Datenbank informiert Sie „Tabelle' selections' bereits vorhanden“, und dann fragt man sich, warum die Tabelle ist da? –

+0

Die Datenbank ist leer, bevor ich das ausführe. Es erstellt die Tabellenauswahl, aber ich bekomme diese Fehlermeldung trotzdem. – Flashcap20

+2

Offensichtlich ist die Datenbank vor der CREATE TABLE-Anweisung * nicht * leer. –

Antwort

0

Ok, ich habe es geschafft, das Problem zu lösen. Die Abfrage wurde zweimal für jede Abfragezeichenfolge ausgeführt, und das verursachte die Fehlermeldungen. zur Lösung zu gelangen, bearbeitet i mein Code wie folgt aus:

QString queryString = stream.readLine(); 
qDebug() << "Query string: " << queryString; 
QSqlQuery query; 
if(!query.exec(queryString)){ 
    qDebug() << "Query error: " << query.lastError(); 
} 
Verwandte Themen