Маленькие файлики записываются без проблем, хотя и подвисает операция вставки секунд на 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