2017-03-27 1 views
0

Ich habe ein Programm in Qt geschrieben und ich wurde vor kurzem von diesen 2 Probleme konfrontiert. Problem 1: Ich habe eine SQLite-Datenbank mit 1 Tabelle und 4 Spalten (ID, einfach, mittel, schwer). Alle Ints. Deshalb möchte ich überprüfen, ob die ID existieren und kam mit diesem Code auf:Qt (SQL-Wert und QVector <T> :: Operator []: "Index außerhalb des Bereichs")

QSqlQuery queryCheck(db); 
    queryCheck.prepare("SELECT EXISTS(SELECT 1 FROM players WHERE id=':id' LIMIT 1)"); 
    queryCheck.bindValue(":id", c.getId()); 

Aber wenn ich laufen

if(queryCheck.exec()) 

i immer wahr bekommen.

Problem 2: Ich habe erstellt und mit Zahlen gefüllt, ein

QVector<QVector<int>> gridBoxUnsolved(9); 
for(int outer=0; outer<gridBoxUnsolved.size(); ++outer) 
    gridBoxUnsolved[outer].resize(9); 

und ich mag zufällig einige Werte auf 0 ändern dachte ich über jeden einzelnen „inneren“ QVector 1 Zufallswert zu ändern auf 0. So kam ich mit diesem Code auf:

int iRand; 
qsrand(time(NULL)); 
for (int i=0;i<9;i++){ 
    iRand = (qrand()%9)+1; 
    gridBoxUnsolved[i][iRand]=0; 
} 

aber manchmal feiner Qt funktioniert, aber die meisten der Zeit stürzt ab und senden Sie diese: ASSERT Fehler in QVector :: operator []: „Index aus Bereich ", Datei /opt/Qt/5.8/gcc_64/include/QtCor e/qvector.h, Zeile 437 Das Programm wurde unerwartet beendet.

Antwort

0

So fand ich die Lösung für das Problem.

QSqlQuery query(db); 
query.prepare("SELECT COUNT(*) AS N FROM table WHERE id=:id "); 

und danach tun Sie dies zu überprüfen:

query.exec(); 
query.next(); 
int N=query.value(0).toInt(); 
if(N) { 
    // You found the record 
} 
0

Versuchen Sie folgendes:

QSqlQuery queryCheck(db); 
queryCheck.prepare("SELECT 1 FROM players WHERE id=':id' "); 
queryCheck.bindValue(":id", c.getId()); 

if(queryCheck.exec() && queryCheck.first()) // you found your guy 

Zweites Problem - entfernen Sie die 1 in

iRand = (qrand()%9)+1; 

qrand()%9 finden Sie eine Reihe von 0 bis 8 erhalten das ist, was Sie wollen.

+0

Dank für Ihre Antwort danken. Mein zweites Problem, das ich sehe, war albern. Aber mit dem ersten habe ich jetzt ein anderes Problem. Ich poste Ihnen den ganzen Code, den ich versuche zu erreichen: – CrystalScrew

+0

if (queryCheck.exec() && queryCheck.first()) { qDebug() << "Datenbank: Spieler Existieren (AUSWAHL Arbeiten)"; Erfolg = wahr; } else if (queryCreate.exec()) { qDebug() << "Datenbank: Player erstellt (INSERT Working)"; } else { qDebug() << "Datenbank: Fehler beim Überprüfen Player:" << queryCheck.lastError(); qDebug() << "Datenbank: Fehler beim Erstellen des Players:" << queryCreate.lastError(); } Rückkehr Erfolg; } – CrystalScrew

+0

} wenn es meinen Kerl findet, wie Sie sagten, ich möchte 1 zurückgeben, wenn nicht, ich will ihn mit einer anderen Abfrage erstellen, die korrekt ist und in meinem Code funktioniert, aber es geht immer zu sonst so habe ich Fehler aus der Datenbank über eindeutiges Element (was korrekt ist, weil meine ID eindeutig ist) – CrystalScrew

Verwandte Themen