crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> QSqlQuery не позволяет загружать в БД большие бинарники, =(
Stanislaus
  опции профиля:
сообщение 3.9.2008, 15:54
Сообщение #1


Студент
*

Группа: Новичок
Сообщений: 17
Регистрация: 23.4.2008
Пользователь №: 156

Спасибо сказали: 0 раз(а)




Репутация:   0  


Маленькие файлики записываются без проблем, хотя и подвисает операция вставки секунд на 5...

При попытке записать в БД бинарник большого размера (напр. около 30 мегабайт)...

    q.prepare("select file_share.add_single_file(?, ?, ?, ?, ?, ?, null,?,?);");
    QByteArray ba;
    QFile file(getFilePath());
    if (file.open(QIODevice::ReadOnly)){
        ba = file.readAll();
        file.close();
    }
    q.bindValue(0,ba,QSql::In|QSql::Binary); // Здесь все пучком
    q.bindValue(1,getGroupID());
    if (getInsurer() != 0) q.bindValue(2,getInsurer());
    else q.bindValue(2,QVariant(QVariant::Int));
    q.bindValue(3,getDescription());
    q.bindValue(4,getFileName());
    q.bindValue(5,getWWW());
    q.bindValue(6,getCity());
    q.bindValue(7,mask);
    if (!q.exec()) { // тут виснет секунд на 30 и Unhandled exception at 0x1026f3e0 in project.exe: 0xC0000005: Access violation reading location 0xf272f6c4.
        qDebug() << q.lastError() << q.executedQuery();
        return false;
    }


Далее следует виновник эксепшена...

QString& QString::insert(int i, const QChar *unicode, int size)
{
    if (i < 0 || size <= 0)
        return *this;

    const ushort *s = (const ushort *)unicode;
    if (s >= d->data && s < d->data + d->alloc) {
        // Part of me - take a copy
        ushort *tmp = static_cast<ushort *>(qMalloc(size * sizeof(QChar)));
        memcpy(tmp, s, size * sizeof(QChar));
        insert(i, reinterpret_cast<const QChar *>(tmp), size);
        qFree(tmp);
        return *this;
    }

    expand(qMax(d->size, i) + size - 1);

    ::memmove(d->data + i + size, d->data + i, (d->size - i - size) * sizeof(QChar)); // <--- Эксепшн вылетает во время этой операции
    memcpy(d->data + i, s, size * sizeof(QChar));
    return *this;
}


Подключение к БД
QSqlDatabase db_b = QSqlDatabase::addDatabase("QPSQL", "b"); 
db_b.setHostName("10.10.1.123");
db_b.setPort(5433);
db_b.setDatabaseName("DBName");
db_b.setUserName("user");
db_b.setPassword("password");


Если кто сталкивался, помогите плиз.

Собираю на Microsoft Visual Studion 2008 Express Edition, Qt 4.4.0 Open Source.
Причина редактирования: используйте параметр, code=cpp
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме
- Stanislaus   QSqlQuery не позволяет загружать в БД большие бинарники   3.9.2008, 15:54
- - Litkevich Yuriy   Цитата(Stanislaus @ 3.9.2008, 19:54) При ...   3.9.2008, 16:53
|- - Stanislaus   Цитата(Litkevich Yuriy @ 3.9.2008, 17:53)...   3.9.2008, 17:30
- - Litkevich Yuriy   вобще непонятно причем здесь QString. Вдь ты испол...   3.9.2008, 17:37
|- - Stanislaus   Цитата(Litkevich Yuriy @ 3.9.2008, 18:32)...   3.9.2008, 17:43
- - Litkevich Yuriy   И к стати, ты не пробывал вызвать такую функцию: d...   3.9.2008, 17:45
|- - Stanislaus   Цитата(Litkevich Yuriy @ 3.9.2008, 18:45)...   3.9.2008, 18:10
- - ViGOur   Цитата(Stanislaus @ 3.9.2008, 16:54) ...   3.9.2008, 18:20
- - Litkevich Yuriy   Цитата(ViGOur @ 3.9.2008, 22:20) Что-то м...   3.9.2008, 18:41
- - Tonal   Если верить этому коду, то Qt вместо параметров яв...   4.9.2008, 11:28
- - Litkevich Yuriy   Цитата(Tonal @ 4.9.2008, 15:28) Если это ...   4.9.2008, 12:29
- - Digger86   Добрый день! столкнулся с полностью аналогично...   30.11.2012, 15:31
- - RazrFalcon   Может стоит обовиться? (и не поднимать темы 4-х ле...   30.11.2012, 23:23
- - Digger86   к сожалению использование Qt 4.6.4 требование зака...   6.12.2012, 17:36
- - Litkevich Yuriy   Цитата(Digger86 @ 6.12.2012, 19:36) сдела...   7.12.2012, 9:59
- - Digger86   по сути сделал как в примере Example 30-3 http://w...   14.12.2012, 11:55


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


5 чел. читают эту тему (гостей: 5, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 23.11.2024, 6:35