Russian Qt Forum
Ноябрь 23, 2024, 18:06 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Лень проверять на ошибки каждую команду...  (Прочитано 9321 раз)
White Owl
Гость
« : Февраль 12, 2008, 22:26 »

Имеется приложение со встроенной базой. Структура базы задана жестко и известна еще на момент компиляции. Поэтому в теории ошибок типа "несуществующее поле" никогда появляться не должно. Однако все мы люди, все опечатываемся и на этапе дебага такие ошибки вполне могут быть.... Это было предисловие.
Что хочется? Иметь возможность писать код типа
Код:
QSqlQuery qry;
qry.prepare("insert into table1 (f1, f2, f3) values(?,?,?);
qry.bindValue(0, 1);
...etc
qry.exec();
И не заниматься проверкой qry.lastError() после каждой строки.
QT собрана без исключений, так что try{}catch не применима.
qInstallMsgHandler() использую, он прекрасно ловит проблемы в гуе, но не ловит ошибки происходящие внутри QSql классов.
Идеи?
Записан
Вячеслав
Гость
« Ответ #1 : Февраль 12, 2008, 23:22 »

Цитировать
QT собрана без исключений, так что try{}catch не применима
С какого перепугу ? Ты не должен отдавать exception в главный цикл а так - кидай наздоровье Подмигивающий
Другой вопрос,что qt их не юзает .....
из тупых идей - сделай дефайн типа Q_ASSERT'a которому скармливаешь запрос в качестве параметра и который разворачиваеться в проверку lastError'a .....
PS __FILE__ и __LINE__ хоть старички уже,но временами очччень помогают ошибку найтить Подмигивающий
Записан
WW
Гость
« Ответ #2 : Февраль 13, 2008, 16:59 »

OFFTOP: я дак думаю СУБД - Sybase ASA?
Записан
White Owl
Гость
« Ответ #3 : Февраль 13, 2008, 18:21 »

2WW: Не угадал. В данную секунду SQLite. ASA все таки коммерческий продукт и в GPL программке ее использовать не очень хорошо... Но интуиция тебя не обманывает Улыбающийся

2Вячеслав: мммм.... Q_ASSERT? нууу.... в принципе можно сделать примерно так:
Код:
#define CHECK_QUERY(qry) { \
      if ((qry).lastError().number()!=QSqlError::NoError)  \
            qWarning("%s:%d %s", __FILE__, __LINE__, (qry).lastError().text().toLocal8Bit().constData()); \
     }

qry.prepare("insert into table1 (f1, f2, f3) values(?,?,?);
CHECK_QUERY(qry);
qry.bindValue(0,1);
CHECK_QUERY(qry);
qry.exec();
CHECK_QUERY(qry);
Но если честно, мне это не очень нравится. Лучше уж тогда отнаследовать от QSqlQuery свой собственный класс и в нем делать все что нужно....

В идеале, мне хотелось бы иметь нечто подобное перловому DBD, там просто передаешь в команду создания коннекта параметр PrintError=>1 и каждый запрос к базе на который сервер ругнулся будет выкидывать текст ошибки в stderr, скажешь ему PrintError=>0 и stderr будет чист. А нормальная обработка ошибок будет работать всегда.
Записан
Вячеслав
Гость
« Ответ #4 : Февраль 13, 2008, 22:13 »

ну таки сам себе ответил Подмигивающий Я почти не пользую Qt-шный sql модуль - мне он не подходит из-за отсутствия поддержки параметров транзакций , поэтому с подобной проблемой не столкнулся (еще) ....Хотя меня тоже бесит необходимость тупых проверок на каждом шаге Грустный
ЗЫ в нашем случае - приходит злой exception Подмигивающий
PPS а чего sqLite  а не mysql-emb или fb-emb ? последний и sp с тригерами держит Подмигивающий
Записан
White Owl
Гость
« Ответ #5 : Февраль 14, 2008, 00:59 »

SQLite'а пока хватает. Планируемые объемы от десяти до четырех тысяч строк на каждую из десятка таблиц Улыбающийся Может потом и перейду на что-нибудь более мощное. Но пока нужды нет.
Записан
Krow
Гость
« Ответ #6 : Февраль 19, 2008, 14:04 »

Не хочу открывать новую тему, думаю может здесь подскажите.
Я использую на данный момент sqlite, но её возможностей щас уже мало. много слышал про MySQL embedded и Firebird embedded, но никак не могу их найти. где скачать? у интербейса до слиянием с файрбёрдом был проект yaffil.em. а про мускул ничего не знаю.
как это всё будет на линуксе работать, тоже не представляю себе. может кто подскажет что, или ресурс?
Записан
ритт
Гость
« Ответ #7 : Февраль 19, 2008, 16:25 »

воспользуйся поиском по форуму
сборка со встроенным птицом вообще никаких проблем не несёт, встроенный мускуль нужно слегка обнаждачить
Записан
Krow
Гость
« Ответ #8 : Февраль 19, 2008, 17:15 »

воспользуйся поиском по форуму
сборка со встроенным птицом вообще никаких проблем не несёт, встроенный мускуль нужно слегка обнаждачить
пользовался, не нашёл информации. если есть я ж попросил показать ресурс.
а что насчёт обнаждачить то для того чтобы брать в руки напильник нужно знать что делать, а яхз откуда начать.
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #9 : Февраль 19, 2008, 17:40 »

http://switch.dl.sourceforge.net/sourceforge/firebird/Firebird-2.1.0.17735_0_Win32.exe
http://ru.wikipedia.org/wiki/Firebird
Есть вещь такая - www.google.com
« Последнее редактирование: Февраль 19, 2008, 17:43 от panter_dsd » Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Krow
Гость
« Ответ #10 : Февраль 19, 2008, 18:07 »

блин, чего то туплю. фаер нашёл,
ещё один тупой вопрос. для линукса вообще embedded версию сделать можно или всё таки это тока для винды?
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #11 : Февраль 19, 2008, 19:01 »

Что только для винды? Кутя с птицей собираются под Линем намного легче, чем под маздаем.
Только нужно source птицы качать и собирать.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Krow
Гость
« Ответ #12 : Февраль 19, 2008, 20:08 »

имею ввиду embedded версию птицы. (типа как склайт). я так понимаю что в лине только устанавливать сервер птицы? собрать кути с поддержкой птицы смогу.
Записан
Tonal
Гость
« Ответ #13 : Февраль 20, 2008, 08:36 »

Для птицы embedded есть под все платформы.
Записан
ритт
Гость
« Ответ #14 : Февраль 20, 2008, 15:19 »

для мускуля под винь и линь точно
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.243 секунд. Запросов: 23.