클래스의 이름과 등급을 저장하는 Qt 데이터베이스를 만들고 싶습니다. tables
이라는 클래스를 나타냅니다. 실행할 때 오류가 발생하고 "프로그램이 예기치 않게 중지되었습니다"라는 메시지가 나타납니다. 무엇이 문제입니까? 다른 질문은 하나의 데이터베이스에서 일부 테이블을 만들 수 있습니다. 어떻게 내 수업 (아래 코드)을 변경해야합니까? (당신이 tables
의 다른 인스턴스를 생성하여 다른 데이터베이스를 오픈했기 때문에)Qt에서 데이터베이스 오류가 발생 했습니까?
database.h:
#ifndef DATABASE_H
#define DATABASE_H
#include <QtSql>
#include <QString>
#include <random>
class tables
{
private:
QString name;
QString table_name;
QSqlDatabase db;
public:
tables(QString);
tables(QString,QString);
void table_completer(int);
QString rand_name();
QString make_string(int);
~tables();
};
tables :: tables(QString nt)
{
table_name = nt;
}
tables :: tables(QString n,QString nt)
{
name = n;
table_name = nt;
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName(name);
db.open();
}
QString tables :: rand_name(){
QString a = "abcdefghijklmnopqrstuvwxyz";
QString s = "";
int b = rand()%3 + 4;
for(int i=0;i<b;i++){
int n = rand()%25;
s += a[n];
}
return s;
}
QString tables :: make_string(int num)
{
QString result;
result.append(QString("%1").arg(num));
return result;
}
void tables :: table_completer(int students_numbers)
{
QSqlQuery query;
query.exec("CREATE TABLE"+table_name+"(firstname text,lastname text,math int,physics int,litrature int,chemistry int);");
tables t(name,table_name);
for(int i=0;i<students_numbers;i++){
int a = rand()%20;
QString e = t.make_string(a);
int b = rand()%20;
QString f = t.make_string(b);
int c = rand()%20;
QString g = t.make_string(c);
int d = rand()%20;
QString h = t.make_string(d);
query.exec("INSERT INTO"+table_name+"VALUES("+t.rand_name()+","+t.rand_name()+","+e+","+f+","+g+","+h+")");
}
}
tables :: ~tables()
{
db.close();
}
#endif // DATABASE_H
main:
tables ab("mydatabase.db","class1");
ab.table_completer(30);
디버거는 무엇을 말합니까? – cmannett85
데이터베이스가 열려 있지 않습니다 :'tables :: tables'에서 새로 생성 된 연결을'this-> db' 대신에 지역 변수 ('db')에 할당하고 있습니다. 하지만 이로 인해 충돌이 발생해서는 안됩니다. – alexisdm
디버거는 아무 것도 말하지 않습니다 .. 프로그램이 충돌합니다 –