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

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

Страниц: [1] 2 3 ... 14   Вниз
  Печать  
Автор Тема: Транзакции Interbase  (Прочитано 150706 раз)
xakpc
Гость
« : Февраль 05, 2009, 18:29 »

Здрасте всем.
Можно ли как-нибудь запустить несколько транзакций для Interbase на Qt? Очень хочется мне читающую и пишущую транзакции. А еще хочется установить уровень изолированности для транзакций, это возможно в Qt?

Может быть какие-нибудь плагины..
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


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


Просмотр профиля WWW
« Ответ #1 : Февраль 05, 2009, 19:15 »

Стандартный плагин позволяет только одну транзакцию. Можно напрямую исходники огнептица подключать, но тогда придется много доков читать. Улыбающийся Или для каждой транзакции свое подключение.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
vipet
Бывалый
*****
Offline Offline

Сообщений: 452


Просмотр профиля
« Ответ #2 : Февраль 06, 2009, 00:12 »

Рекоммендую либу ibpp (www.ipbb.org) (http://www.ibpp.org/ )вместо ibase. Разобраться с ней просто.

На базе ibpp я даже написал qt-шные классы для БД, транзакций, запросов, полей (во многом схожие с VCL-овыми, мне нравилось как дельфи с БД работает), а также моделей и проч. (Но по опр. причинам поделиться этим кодом не могу.)
« Последнее редактирование: Февраль 06, 2009, 12:10 от pastor » Записан
ритт
Гость
« Ответ #3 : Февраль 06, 2009, 01:01 »

http://www.ipbb.org/ - обалденный сайтик...где-то я уже видел такое оформление Улыбающийся

vipet, совсем никак не можешь поделиться этим кодом? а то была задумка сделать подобную приблуду с целью упрощения жизни - раз; и выявления слабых мест в QtSql - два. только пока всё времени на не хватает %(
Записан
vipet
Бывалый
*****
Offline Offline

Сообщений: 452


Просмотр профиля
« Ответ #4 : Февраль 06, 2009, 06:46 »

Константин,
сорри, www.ibpp.org конечно же Улыбающийся

Цитировать
vipet, совсем никак не можешь поделиться этим кодом?
К сожалению нет (специально об этом сразу написал), по крайней мере сейчас. Весь этот код весит порядка 40Kb, немного с одной стороны, а с другой - для всего хватало пока (несколько проектов в течение последнего года)

Записан
Alex03
Гость
« Ответ #5 : Февраль 06, 2009, 17:43 »

xakpc Несколько кривой способ (сам не пробовал):
Создаёшь несколько соединений (баз данных), в каждом своя транзакция.

Я тоже пользовал IBPP, только без всякий обёрток.
Записан
ax
Чайник
*
Offline Offline

Сообщений: 60


Просмотр профиля
« Ответ #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 Offline

Сообщений: 3880


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

ты главное закидывай, а уж мы скачаем.

П.С. а события (уведомления) БД тоже реализованы?
Записан

Юра.
Alex03
Гость
« Ответ #8 : Февраль 09, 2009, 20:02 »

Есть свой 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
Гость
« Ответ #9 : Февраль 09, 2009, 20:09 »

Привет.
Есть свой Qt драйвер под Firebird/Interbase/
Писал с использованием IBPP. ( у меня IBPP 2.5.2.0 )
Можно указывать кодировку базы
Корректная работа с BLOB.
Позволяет указывать тип транзакции.
можно через один коннект открывать несколько транзакций.
Говори куда положить или закину в google code
axax Драйвер несомненно интересен народу.
Что мешает выложить его здесь?
Записан
ритт
Гость
« Ответ #10 : Февраль 09, 2009, 23:35 »

axax, мне кажется, лучше на гуглокод - там и ты владельцем проекта будешь, и любой сможет присоединиться к проекту или форкнуть код.
я знаю по-крайней мере двоих, кому было бы интересно развить сие чудо...
Записан
vipet
Бывалый
*****
Offline Offline

Сообщений: 452


Просмотр профиля
« Ответ #11 : Февраль 10, 2009, 08:46 »

axax,

Выкладывай, заценим!

P.S. Почему ibpp 2.5.2.0 - просто так или нет? (Я юзаю 2.5.3.1)
Записан
ax
Чайник
*
Offline Offline

Сообщений: 60


Просмотр профиля
« Ответ #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 Offline

Сообщений: 60


Просмотр профиля
« Ответ #13 : Февраль 10, 2009, 20:09 »

ок.
Выложил сырцы в svn и скомпиленный под windows Qt 4.4.3 mingw. IBPP 2.5.3.1.
http://code.google.com/p/qtfirebirdibppsqldriver/

По вопросам стучите сюда.
Записан
ритт
Гость
« Ответ #14 : Февраль 10, 2009, 20:15 »

первая закачка - моя Улыбающийся

за публикацию отдельное "спасибо"!
Записан
Страниц: [1] 2 3 ... 14   Вверх
  Печать  
 
Перейти в:  


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