Russian Qt Forum

Qt => Базы данных => Тема начата: Примерный ученик от Апрель 05, 2009, 23:19



Название: Одновременное подключение
Отправлено: Примерный ученик от Апрель 05, 2009, 23:19
Необходимо перегнать с некоторым преобразованием данные из БД PARADOX в БД PostgreSQL.
Подключаюсь к Paradox через QODBC3, а к PostgreSQL через QPSQL7.
Программа валится после установления связи с БД и попытки прочитать и записать.
WinXP, QT3.3.8, PostgreSQL 8.1.

Такая работа с БД допустима?


Название: Re: Одновременное подключение
Отправлено: UVV от Апрель 06, 2009, 04:24
Программа валится после установления связи с БД и попытки прочитать и записать.
Это конечно всё объясняет, но всё-таки хотелось бы увидеть код...


Название: Re: Одновременное подключение
Отправлено: BaltikS от Апрель 06, 2009, 06:44
Приходилось проделывать аналогичные действие, всё перегонялось и ничего не падало... Правда Qt был 3.3.6... но советую лучше экспортировать в скрипт, а потом этот скрипт импортировать, будет просто намного быстрее....:)


Название: Re: Одновременное подключение
Отправлено: Примерный ученик от Апрель 06, 2009, 08:18
Программа валится после установления связи с БД и попытки прочитать и записать.
Это конечно всё объясняет, но всё-таки хотелось бы увидеть код...

Код
C++ (Qt)
QSqlDatabase* MyPRDX = QSqlDatabase::addDatabase("QODBC3");
QSqlDatabase* MyPSQL = QSqlDatabase::addDatabase("QPSQL7");
 
// подключение проходит успешно
// но потом
QSqlQuery sql(MyPRDX);
sql.exec("SELECT * FROM test");
while(sql.next())
{
QSqlCursor sCur("test",true,MyPSQL);
QSqlQuery sc(MyPSQL);  // index
QSqlRecord *buffer = sCur.primeInsert();  // запись для вставки
sc.exec("select nextval('_test')");
sc.next();
buffer->setValue("ind",sc.value(0).toInt());
buffer->setValue("name_",sql.value(0).toString());
buffer->setValue("types",sql.value(1).toInt());
buffer->setValue("numb",sql.value(3).toInt());
i=sCur.insert();
if (i==0) // если не получилось
{
}
}
// получаю исключение типа

Unhandled exception at 0x39d81467 in imp_prdx.exe: 0xC0000005: Access violation reading location 0xabababb7.


Название: Re: Одновременное подключение
Отправлено: crossly от Апрель 06, 2009, 09:56
а мот дать соединениям по имени...??


Название: Re: Одновременное подключение
Отправлено: lit-uriy от Апрель 06, 2009, 10:12
я с тройкой не работал, но если считать, что в ней как и в 4-ке, то:
QSqlDatabase::addDatabase("QODBC3"); // добавили соединение с одним драйвером
QSqlDatabase::addDatabase("QPSQL7"); // прибили предыдущее и создали на его месте новое.


Название: Re: Одновременное подключение
Отправлено: BaltikS от Апрель 06, 2009, 11:29
+1 нет псевдонима


Название: Re: Одновременное подключение
Отправлено: Примерный ученик от Апрель 06, 2009, 14:58
Да уж,лопухнулся, все ясно, большое спасибо... ;D