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

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

Страниц: 1 [2] 3 4 ... 14   Вниз
  Печать  
Автор Тема: Транзакции Interbase  (Прочитано 150613 раз)
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


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

тогда я нумер два
Записан

Юра.
vipet
Бывалый
*****
Offline Offline

Сообщений: 452


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

Третий не знаю кто, а я - четвертый. Щяс заценим Улыбающийся
Записан
vipet
Бывалый
*****
Offline Offline

Сообщений: 452


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

Вобщем, что касается взаимодействия с IBPP, то у меня практически всё то же самое. (Это и немудрено, т.к. как я грил раньше, работать с либой просто http://www.ibpp.org/reference )

Отличие пока увидел при чтении блоба: можно читать максимальными кусками (используя void Blob::Info(int* size, int* largest, int* segments), а не по килобайту

у ахах'а:
Код:
                IBPP::Blob l_Blob = IBPP::BlobFactory(rp->iDb, rp->iTr);
                rp->iSt->Get(i, l_Blob);

                QByteArray l_QBlob;

                l_Blob->Open();
                int l_Read, l_Offset = 0;
                char buffer[1024];
                while ((l_Read = l_Blob->Read(buffer, 1024)))
                {
                    l_QBlob.resize(l_QBlob.size() + l_Read);
                    memcpy(l_QBlob.data() + l_Offset, buffer, l_Read);
                    l_Offset += l_Read;
                }
                l_Blob->Close();

                row[idx] = l_QBlob;
                break;

у меня:
Код:
		IBPP::Blob blob = IBPP::BlobFactory(m_Database->getIBPPDB(),
m_Transaction->getIBPPTransaction());

m_Statement->Get(FieldNum, blob);
blob->Open();

int bytesTotal;
int largestChunkSize;
int segmentsTotal;
int chunkSize;
int bytesRead = 0;

blob->Info(&bytesTotal, &largestChunkSize, &segmentsTotal);
data->resize(bytesTotal);

do
{
chunkSize = (bytesTotal - bytesRead) < largestChunkSize ?
(bytesTotal - bytesRead) : largestChunkSize;
bytesRead = blob->Read((void*)data->data(), chunkSize);
} while (bytesTotal != bytesRead);

blob->Close();

Также запись в блоб я сделал через Blob::Write(), а не через Statement::Set(). Не знаю лучше это или хуже (на момент написания просто не заметил, что блоб писать можно через Statement::Set()). В Blob::Write() можно писать чанками до 32-х килобайт (ограничение фиребёрда)
Записан
ax
Чайник
*
Offline Offline

Сообщений: 60


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

Привет.

Изменил чуть проект для сбоки с компиляторами Microsoft и выложил собранный драйвер под VC 6.0 и 2008.
vipet. Твой вариант с блобом надо пробывать. Насколько помню был нюанс под linux.
http://code.google.com/p/qtfirebirdibppsqldriver
Записан
c00ker
Гость
« Ответ #19 : Февраль 18, 2009, 13:49 »

Спасибо за выложенный труд, я уже с Firebird на последних версиях Qt затрахался. До этого пользовался 4.2.2 с QODBC, кодировка базы CP1251 и все было ок. На последних версиях Qt в этом же проекте при вводе данных все преобразуется в уникод, хз в чем проблема, может и в драйвере ODBC птицы.

Попробовал этот драйвер, заметил, что numRowsAffected возвращает все время -1. Версия Firebird-2.1.1.17910-0, Qt4.4.3. Чуть поменял кусок в драйвере (закомментил две строчки), заработало вроде Улыбающийся

Код:
int QFBResult::numRowsAffected()
{
    int nra = -1;
   
    //if (isSelect())
     //   return nra;

    try
    {
        nra = rp->iSt->AffectedRows();
    }
    catch (IBPP::Exception& e)
    {}
    return nra;
}
« Последнее редактирование: Февраль 18, 2009, 14:16 от c00ker » Записан
ритт
Гость
« Ответ #20 : Февраль 18, 2009, 14:48 »

c00ker, зачем закомментировал? там всё правильно Улыбающийся
numRowsAffected должен возвращать -1 для селектов. а ты, похоже, говоришь про querySize
Записан
c00ker
Гость
« Ответ #21 : Февраль 18, 2009, 15:17 »

Ну да, похоже нужно было комментить ф-ию QFBResult::size() Улыбающийся
Код в size():

Код:
int QFBResult::size()
{
    int nra = -1;
    return nra;
...
Записан
vipet
Бывалый
*****
Offline Offline

Сообщений: 452


Просмотр профиля
« Ответ #22 : Февраль 18, 2009, 18:07 »

Немного оффтопа:

А разве Firebird возвращает кол-во строк для SELECT-запроса? Т.е. разве можно узнать кол-во записей, пока все их не считали?
Записан
Dimich
Гость
« Ответ #23 : Май 09, 2009, 18:21 »

axax,
можете ли перелицензировать qtfirebirdibppsqldriver под LGPL или двойной LGPL/GPL лицензией?
Записан
gigabyte
Гость
« Ответ #24 : Январь 21, 2010, 10:36 »

Уже достаточно давно пользуюсь Qt IPBB Sql Driver ( http://code.google.com/p/qtfirebirdibppsqldriver/ ). Постил на его страчинчку несколько предложений, и не я один, но вижу что давно не было ответов и работ. Нашел здесь на форуме сообщение чтоб по вопроам обращатся сюда. Вот и обращаюсь. Может кто подскажет судьбу этого проекта, он жив или уже нет?
Записан
ax
Чайник
*
Offline Offline

Сообщений: 60


Просмотр профиля
« Ответ #25 : Январь 21, 2010, 11:29 »

Уже достаточно давно пользуюсь Qt IPBB Sql Driver ( http://code.google.com/p/qtfirebirdibppsqldriver/ ). Постил на его страчинчку несколько предложений, и не я один, но вижу что давно не было ответов и работ. Нашел здесь на форуме сообщение чтоб по вопроам обращатся сюда. Вот и обращаюсь. Может кто подскажет судьбу этого проекта, он жив или уже нет?

Проект в зимней спячке Улыбающийся
Постараюсь до понедельника добраться.
Спасибо за предложения.
По обновлению напишу сюда.

Записан
gigabyte
Гость
« Ответ #26 : Январь 21, 2010, 12:55 »

если надо я тоже мог бы подключится и немного попостить туда на google code
Записан
ax
Чайник
*
Offline Offline

Сообщений: 60


Просмотр профиля
« Ответ #27 : Январь 25, 2010, 19:13 »

Свежая версия Qt SQL driver for Firebird with IBPP library.
http://code.google.com/p/qtfirebirdibppsqldriver

Изменения в версии 0.14
- fixed ASSERTION in qsqlcachedresult when calling stored procedure (Issue 1)
- fixed bug when blob contains '\0' char (Issue 2)
+ Add support of firebird ROLE (Issue 3)
+ change in IbppDriver.pro for  support debug and release builds (Issue 4)
- fixed bug when only "NONE" and "WIN1251" charset is set (Issue 5)
- compile warnings

Внимание: кодировка по умолчанию изменена на "NONE"

Также свежие сборки под Qt 4.6.1
gcc 4.4 http://qtfirebirdibppsqldriver.googlecode.com/files/qsqlfb_gcc_4.6.1.zip
MS Visual C++ 2008 http://qtfirebirdibppsqldriver.googlecode.com/files/qsqlfb_2008_4.6.1.zip

Спасибо за пожелания и исправления. Новые принимаются на http://code.google.com/p/qtfirebirdibppsqldriver/issues/list и на форуме.

P.S.
если надо я тоже мог бы подключится и немного попостить туда на google code
- написал в личку
« Последнее редактирование: Январь 25, 2010, 23:47 от axax » Записан
xokc
Птица говорун
*****
Offline Offline

Сообщений: 976



Просмотр профиля
« Ответ #28 : Январь 25, 2010, 19:58 »

А ссылки на gcc и msvc версии одинаковы случайно или так и должно быть?
Записан
ax
Чайник
*
Offline Offline

Сообщений: 60


Просмотр профиля
« Ответ #29 : Январь 25, 2010, 23:48 »

А ссылки на gcc и msvc версии одинаковы случайно или так и должно быть?
Упс...
Исправил.
Спасибо.
Записан
Страниц: 1 [2] 3 4 ... 14   Вверх
  Печать  
 
Перейти в:  


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