Russian Qt Forum

Qt => Базы данных => Тема начата: __Heaven__ от Август 17, 2015, 18:00



Название: Подключение к БД и постобработка данных
Отправлено: __Heaven__ от Август 17, 2015, 18:00
Привет, друзья!
Не могу подключиться к базе accdb...
Прошу помочь, ибо гугл не помог.
Код:
    QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
    db.setDatabaseName("DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};FIL={MS Access};DBQ=D:/brut/base.accdb");
    if(db.open())
        qDebug() << "Sucsess";
Успеха не выдаёт


Название: Re: Как подключиться к БД access 2010
Отправлено: Bepec от Август 17, 2015, 21:48
"DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};FIL={MS Access};DBQ=\\\\192.168.0.1\\db.accdb;"

Работающая строка.
А вы слеши поправьте к примеру,


Название: Re: Как подключиться к БД access 2010
Отправлено: __Heaven__ от Август 18, 2015, 07:38
Пробовал обращать... не помогло. Сейчас снова буду танцы танцевать: )


Название: Re: Как подключиться к БД access 2010
Отправлено: __Heaven__ от Август 18, 2015, 07:52
Я бы хотел еще узнать, реально ли в таблицу будет добавлять к примеру, около 250 гб информации? Планируется иметь около 10 столбцов чисел двойной точности. Добавлять хотелось бы не через запросы, а напрямую. Знаю, что на vba это возможно.


Название: Re: Как подключиться к БД access 2010
Отправлено: Пантер от Август 18, 2015, 08:50
Аксес - говно его лучше совсем не использовать. Заменить не вариант?


Название: Re: Как подключиться к БД access 2010
Отправлено: __Heaven__ от Август 18, 2015, 09:13
Задача такая:
Однократно выгрузить из программы результаты расчёта (подробные) и передать в excel для дальнейшей обработки. Если я использую формат csv, то винчестер захламляется со скоростью света, выгрузка идёт медленно и, мне кажется, что моя 32 разрядная версия excel (другую мне не дадут) не потянет все данные сразу, точно придётся бить на группы.
В связи с этим возникла идея использовать аксес для хранения значений, их обработки и выгрузки в эксель


Название: Re: Как подключиться к БД access 2010
Отправлено: __Heaven__ от Август 18, 2015, 09:29
Я так понимаю, что драйвер ODBC это некая служба или прога в винде... Как можно определить, работает ли она?


Название: Re: Как подключиться к БД access 2010
Отправлено: __Heaven__ от Август 18, 2015, 09:33
Или может в самом аксесе нужно какую-то настройку дёрнуть для доступа?


Название: Re: Как подключиться к БД access 2010
Отправлено: __Heaven__ от Август 18, 2015, 09:41
Я догадался вывести lastError
Цитировать
[Microsoft][Диспетчер драйверов ODBC] Источник данных не найден и не указан драйвер, используемый по умолчанию QODBC3: Unable to connect


Название: Re: Как подключиться к БД access 2010
Отправлено: Пантер от Август 18, 2015, 09:52
Выгружай в dbf, его эксель понимает. Или в любой другой формат.


Название: Re: Как подключиться к БД access 2010
Отправлено: __Heaven__ от Август 18, 2015, 10:06
Зашёл в инструмент редактирования настроек ODBC без прав админа. При тыке на настройки выдаётся 2 сообщения, см. аттач. C dbf я не знаком. Как его создать и начать выгружать?


Название: Re: Как подключиться к БД access 2010
Отправлено: Пантер от Август 18, 2015, 10:15
DBF достаточно простой формат с открытыми спеками. Еще есть вариант выгрузить в SQLite и его открыть в excel (вроде, это возможно). С access лучше не связываться.


Название: Re: Как подключиться к БД access 2010
Отправлено: Bepec от Август 18, 2015, 11:12
Access действительно очень "специфичный" и выгрузка в него гигабайт информации кажется мне неосуществимой.


Название: Re: Как подключиться к БД access 2010
Отправлено: __Heaven__ от Август 18, 2015, 11:39
У меня drivers() выдаёт только SQLite. Так понимаю, что odbc не идёт в комплекте с установщиком qt для windows... Пересобирать?


Название: Re: Как подключиться к БД access 2010
Отправлено: kai666_73 от Август 18, 2015, 11:55
У меня drivers() выдаёт только SQLite. Так понимаю, что odbc не идёт в комплекте с установщиком qt для windows... Пересобирать?
Весь Qt не обязательно, достаточно только QODBC драйвер плагином.
Но, как уже советовали, с аксессом едва ли стоит связываться...


