Название: Ошибка сегментации после commit Отправлено: Astrologer от Октябрь 08, 2010, 16:13 Странные дела. Ошибка вылетает в отладчике после закрытия окна:
Код: void QDbfReader::sql_execute(QString query) Стоит закомментить Код: //dbs.transaction(); Код: //dbs.commit(); Код: query = "select * from basetable"; Название: Re: Ошибка сегментации после commit Отправлено: Hellraiser от Октябрь 08, 2010, 16:50 Зачем для select`а использовать транзакцию? Она требуется для случая записи в базу (insert, update, delete).
Название: Re: Ошибка сегментации после commit Отправлено: Whiplash от Октябрь 11, 2010, 09:34 На самом деле, для всего требуется транзакция в Файербёрде (ну, и в интербейсе). И если явно не указать транзакцию, то стартуется неявная транзакция. Драйвер QIBASE не поддерживает вложенные транзакции, кстати. Но тут, ИМХО, проблема не в этом. А в том, что при использовании модели данные, в общем случае, не загружаются все сразу, а поставляются вьюхе по необходимости. Т.е. налицо длинная читающая транзакция. А вы её прерываете коммитом.
Тут, как мне кажется, два решения: 1. Не оборачивать setQuery в явную транзакцию. 2. Попробовать после setQuery выбрать все данные, а вотом уже закоммитить. Т.е. воспользоваться функциями canFetchMore и fetchMore. Ну и, рекомендую перейти на драйвер QFIREBIRD. Пользуясь случаем, выражаю благодарность автору этого замечательного драйвера. Название: Re: Ошибка сегментации после commit Отправлено: Astrologer от Октябрь 12, 2010, 22:55 Спасибо за ответы. Это и есть Firebird драйвер.
Название: Re: Ошибка сегментации после commit Отправлено: Whiplash от Октябрь 13, 2010, 10:59 Спасибо за ответы. Это и есть Firebird драйвер. В твоём коде вот что: Код: QSqlDatabase dbs = QSqlDatabase::addDatabase("QIBASE", "con"); QIBASE - так называется стандартный драйвер от Qt. Есть ещё драйвер QFIREBIRD, основанный на ibpp. |