2017-03-27 7 views
0

私はQtでプログラムを書いていましたが、最近私はこれらの2つの問題に直面しました。 問題1: 私は1テーブルと4列(ID、簡単、中、ハード)のsqliteデータベースを持っています。すべてのints。だから私は、idが存在するかどうかを確認したいと、このコードを思い付いた:Qt(sqlite値とQVector <T> :: operator []: "index of range")

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

しかし、私は

if(queryCheck.exec()) 

を実行したとき、私は常にtrueを得ます。私が作成した 、および数字で満たされ、

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

と私は1つのランダムな値を変更するには、ほぼすべてのシングル「内側」QVectorを考えランダムに0にいくつかの値を変更したい:

問題2

0にだから私は、このコードを思い付いた:

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

しかし、時々、Qtは正常に動作しますが、時間のクラッシュのほとんどと、この返す:のうち「インデックス: ASSERTのQVector ::演算子[]で失敗したことを範囲 "、ファイル/opt/Qt/5.8/gcc_64/include/QtCor e/qvector.h、行437 プログラムが予期せず終了しました。

答えて

0

私は問題の解決策を見つけました。

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

その後あなたがチェックするために、この操作を行います。

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

このお試しください:

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 

第二の問題を - 1

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

qrand()%9を削除するには、あなたが望むものである0から8まであなたの番号を取得します。

+0

は、あなたの答えをいただき、ありがとうございます。私が見ている私の2番目の問題はばかげていました。しかし、最初のものでは私は今、異なる種類の問題を抱えています。私は達成しようとしているコード全体を投稿します: – CrystalScrew

+0

if(queryCheck.exec()&& queryCheck.first()){ qDebug()<< "データベース:Player Exist(SELECT Working)"; 成功=真; } else if(queryCreate.exec()){ qDebug()<< "データベース:作成者(INSERT作業中)"; } else { qDebug()<< "データベース:Playerのチェック中にエラーが発生しました:" << queryCheck.lastError(); qDebug()<< "データベース:Playerの作成中にエラーが発生しました:" << queryCreate.lastError(); } return success; } – CrystalScrew

+0

だからあなたが1を返すと言ったように私の人を見つけたら、正しくないと私のコードで動作している別のクエリで彼を作成したいが、それは常に他の人に行くので、私はデータベース一意の要素(私のIDは一意であるため正しい) – CrystalScrew

関連する問題