Название: Re: Как подключиться к БД access 2010
Отправлено: Пантер от Август 18, 2015, 12:08
Кстати, помимо акцеса, сам ODBC тормозной, поэтому свои гигабайты ты будешь оооочень долго слать. Дольше, чем в csv.


Название: Re: Как подключиться к БД access 2010
Отправлено: __Heaven__ от Август 18, 2015, 12:19
Кстати, помимо акцеса, сам ODBC тормозной, поэтому свои гигабайты ты будешь оооочень долго слать. Дольше, чем в csv.
Надо было с этого начать))) Ладно, ещё подумаю, как выкрутиться из своей задачи....


Название: Re: Как подключиться к БД access 2010
Отправлено: Пантер от Август 18, 2015, 12:25
Данные какого вида? Самое универсальное (мне так кажется) будет выгрузить все в csv, а его уже перегнать в другой формат, который понимает excel. Перегонялок должно быть много, ибо формат простой и многими поддерживается.


Название: Re: Как подключиться к БД access 2010
Отправлено: __Heaven__ от Август 18, 2015, 12:46
Данные вида
double, double, double, double, double, double, double, double, double


Название: Re: Как подключиться к БД access 2010
Отправлено: __Heaven__ от Август 18, 2015, 12:47
Мне просто не хватит винчестера на всё при выгрузке csv


Название: Re: Как подключиться к БД access 2010
Отправлено: Пантер от Август 18, 2015, 12:48
Тогда cvs отлично подходит. Ничего экранировать не надо. :) А там берешь конвертер cvs -> xls (уверен, что он есть) и открываешь в ёкселе.


Название: Re: Как подключиться к БД access 2010
Отправлено: Пантер от Август 18, 2015, 12:49
Мне просто не хватит винчестера на всё при выгрузке csv
А с чего ты взял, что акцесс это все сожмет? О_о


Название: Re: Как подключиться к БД access 2010
Отправлено: __Heaven__ от Август 18, 2015, 13:02
Ну, расчёт на то, что дабл занимает 8 байт, а текст ... хз.
Вообще, да. В тексте он будет занимать по 3-5 символов.

Хочу ещё попробовать помучить sqlite. Всё-таки хочется постобработки.


Название: Re: Как подключиться к БД access 2010
Отправлено: __Heaven__ от Август 18, 2015, 14:08
Дабы темы не плодить, тут поинтересуюсь.
Я создал базу sqlite и смог к ней подсоединиться. В базе уже есть таблица с 2 строками.
Как мне пройтись по всем строчкам и посмотреть их значения? Как мне добавлять значения в таблицу? Запросы писать не хотелось бы, ибо долго выполняться они будут.
На данный момент получил
Код:
QSqlRecord rec = db.record("Composition");
Но value этой записи всегда равны 0. По факту же 1 2 3 4 5.. Предполагаю, что я в шапке...


Название: Re: Как подключиться к БД access 2010
Отправлено: Пантер от Август 18, 2015, 14:16
Юзай модельки. QSqlTableModel.


Название: Re: Как подключиться к БД access 2010
Отправлено: __Heaven__ от Август 18, 2015, 14:25
Оооо! Взлетели :)
Спасибо


Название: Re: Как подключиться к БД access 2010
Отправлено: __Heaven__ от Август 20, 2015, 10:02
А в каком порядке sqlite хранит байты? Меня интересует little-endian


Название: Re: Как подключиться к БД access 2010
Отправлено: Пантер от Август 20, 2015, 10:04
А тебе какая разница, как они хранятся в БД?


Название: Re: Как подключиться к БД access 2010
Отправлено: __Heaven__ от Август 20, 2015, 10:42
Я получил файл в 85 Гб.
Хочу теперь его исследовать ручками на предмет всяких зависимостей.
Пользуюсь портативной версией программы SQLite Database Browser. Очень долго думает при открытии файла. Запросы пока ещё не делал, но боюсь представить...
Подозреваю, что данные хранятся в big. И чтобы провернуть 85 Гб в little потребуется не мало усилий.


Название: Re: Подключение к БД и постобработка данных
Отправлено: Пантер от Август 20, 2015, 10:55
Попробуй из Кьюта открыть базу и поделать запросы.


Название: Re: Как подключиться к БД access 2010
Отправлено: Old от Август 20, 2015, 11:21
Я получил файл в 85 Гб.
Взяли бы вы сразу БД по серьезней. :)
IMHO, sqlite не очень подходит для таких объемов.


Название: Re: Подключение к БД и постобработка данных
Отправлено: Bepec от Август 20, 2015, 11:30
sqlite все таблицы кроме BLOB в стрингах хранит, экономия сомнительная.
Переводите всё в бинарник.


