Russian Qt Forum
Февраль 05, 2012, 21:25
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Базы данных
(Модератор:
Sergeich
) >
Транзакции Interbase
Страниц: [
1
]
2
3
...
12
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Транзакции Interbase (Прочитано 24337 раз)
xakpc
Гость
Транзакции Interbase
«
:
Февраль 05, 2009, 18:29 »
Здрасте всем.
Можно ли как-нибудь запустить несколько транзакций для Interbase на Qt? Очень хочется мне читающую и пишущую транзакции. А еще хочется установить уровень изолированности для транзакций, это возможно в Qt?
Может быть какие-нибудь плагины..
Записан
Пантер
Administrator
Джедай : наставник для всех
Offline
Сообщений: 3840
Жаждущий знаний
Re: Транзакции Interbase
«
Ответ #1 :
Февраль 05, 2009, 19:15 »
Стандартный плагин позволяет только одну транзакцию. Можно напрямую исходники огнептица подключать, но тогда придется много доков читать.
Или для каждой транзакции свое подключение.
Записан
1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
С уважением.
Пантер.
vipet
Крякер
Offline
Сообщений: 362
Re: Транзакции Interbase
«
Ответ #2 :
Февраль 06, 2009, 00:12 »
Рекоммендую либу ibpp
(
www.ipbb.org
)
(
http://www.ibpp.org/
)вместо ibase. Разобраться с ней просто.
На базе ibpp я даже написал qt-шные классы для БД, транзакций, запросов, полей (во многом схожие с VCL-овыми, мне нравилось как дельфи с БД работает), а также моделей и проч. (Но по опр. причинам поделиться этим кодом не могу.)
«
Последнее редактирование: Февраль 06, 2009, 12:10 от pastor
»
Записан
Константин
Administrator
Джедай : наставник для всех
Offline
Сообщений: 2575
Re: Транзакции Interbase
«
Ответ #3 :
Февраль 06, 2009, 01:01 »
http://www.ipbb.org/
- обалденный сайтик...где-то я уже видел такое оформление
vipet, совсем никак не можешь поделиться этим кодом? а то была задумка сделать подобную приблуду с целью упрощения жизни - раз; и выявления слабых мест в QtSql - два. только пока всё времени на не хватает %(
Записан
4.7
Gentoo ~amd64 / winxpprosp2 / fremantle armel
Qt - Qt Development Frameworks; QT - QuickTime
vipet
Крякер
Offline
Сообщений: 362
Re: Транзакции Interbase
«
Ответ #4 :
Февраль 06, 2009, 06:46 »
Константин
,
сорри,
www.ibpp.org
конечно же
Цитировать
vipet, совсем никак не можешь поделиться этим кодом?
К сожалению нет (специально об этом сразу написал), по крайней мере сейчас. Весь этот код весит порядка 40Kb, немного с одной стороны, а с другой - для всего хватало пока (несколько проектов в течение последнего года)
Записан
Alex03
Крякер
Offline
Сообщений: 369
Re: Транзакции Interbase
«
Ответ #5 :
Февраль 06, 2009, 17:43 »
xakpc
Несколько кривой способ (сам не пробовал):
Создаёшь несколько соединений (баз данных), в каждом своя транзакция.
Я тоже пользовал IBPP, только без всякий обёрток.
Записан
ax
Чайник
Offline
Сообщений: 55
Re: Транзакции Interbase
«
Ответ #6 :
Февраль 09, 2009, 19:12 »
Привет.
Есть свой Qt драйвер под Firebird/Interbase/
Писал с использованием IBPP. ( у меня IBPP 2.5.2.0 )
Можно указывать кодировку базы
Код:
db.setConnectOptions("CHARSET=WIN1251");
Корректная работа с BLOB.
Позволяет указывать тип транзакции.
Код:
#define TRANSACTION(x) (QSqlDatabase::database().driver()->setProperty("Transaction",(x)))
#define TRANS_SELECT "TAM=amRead, TIL=ilReadCommitted, TLR=lrNoWait, TFF=0"
#define TRANS_UPDATE "TAM=amWrite, TIL=ilConcurrency, TLR=lrNoWait, TFF=0"
#define TRANS_REPORT "TAM=amRead, TIL=ilConcurrency, TLR=lrNoWait, TFF=0"
#define TRANS_DEFAULT "TAM=amWrite, TIL=ilConcurrency, TLR=lrWait, TFF=0"
// .............
TRANSACTION(TRANS_SELECT);
QSqlQuery query.prepare(".........
можно через один коннект открывать несколько транзакций.
....
Говори куда положить или закину в google code
Записан
lit-uriy
Джедай : наставник для всех
Offline
Сообщений: 3293
Re: Транзакции Interbase
«
Ответ #7 :
Февраль 09, 2009, 19:19 »
ты главное закидывай, а уж мы скачаем.
П.С. а события (уведомления) БД тоже реализованы?
Записан
Юра.
Alex03
Крякер
Offline
Сообщений: 369
Re: Транзакции Interbase
«
Ответ #8 :
Февраль 09, 2009, 20:02 »
Цитата: axax от Февраль 09, 2009, 19:12
Есть свой Qt драйвер под Firebird/Interbase/
Писал с использованием IBPP. ( у меня IBPP 2.5.2.0 )
Можно указывать кодировку базы
Код:
db.setConnectOptions("CHARSET=WIN1251");
Вот это место у тролей вообще смешное. И вся проблема в том что для одной и той же кодировки в Qt и IB/FB используются разные имена.
Если передавать "ISC_DPB_LC_CTYPE=WIN1251" то эту кодировку не знает Qt и драйвер матерится ещё до передачи этого параметра клиенту БД.
Если передавать кудировку которую знает Qt (например "ISC_DPB_LC_CTYPE=Windows-1251"), то эту кодировку не знает клиет БД.
Самое простое добавить WIN1251 алиас на тексткодек, в файле QTDIR\src\corelib\codecs\qsimplecodec.cpp
Второе изменить проверку в драйвере.
Мне нельзя было править исходники Qt и драйвера, поэтому извращнулся таким способом - добавил новый кодек:
Код:
#include <QTextCodec>
class CTextCodecWIN1251 : public QTextCodec
{
private:
QTextCodec *win1251Codec;
public:
CTextCodecWIN1251();
~CTextCodecWIN1251();
virtual QByteArray name() const;
virtual QList<QByteArray> aliases() const;
virtual int mibEnum() const;
protected:
virtual QByteArray convertFromUnicode( const QChar * input, int number, ConverterState * state ) const;
virtual QString convertToUnicode( const char * chars, int len, ConverterState * state ) const;
};
CTextCodecWIN1251::CTextCodecWIN1251()
{
win1251Codec = QTextCodec::codecForName("Windows-1251");
}
CTextCodecWIN1251::~CTextCodecWIN1251()
{
}
QByteArray CTextCodecWIN1251::convertFromUnicode(const QChar * input, int number, ConverterState * state) const
{
if(!win1251Codec)
return QByteArray();
return win1251Codec->fromUnicode(input, number, state);
}
QString CTextCodecWIN1251::convertToUnicode(const char * chars, int len, ConverterState * state) const
{
if(!win1251Codec)
return QString();
return win1251Codec->toUnicode(chars, len, state);
}
QByteArray CTextCodecWIN1251::name() const
{
return QByteArray("WIN1251");
}
QList<QByteArray> CTextCodecWIN1251::aliases() const
{
QList<QByteArray> list;
list << QByteArray("WIN-1251") // Эти алиасы не обязательны
<< QByteArray("CP1251")
<< QByteArray("CP-1251")
<< QByteArray("1251");
return list;
}
int CTextCodecWIN1251::mibEnum() const
{
if(!win1251Codec)
return 0;
return 2251;
}
...
CTextCodecWIN1251 * p = new CTextCodecWIN1251();
...
db.setConnectOptions("ISC_DPB_LC_CTYPE=WIN1251");
Записан
Alex03
Крякер
Offline
Сообщений: 369
Re: Транзакции Interbase
«
Ответ #9 :
Февраль 09, 2009, 20:09 »
Цитата: axax от Февраль 09, 2009, 19:12
Привет.
Есть свой Qt драйвер под Firebird/Interbase/
Писал с использованием IBPP. ( у меня IBPP 2.5.2.0 )
Можно указывать кодировку базы
Корректная работа с BLOB.
Позволяет указывать тип транзакции.
можно через один коннект открывать несколько транзакций.
Говори куда положить или закину в google code
axax
Драйвер несомненно интересен народу.
Что мешает выложить его здесь?
Записан
Константин
Administrator
Джедай : наставник для всех
Offline
Сообщений: 2575
Re: Транзакции Interbase
«
Ответ #10 :
Февраль 09, 2009, 23:35 »
axax, мне кажется, лучше на гуглокод - там и ты владельцем проекта будешь, и любой сможет присоединиться к проекту или форкнуть код.
я знаю по-крайней мере двоих, кому было бы интересно развить сие чудо...
Записан
4.7
Gentoo ~amd64 / winxpprosp2 / fremantle armel
Qt - Qt Development Frameworks; QT - QuickTime
vipet
Крякер
Offline
Сообщений: 362
Re: Транзакции Interbase
«
Ответ #11 :
Февраль 10, 2009, 08:46 »
axax
,
Выкладывай, заценим!
P.S. Почему ibpp 2.5.2.0 - просто так или нет? (Я юзаю 2.5.3.1)
Записан
ax
Чайник
Offline
Сообщений: 55
Re: Транзакции Interbase
«
Ответ #12 :
Февраль 10, 2009, 19:35 »
Всем привет.
Проект на гуглокоде qtfirebirdibppsqldriver
Сейчас исходники закидываю.
>>Можно указывать кодировку базы
>>Код:
>> db.setConnectOptions("CHARSET=WIN1251");
>>Вот это место у тролей вообще смешное. И вся проблема в том что для одной и той же кодировки в Qt и IB/FB используются разные имена.
Дак это , я думаю можно разрулить прям в db.setConnectOptions(...).
>>P.S. Почему ibpp 2.5.2.0 - просто так или нет? (Я юзаю 2.5.3.1)
драйвер писался для проекта два года назад (Firebird 1.5.*). и на тот момент ibpp была текущая
проект сдал и сейчас работаю с другими базами, поэтому библу и сам драйвер не пользую.
Скачаю новую и соберу - думаю проблем не будет.
Работает под Linux и Win. Тестил и на Солярисе.
С Firebird 2.* не гонял, надо попробывать.
....
О. собрался и с 2.5.3.1.
..... и запустился даже
Записан
ax
Чайник
Offline
Сообщений: 55
Re: Транзакции Interbase
«
Ответ #13 :
Февраль 10, 2009, 20:09 »
ок.
Выложил сырцы в svn и скомпиленный под windows Qt 4.4.3 mingw. IBPP 2.5.3.1.
http://code.google.com/p/qtfirebirdibppsqldriver/
По вопросам стучите сюда.
Записан
Константин
Administrator
Джедай : наставник для всех
Offline
Сообщений: 2575
Re: Транзакции Interbase
«
Ответ #14 :
Февраль 10, 2009, 20:15 »
первая закачка - моя
за публикацию отдельное "спасибо"!
Записан
4.7
Gentoo ~amd64 / winxpprosp2 / fremantle armel
Qt - Qt Development Frameworks; QT - QuickTime
Страниц: [
1
]
2
3
...
12
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> Печать
=> Интернационализация, локализация
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
=> Архив
===> Программирование
=====> Python
===> Веб программирование
=====> PHP, PERL, CGI
Загружается...