Срочно нужна помощь!
Есть класс
8 class smartQuery: public QSqlQuery
9 {
10 //Q_OBJECT
11 private:
12 QString query;
13 QString order;
14 QStringList keys;
15 QVariantList values;
16 Debugger *dbg;
17
18 public:
19 smartQuery ( QSqlResult * );
20 smartQuery ( const QString &query = QString(), QSqlDatabase db = QSqlDatabase());
21 smartQuery ( QSqlDatabase db);
22 smartQuery ( const QSqlQuery & other);
23
24 bool exec (const QString str);
25
26 void addKey (QString key);
27 void addValue (QString key, const QVariant value);
28 void setOrder (QString key);
29
30 void select (QString table,
31 /* WHERE */
32 QString key = QString(),
33 QVariant value = QVariant(),
34 QString sign = QString()
35 );
36 void insert (QString table);
37 void update (QString table, /* WHERE */ QString key, QVariant value);
38 void remove (QString table, /* WHERE */ QString key, QVariant value);
39 };
Debugger используется для вывода сообщений и прочих дебагов. в конструкторе инициализируется.
перегрузили метод exec(QString);
24 bool smartQuery::exec (const QString str)
25 {
26 bool result = false;
27
28 keys.clear();
29 values.clear();
30 order.clear();
31
32 dbg->sql(str);
33 //clear ();
34 dbg->sql(str);
35
36 //QSqlQuery::prepare(str);
37 //result = QSqlQuery::exec();
38 result = QSqlQuery::exec(str);
39
40 if (lastError().isValid())
41 {
42 dbg->wrn(lastError().text());
43 result = false;
44 }
45 return result;
46 }
создаем объект класса и вызываем exec.
smartQuery sq;
sq.exec("SELECT * FROM table");
программа слетает segfault-ом при обращении к методам родителя. то есть
32 dbg->sql(str);
33 //clear ();
34 dbg->sql(str);
35
36 //QSqlQuery::prepare(str);
37 //result = QSqlQuery::exec();
38 result = QSqlQuery::exec(str);
слетает на QSqlQuery::exec(str);
если раскоментировать clear() = слетит там.
gdb показывает:
Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread -1225332512 (LWP 16800)]
0xb6b79cf3 in mysql_next_result () from /usr/lib/libmysqlclient_r.so.15