Название: Re: Подключение к БД и постобработка данных
Отправлено: __Heaven__ от Август 20, 2015, 11:43
Спасибо за советы - буду думать


Название: Re: Подключение к БД и постобработка данных
Отправлено: __Heaven__ от Август 20, 2015, 12:39
sqlite все таблицы кроме BLOB в стрингах хранит, экономия сомнительная.
Переводите всё в бинарник.
Я сгенерировал небольшую таблицу, состоящую из double и открыл через текстовый просмотрщик. Своих цифр в виде текста я не нашёл.


Название: Re: Подключение к БД и постобработка данных
Отправлено: __Heaven__ от Август 20, 2015, 12:45
Взяли бы вы сразу БД по серьезней. :)
К сожалению, прав админа у меня нет и приходится выкручиваться как есть.
Задачей является выгрузка информации и передача её другому сотруднику для обработки. С sql он не знаком.
Если брать БД серьёзнее, то её нужно поставить на 2 pc (прав нет, но можно портабл, например psql), настраивать сеть я тоже не имею прав, а потом нужен интерфейс для вывода данных и применения фильтров, основной это ввод диапазона значений.


Название: Re: Подключение к БД и постобработка данных
Отправлено: Old от Август 20, 2015, 12:53
К сожалению, прав админа у меня нет и приходится выкручиваться как есть.
Как-то странно. Вы там играетесь или задачу решаете? :)
Если второе, то админ должен был сам поднять сервер БД, предоставить вам с коллегой к нему доступ, что бы ваша программа сохраняла данные, а ваш коллега в тоже время их мог обрабатывать.
А сейчас вы как эти файлы будете передавать? По сети или флешками? А если флешки начнут дохнуть вместе с данными? Или для вас полученные данные не важны? :)


Название: Re: Подключение к БД и постобработка данных
Отправлено: __Heaven__ от Август 20, 2015, 13:02
Согласен - маразм :) но проще так, чем доказывать, что мне нужна БД через 8 инстанций. Такая, блин, система...
Передаю через внешний винт.


Название: Re: Подключение к БД и постобработка данных
Отправлено: __Heaven__ от Август 20, 2015, 13:04
Попробуй из Кьюта открыть базу и поделать запросы.
Может я чего-то не понимаю...

Код
C++ (Qt)
QSqlQuery query(db);
qDebug() << query.exec("SELECT * FROM Composition;");
qDebug() << query.size();
 

Вывод
Цитировать
true
-1


Название: Re: Подключение к БД и постобработка данных
Отправлено: Old от Август 20, 2015, 13:13
Цитировать
bool QSqlDriver::hasFeature(DriverFeature feature) const

QSqlDriver::QuerySize   1   Whether the database is capable of reporting the size of a query. Note that some databases do not support returning the size (i.e. number of rows returned) of a query, in which case QSqlQuery::size() will return -1.


Название: Re: Подключение к БД и постобработка данных
Отправлено: __Heaven__ от Август 20, 2015, 14:27
Спасибо, я почему-то подумал, что sqlite не относится к таковым...
Попробуй из Кьюта открыть базу и поделать запросы.
Пантер, на что хотел натолкнуть?
Код
C++ (Qt)
   QSqlQuery query(db);
   QTime time;
   time.start();
   qDebug() << query.exec("SELECT * FROM Composition WHERE C = 0.2 AND Si = 0.5 AND V = 0.03;");
   qDebug() << time.elapsed();
   int count = 0;
   while (query.next())
       ++count;
   qDebug() << time.elapsed();
   qDebug() << count;
 
Цитировать
true
36183
678940
1227256
Диспетчер процессов показал, что на время запроса было задействовано 1 ядро 100% (xenon e5 3.6GHz), а на время цикла в поле диск значение колебалось от 160 до 210 Мб/с.


Название: Re: Подключение к БД и постобработка данных
Отправлено: Пантер от Август 20, 2015, 15:43
А что тебе с данными нужно сделать?


Название: Re: Подключение к БД и постобработка данных
Отправлено: __Heaven__ от Август 20, 2015, 15:49
Конкретно до конца сам не понимаю, так как другой человек будет ими заниматься. А так он собирается выводить по диапозонам, смотреть на цифры. Как-то так...


Название: Re: Подключение к БД и постобработка данных
Отправлено: __Heaven__ от Август 20, 2015, 15:51
Глобальная задача такая. Есть некая модель, критерий, по которой идёт расчёт. Если критерий удовлетворительный, то модель адекватная, если нет - нет.
Необходимо выделить группы по хим. составу, в которых модель работает стабильно, а в каких нет.