Russian Qt Forum

Qt => Базы данных => Тема начата: Krow от Март 28, 2007, 07:57



Название: Qt 4.1.1 Избитая тема про БД
Отправлено: Krow от Март 28, 2007, 07:57
В общем вопрос заключается в следующем:
т.к. с БД я ещё не связывался то не знаю какой конкретно предпочесть.
Будет БД в которой будет содержаться каталог каких либо продуктов. Нужна такая база которая будет работать без предустановки сервера БД (надеюсь я правильно выразился.) т.е. её не надо будет устанавливать как MySql или FireBird.
Вариант использования обычных тексовых файлов с разделителями для полей и подгружать его при загрузке приложения меня как то мало привлекает.
Думаю суть проблемы я изложил.. Может кто что подскажет? или дайте линк где можно про такое почитать..?


Название: Qt 4.1.1 Избитая тема про БД
Отправлено: Mikhail от Март 28, 2007, 08:20
Используй sqlite. В Qt  имеется драйвер qsqlite для работы с этой БД. Все твои требования будут удовлетворены


Название: Qt 4.1.1 Избитая тема про БД
Отправлено: Alex03 от Март 28, 2007, 09:00
А что это Вы FireBird забраковали?
Есть embedded FireBird в виде отдельной длл-ки/со-шки, предоставляющий монопольный доступ к БД (которая в одном файле) одного приложения. Ну и плюс там нет ограничений для пользователей/ролей и т.д.
ИМХО должно работать со стандартным IB драйвером QT, надо только DLL-ку ({gds32|fbclient}.{dll|so}) подменить.


Название: Re: Qt 4.1.1 Избитая тема про БД
Отправлено: _govorilka от Март 28, 2007, 09:01
Цитата: "Krow"
В общем вопрос заключается в следующем:
т.к. с БД я ещё не связывался то не знаю какой конкретно предпочесть.
Будет БД в которой будет содержаться каталог каких либо продуктов. Нужна такая база которая будет работать без предустановки сервера БД (надеюсь я правильно выразился.) т.е. её не надо будет устанавливать как MySql или FireBird.
Вариант использования обычных тексовых файлов с разделителями для полей и подгружать его при загрузке приложения меня как то мало привлекает.
Думаю суть проблемы я изложил.. Может кто что подскажет? или дайте линк где можно про такое почитать..?


Самое простое решение  - используй XML... Он специально для таких целей придуман и с Qt 100% совместим (QDomDocument, QSaxDocument).

Можно использовать Embedded MySQL, но это немного сложнее.


Название: Qt 4.1.1 Избитая тема про БД
Отправлено: antipart от Март 28, 2007, 09:36
Цитата: "Alex03"
А что это Вы FireBird забраковали?

ИМХО должно работать со стандартным IB драйвером QT, надо только DLL-ку ({gds32|fbclient}.{dll|so}) подменить.


Просьба поподробнее или ссылку...
не могу никак собрать qt 4.2.0-open-x11 под Linux с поддержкой firebird или хотябы odbc ломается при конфигуре ...


Название: Qt 4.1.1 Избитая тема про БД
Отправлено: Alex03 от Март 28, 2007, 10:55
Цитата: "antipart"
Просьба поподробнее или ссылку...
не могу никак собрать qt 4.2.0-open-x11 под Linux с поддержкой firebird или хотябы odbc ломается при конфигуре ...


Чтобы собрать драйвер, видимо надо името как минимум либу/инклуды, но проще исходники.
Искать можно тут:
http://www.firebirdsql.org/
http://sourceforge.net/projects/firebird/
И очень полезный ресурс на русском языке:
http://www.ibase.ru

Я под линуксом embedded FB не пользовал, а в готовых сборках по указанным ссылкам чтото я его не вижу, видимо надо самому собирать.


Название: Qt 4.1.1 Избитая тема про БД
Отправлено: antipart от Март 28, 2007, 11:31
(qt 4.2.0-opensuorce-x11    Slackware 11)
Firebird у меня установлен (/opt/interbase) ...
правда в процессах я его не вижу (ps -aux) ...
хотя с помощью isql к базе подключаюсь и содержимое вижу...

вопрос как сконфигурить qt с поддержкой firebird...
команда такая ./configure -qt-sql-ibase -I ($FIREBIRD)\include -L ($FIREBIRD)\lib
($FIREBIRD) - путь к корневой директории FireBird (/opt/interbase)

или накрайняк с поддержкой odbc
./configure -qt-sql-odbs - тоже ломается на этапе конфигурации

ошибку не помню , но одна и та же в обоих случаях ....
ща еще  раз запущу и выложу...


Название: Qt 4.1.1 Избитая тема про БД
Отправлено: Admin от Март 28, 2007, 11:35
а как на XML выполнять SQL запросы?


Название: Qt 4.1.1 Избитая тема про БД
Отправлено: antipart от Март 28, 2007, 11:43
g++  -o "/home/artem/qt-x11-opensource-src-4.2.0/bin/qmake" project.o property.o main.o makefile.o unixmake2.o unixmake.o mingw_make.o option.o winmakefile.o projectgenerator.o meta.o qtmd5.o makefiledeps.o metamakefile.o xmloutput.o pbuilder_pbx.o  qchar.o qstring.o qstringmatcher.o qtextstream.o qiodevice.o qglobal.o qbytearray.o qbytearraymatcher.o qdatastream.o qbuffer.o qlistdata.o qfile.o qfsfileengine_unix.o qfsfileengine.o qregexp.o qvector.o qbitarray.o qdir.o quuid.o qhash.o qfileinfo.o qdatetime.o qstringlist.o qabstractfileengine.o qtemporaryfile.o qmap.o qunicodetables.o qmetatype.o qsettings.o qlibraryinfo.o qvariant.o qvsnprintf.o qlocale.o qlinkedlist.o qurl.o  
InterBase support cannot be enabled due to functionality tests!
 Turn on verbose messaging (-v) to ./configure to see the final report.
 If you believe this message is in error you may use the continue
 switch (-continue) to ./configure to continue.


Название: Qt 4.1.1 Избитая тема про БД
Отправлено: -=QT=- от Март 28, 2007, 11:47
Для многопользовательских приложений можно использовать PostgreSQL, вещь кроссплатформенная имеющая большую мощь и резервы в использовании, а для локального хранения данных, то что было выше SQLite, XML, .... :P


Название: Qt 4.1.1 Избитая тема про БД
Отправлено: SABROG от Март 28, 2007, 12:23
Цитата: "-=QT=-"
Для многопользовательских приложений можно использовать PostgreSQL, вещь кроссплатформенная имеющая большую мощь и резервы в использовании, а для локального хранения данных, то что было выше SQLite, XML, .... :P


PostgreSQL мощнее MySQL, в чем его преимущества ?

С XML работать сложнее чем с sqlite, писанины больше. Я кстати до сих пор не могу понять зачем люди используют текстовое представление данных в почте, протоколах, настройках. Я так понимаю, что в надежде на то, что какой-то продвинутый пользователь полезет их менять вручную. На деле врятли кто уходит дальше использования мышки и кликов по батонам, а настоящие девелоперы и с двоичным протоколом и форматом данных справятся.


Название: Qt 4.1.1 Избитая тема про БД
Отправлено: Krow от Март 28, 2007, 13:33
Цитата: "Mikhail"
Используй sqlite. В Qt  имеется драйвер qsqlite для работы с этой БД. Все твои требования будут удовлетворены

спс. гляну что это такое и с чем его едят.
Alex03 -> FireBird Embedded не нашёл.
Согласен с Admin, как делать Sql запросы в XML. к тому же xml не чем не лучше имхо обычных текстовых файлов с разделителями типа *.csv.
_govorilka спс. почитаю на эту тему.


Название: Qt 4.1.1 Избитая тема про БД
Отправлено: -=QT=- от Март 28, 2007, 13:48
Спор о преимуществах СУБД можно вести очень долго. Определенный набор СУБД решает определенные проблемы (извиняюсь за каламбур), но в итоге одни СУБД проектируются для Web другие для локального использования, третие для корпоративных приложений, и так далее. А так каждый кулик своё болото хвалит. Хотя я высказываю только своё собственное мнение, а анализ и принятие решения всегда остается за тем кто задал вопрос. 8)  :!:


Название: Qt 4.1.1 Избитая тема про БД
Отправлено: SABROG от Март 28, 2007, 13:53
Вот так все и отвечают. У нас сейчас стоит MSSQL, думаем выбрать SQL сервак, который будет работать под FreeBSD. В базе сейчас 10 млн. записей для каждой из 6 реляционных таблиц (60 млн в итоге), каждый день несколькими пользователями добавляется в среднем по 200-300 тысяч записей.
Есть сайт с php скриптом который обращается к этим 6 таблицам, по сути скрипт обычный поисковик по базе. Вот и думаем в какую сторону смотреть "Слоник", "Дельфин" или "Оракл"...


Название: Qt 4.1.1 Избитая тема про БД
Отправлено: -=QT=- от Март 28, 2007, 14:05
База имеет более 300 таблиц 150, а может и больше сейчас имеют размеры по 2ГБ
всё на Фоксе таблицы сборные т.е. таблица номенклатуры складывается из 5-6 ти таблиц по 2ГБ и далее вообщем мрак полный, из всех субд в которые закачивали данные выдержал только Постгресс остальные по запросам или не шевелились вообще или с большим скрипом (FB, MySQL, Linter) хотя всё относительно.
Я встречал админа у которого база с 25ТБайт и таблицы в 600-800ГБайт, а запросы проходили в пределах 0,6-0,9сек.


Название: Qt 4.1.1 Избитая тема про БД
Отправлено: Krow от Март 28, 2007, 15:18
-=QT=- постгресс требует отдельной установки?


Название: Qt 4.1.1 Избитая тема про БД
Отправлено: -=QT=- от Март 28, 2007, 15:56
Да он есть как в исходниках так и в бинарном виде под виндовс, линукс, юникс. Сам сервер устанавливается отдельно, а клиента можно интегрировать в QT стандартными методами.
Смотри тут http://www.postgresql.org/


Название: Qt 4.1.1 Избитая тема про БД
Отправлено: Krow от Март 28, 2007, 19:01
Цитата: "-=QT=-"
Да он есть как в исходниках так и в бинарном виде под виндовс, линукс, юникс. Сам сервер устанавливается отдельно, а клиента можно интегрировать в QT стандартными методами.
Смотри тут http://www.postgresql.org/

так в том то и дело, не особо хочется перед запуском приложения ставить отдельно сервер postgresql.
хочется запустиьт приложени е и работать.. т.е. не надо вообюще ничего устанавливать..

добавлено спустя 1 час:

 решил остановиться таки на sqlite. для моего приложения имхо пока будет достаточно.
а postgresql буду осваивать когда база будет не сказал бы что маленькая, да и может что потребуется уже кординально менять в приложении.


Название: Qt 4.1.1 Избитая тема про БД
Отправлено: -=QT=- от Март 28, 2007, 20:26
Таки оно правильно наверное, для локального хранения данных в формате доступа sql


Название: Qt 4.1.1 Избитая тема про БД
Отправлено: Вячеслав от Март 28, 2007, 22:26
Добавлю свои 5 копеек ;)
Цитата: "Krow"

 решил остановиться таки на sqlite. для моего приложения имхо пока будет достаточно.
а postgresql буду осваивать когда база будет не сказал бы что маленькая, да и может что потребуется уже кординально менять в приложении.

Только учти что sqlite не поддерживает тригеры\sp -> вся логика работы падает на клиента ... Птиц в этом плане проще - пока база маленькая(или один клиент) работаем с embeded серпвером ... А после тихо уползаем на нормальный сервак ... Грабли конечно есть ... но в приемлимом количестве ... IMHO для средних приложений оно самто ;)


Название: Qt 4.1.1 Избитая тема про БД
Отправлено: _govorilka от Март 29, 2007, 15:16
Цитата: "Admin"
а как на XML выполнять SQL запросы?

А зачем вообще использовать SQL, если нет SQL-сервера?..

SABROG
Можно вопрос... А почему ты не пишешь содержимое exe в hex-редакторе, а используешь
для этого текстовый C++, да и еще с такими, тяжелыми надстройками, как Qt?..


Название: Qt 4.1.1 Избитая тема про БД
Отправлено: SABROG от Март 29, 2007, 17:08
Цитировать

SABROG
Можно вопрос... А почему ты не пишешь содержимое exe в hex-редакторе, а используешь
для этого текстовый C++, да и еще с такими, тяжелыми надстройками, как Qt?..


Потому, что нет никаких других оптимальных средств.
Вот если бы программы можно было писать исключительно мышкой, неужели вы бы этим не воспользовались, если бы гибкость интерфейса позволяла выбирать логику действий прям в окне. Например запись:

Код:

for (int i=0; i < ListView->Items->count(); i++)
{
ShowMessage(ListView->Item[i]->text;
}


Можно было бы превратить в форму, где достаточно было бы выбрать ListView и к нему привязать действие "for each element" и вызывать ShowMessage() для каждого item'a. В зависимости от типа передаваемого параметра в ShowMessage предоставлять ComboBox с выбором методов/свойств которые возвращают данные типы. При некотором желании можно найти более подходящий пример.

Я о том, что накой создавать промежуточные хранилища в текстовом формате, если их никто не собирается редактировать вручную, при том что программа тратит драгоценное время процессора на конвертацию сначала в текст, а потом в двоичное представление и дисковое пространство для хранения текста.
Если брать XML, то получается, что структура дерева узко специфична и ее знает только программа, для которой структура создавалась. Так почему бы просто не создать обычную двоичную структуру, а для разработчиков просто написать ее структуру в helpe.

Тоже самое и с браузерами. Нафига спрашивается гонять кучу текстовой информации туда сюда, если любой функции, ключу, параметру можно сделать двоичный опкод и задать правила передачи структур. Или придумать некоторый байт-код, который с таким же успехом конвертировать в html, javascript и т.д. и т.п.

Если посчитать сколько по всему миру тратиться процессорного времени и дискового пространства на переконвертацию/хранение чего-либо, то волосы на голове зашевеляться.

Причина в том, что есть куча старых наработок, которые применяются для создания новых технологий, мы все в этом варимся и не хотим менять протоколы интернета потому, что ими будет пользоваться слишком ограниченное количество человек. Мы же хотим использовать только ширпотреб, чтобы быть в мэйнстриме, несмотря на сложность и очевидные преимущества новых разработок. Простой пример: был создан формат хранения графических файлов на основе фрактальном сжатии без потери качества, причем размер файлов был в разы меньше чем Jpeg. Не прижился только потому, что был коммерческим, не был широко распространен (врятли кто захочет сделать свой сайт используя такую графику, которую не поддерживают обычные браузеры). Правда я не исключаю того, что этот формат просто мог перекочевать под крылышко некоторых гигантов и реализован в каком нибудь flash'e, видео-компрессоре под другим названием.


Название: Qt 4.1.1 Избитая тема про БД
Отправлено: Steven_Orko от Март 29, 2007, 18:23
Цитата: "SABROG"
Можно было бы превратить в форму, где достаточно было бы выбрать ListView и к нему привязать действие "for each element" и вызывать ShowMessage() для каждого item'a. В зависимости от типа передаваемого параметра в ShowMessage предоставлять ComboBox с выбором методов/свойств которые возвращают данные типы. При некотором желании можно найти более подходящий пример.
[/qoute]

НЕТ!!! Я бы этим точно не воспользовался.. Тыкать мышкой - это идеология, продвигаемая мелкосовтом... Я этот код напишу руками в несколько раз быстрее, чем ты это сделаешь мышкой...


Цитата: "SABROG"

Если посчитать сколько по всему миру тратиться процессорного времени и дискового пространства на переконвертацию/хранение чего-либо, то волосы на голове зашевеляться.
[/qoute]
Ага, кучу баранов пошло под откос. Так давайте с ними за компанию??? Нет? А что так? Если кучу людей делают так, это еще не значит, что они правы. Это значит, что они как стадо баранов. Не принимай на свой счет )))))

Цитата: "SABROG"

Причина в том, что есть куча старых наработок, которые применяются для создания новых технологий, мы все в этом варимся и не хотим менять протоколы интернета потому, что ими будет пользоваться слишком ограниченное количество человек. Мы же хотим использовать только ширпотреб, чтобы быть в мэйнстриме, несмотря на сложность и очевидные преимущества новых разработок. Простой пример: был создан формат хранения графических файлов на основе фрактальном сжатии без потери качества, причем размер файлов был в разы меньше чем Jpeg. Не прижился только потому, что был коммерческим, не был широко распространен (вряд ли кто захочет сделать свой сайт используя такую графику, которую не поддерживают обычные браузеры).


Насчет не прижился.. есть такие вещи, как пиар-кампании и т.д. и т.п. Вот та же Мелкософт стока денег вбухивает в продвижение какого-либо даже не особо готового продукта....
Цитата: "SABROG"

 Правда я не исключаю того, что этот формат просто мог перекочевать под крылышко некоторых гигантов и реализован в каком нибудь flash'e, видео-компрессоре под другим названием.

Скорее всего ))))

лично SABROG:
Я считаю, что вы неправы, когда думаете, что идти так, как идет большинство - это верный путь.


Название: Qt 4.1.1 Избитая тема про БД
Отправлено: Krow от Март 29, 2007, 19:13
SABROG, согласен с Steven_Orko в том что тыкаьт мышкой, использовать разл визарды удобно, но всё же нормальный программист должен делать всё вручную, ибо почти его каждая прграмма будет уникальна и поэтому программист потратит намного меньше времени на то чтобы набить всё это руками чем потом переделывать готовое визардовское приложение.
к тому же опять таки тыканье на визардах и прочих менюшках отучает думать. это всё дурное влияние на нас запада.
Steven_Orko не понял при чём сдесь куча баранов? то что многие используют тот же xml это всего лишь как вариант лень искать что то более эффективное чем пользовать уже готовое.
моё мнение такое..
ЗЫ каждый идёт своей дорогой а форум это место где люди обмениваются мнениями а не навязывают своё мнение другим :)


Название: Qt 4.1.1 Избитая тема про БД
Отправлено: Steven_Orko от Март 29, 2007, 20:04
Цитата: "Krow"

Steven_Orko не понял при чём сдесь куча баранов?


Это больное... Конкретно к xml я не отношу... по работе часто сталкиваюсь с тем, что основной причиной, почему надо делать именно так, а не иначе, мне говорят: "Так делают все". Вот встретил подобную формулировку или намек на нее(возможно, я неправильно понял?), и решил внести свою лепту в мировой континиум качественного ПО. ))))))

Конкретно про xml... Автор для себя пусть приведет веские причины, почему так, а потом встанет на противоположную сторону и приведет причины, почему нет. Тогда и получится реальный ответ, основанный на опыте, квалификации и т.д., а не на следовании моде, веяниям и т.п. ))))))) ИМХО


Название: Qt 4.1.1 Избитая тема про БД
Отправлено: Krow от Март 29, 2007, 21:01
Цитата: "Steven_Orko"
Автор для себя пусть приведет веские причины, почему так, а потом встанет на противоположную сторону и приведет причины, почему нет.

отлично мыслишь, да и пишешь неплохо. сам то следуешь сему этому? :)
что ты скажешь?? пользуешь ли ты xml? или всё же предпочитаешь пользоваться чем то ещё, для обыденных задач как хранение текстовой информации в качестве таблицы?


Название: Qt 4.1.1 Избитая тема про БД
Отправлено: SABROG от Март 29, 2007, 21:33
Народ, алё ! Я как-раз против мэйнстрима и против того чтобы идти за стадом, которое пользуется ширпотребом, только потому, что кто-то не смог пропиарить свою технологию за нехваткой средств.
Да с визардами я все-таки неудачно выбрал пример. С другой стороны Windows это визард, противопоставить можно было раньше linux, но уже сейчас уже имеется большое количество дистрибутивов, где почти ничего не надо настраивать и менять скрипты, все само. И к этому ведь стремятся ! А разве это плохо ? Это называется автоматизация. Если человек может допустить ошибку в коде, то машина может ее допустить только по причине человека, который создал эту машину.
Да и зачем писать каждый раз скелет программы и обработчики WM_MESSAGES, если и так известно, что их придется обрабатывать, проще ведь позволить той же ID его создать самому и поместить твой курсор в нужный блок.

Я раньше писал на ассемблере, меня все устраивало, кроме скорости разработки программ, начало все сходится к тому, что я подключал к своей программе в 3кб - dllки (libxml2, iconv, lua, zlib и т.д.). Только вот они уже весят десятки килобайт, даже мегабайты, как и dllки Qt.
И потом я понял, какой тогда смысл продолжать писать на ассемблере, если мне каждый раз приходится вручную переписывать стандартные методы, сокетные, оконные, работа с файлами, кодировкой и т.д. и т.п. Я не спорю ассемблер хорош, но его приминение по больше части сводится к написанию тренеров, кряков, мелких утилит и супер оптимизированных библиотек для обработки данных, где компиляторы не справляются с оптимизацией кода по скорости.

Т.ч. мир не состоит только из черного или белого. Ко всему надо подходить с умом, человек должен сам сделать выбор стрелять по воробью из рогатки и допустить шанс промаха или выбрать оружие, которое будет 30 минут вычислять траекторию полета воробья, ветер, температуру окружающей среды, составит его трехмерную модель, смоделирует его убийство с вычислением положения падения, рассчитает необходимую затрату энергии для выстрела по плотности оперения, костей, размеров и возраста воробья, с поправкой на увеличение затрат энергии для скорости полета пули, чтобы шум выстрела не успел его напугать, с попавкой на выбранный диаметр пули, который был вычислен по плотности оперения и т.д., ну и заодно такое орудие будет иметь внутреннюю базу данных необходимых факторов для самообучения (нейронные сети).

Где такое может понадобится ? В областях, где на кону человеческая жизнь:
проектирование зданий с учетом местности (землетресение, вулканы, цунами),
авиация, машиностроение, войны. В общем там, где человек не имеет право на ошибку.


Название: Qt 4.1.1 Избитая тема про БД
Отправлено: Krow от Март 29, 2007, 22:02
SABROG, а что если где то в этой автоматизации человек когда то написавший её допустил ошибку?? ведь как ты сам сказал что прогресс не стоит на месте.. и каждый раз мы привносим что то новое в уже написанное и шлифуем свои навыки в том что мы умеем.
так что и тут есть обратная сторона медали.. и как я уже сказал создание чего то с помощью автоматизаций тупит мозг и не дат ему развиваться..
что на счёт твоего примера с асмом... да согласен есть каноны которые проверены не одним годом и их не стоит переписывать настолько часто как разрабатываемые сейчас программы.
опять же глянув на обратную сторону медали сего аспекта можно увидеть что языки программирования развиваются. разве ты будешь отрицать факт появление новых версий популярных языков програмирования?? или обновление версий компиляторов???
вот то то и оно что не будешь..
подводя итого к ввышесказаному: автоматизация -> привелегия пользователя а не разработчика.


Название: Qt 4.1.1 Избитая тема про БД
Отправлено: Steven_Orko от Март 29, 2007, 22:28
Цитата: "Krow"

отлично мыслишь, да и пишешь неплохо. сам то следуешь сему этому? :)

Вот не поверишь, практически каждый день встает так или иначе вопрос об этом. Не с бодуна же я написал эту фразу и не с сайта какого стырил. Из личного опыта ))))
Цитата: "Krow"

что ты скажешь?? пользуешь ли ты xml?


Пользуюсь )))) Для написания конфигов и структуры меню в силу специфичности решаемой задачи .

Цитировать

Где такое может понадобится ? В областях, где на кону человеческая жизнь:
проектирование зданий с учетом местности (землетресение, вулканы, цунами),
авиация, машиностроение, войны. В общем там, где человек не имеет право на ошибку.
[/qoute]

Цитата: "Krow"

подводя итого к ввышесказаному: автоматизация -> привелегия пользователя а не разработчика.
[/qoute]

Практически согласен с Krow, тем более, что пример был как раз об этом. Однако!!! Те же IDE - тоже автоматизация. автоподстановка, щаблоны классов (не в стиле С++), типов и т.д. Продвинутая подстветка синтаксиса (Visual Assist, если не ошибаюсь) Это та же автоматизация, которая позволяет писать код значительно быстрее. генерация кода из UML-диаграммы - та же автоматизация. Пусть это ново и сыро, но все-таки дает серьезные преимущества перед программистами прошлого )))


Название: Qt 4.1.1 Избитая тема про БД
Отправлено: SABROG от Март 29, 2007, 22:38
Кстати я сам на работе каждый день использую XML, в основном файлы от 3 до 20 Мегабайт. К сожалению отказаться от этого я не могу, т.к. это мэйнстрим, а организации, которые поставляют свои данные в XML формате врятли будут слушать мои проповеди. Сами файлы долго парсятся, плюс жрется траффик на интернет. Я бы предпочел получать данные в файле базы данных sqlite.
Не надо парсить и распихивать по массивам, все уже готово для закачку в базу, тут селект, там инсерт и вуаля.


Название: Qt 4.1.1 Избитая тема про БД
Отправлено: -=QT=- от Март 30, 2007, 08:20
Цитата: "SABROG"
Цитировать

SABROG
Можно вопрос... А почему ты не пишешь содержимое exe в hex-редакторе, а используешь
для этого текстовый C++, да и еще с такими, тяжелыми надстройками, как Qt?..


Потому, что нет никаких других оптимальных средств.
Вот если бы программы можно было писать исключительно мышкой,

Программка называется HiASM
(http://soft.softodrom.ru/pimg/4909.gif)


Название: Qt 4.1.1 Избитая тема про БД
Отправлено: Krow от Март 30, 2007, 11:30
Цитата: "SABROG"
Кстати я сам на работе каждый день использую XML, в основном файлы от 3 до 20 Мегабайт. К сожалению отказаться от этого я не могу, т.к. это мэйнстрим, а организации, которые поставляют свои данные в XML формате врятли будут слушать мои проповеди. Сами файлы долго парсятся, плюс жрется траффик на интернет. Я бы предпочел получать данные в файле базы данных sqlite.
Не надо парсить и распихивать по массивам, все уже готово для закачку в базу, тут селект, там инсерт и вуаля.

а ты не пробовал делать конвертер из xml базы в sqlite и обратно, чтобы потом было легче работать???


Название: Qt 4.1.1 Избитая тема про БД
Отправлено: SABROG от Март 30, 2007, 11:52
Цитата: "Krow"

а ты не пробовал делать конвертер из xml базы в sqlite и обратно, чтобы потом было легче работать???

А какой в этом смысл ? Это не избавляет от необходимости парсить текстовый XML. А так просто парсится XML и все полученные данные из ключей тут же обрабатываются и кладутся в базу MSSQL. Недавно из-за сложности формата XML'я и тормознутости php скриптов, XML парсился 5 часов...

добавлено спустя 1 минуту:

 
Цитата: "-=QT=-"

Программка называется HiASM


Смахивает на слоты и сокеты Qt Designer'a ;)


Название: Qt 4.1.1 Избитая тема про БД
Отправлено: Krow от Март 30, 2007, 12:01
Цитата: "SABROG"
А какой в этом смысл ? Это не избавляет от необходимости парсить текстовый XML. А так просто парсится XML и все полученные данные из ключей тут же обрабатываются и кладутся в базу MSSQL.

ну как вариант. просто думал что у тебя приложение так и работает на xml.. и ты никкуда не перегоняешь эти даные.
-=QT=- а есть ли смысл пользоваться ей?? или тебя тоже прикалывает визуальные методы создания приложений?


Название: Qt 4.1.1 Избитая тема про БД
Отправлено: -=QT=- от Март 30, 2007, 12:27
Цитата: "Krow"
Цитата: "SABROG"
А какой в этом смысл ? Это не избавляет от необходимости парсить текстовый XML. А так просто парсится XML и все полученные данные из ключей тут же обрабатываются и кладутся в базу MSSQL.

ну как вариант. просто думал что у тебя приложение так и работает на xml.. и ты никкуда не перегоняешь эти даные.
-=QT=- а есть ли смысл пользоваться ей?? или тебя тоже прикалывает визуальные методы создания приложений?
Ну меня вообщето данная поделка убила наповал ...:) еле оклемался, а потом понял есть мелкие задачи для обычных продвинутых пользователей, или ленивых программистов которые можно быстро реализовать на этой штуке.
А что до визуальных методов то мы очень быстро движемся к этому не без помощи мелкомягких и иже им подобным.

добавлено спустя 3 минуты:

 Да по поводу хранения данных, а почему не использовать в разумных пределах обычные текстовые файлы с разделителями а не XML или SQLite :) - это я о том что у каждой БД есть своя область применения....

добавлено спустя 2 минуты:

 А по поводу слоты и сокеты от QTDesigner`a так эта поделка HiASM ещё круче она ведь на Assembler написана, а QT на С++


Название: Qt 4.1.1 Избитая тема про БД
Отправлено: Krow от Март 30, 2007, 14:07
кстати... на xml удобно хранить настройки программы )


Название: Qt 4.1.1 Избитая тема про БД
Отправлено: SABROG от Март 30, 2007, 15:50
Мне удобне хранить их в sqlite, не надо писать reader и writer для xml'я.
Подборка на тему визардов или как можно будет писать программы в будущем ;)

http://mtg.upf.edu/reactable/?media
http://fishki.net/comment.php?id=17185
http://www.fastcompany.com/video/player.html?bctid=422563006


Название: Qt 4.1.1 Избитая тема про БД
Отправлено: Mikhail от Март 30, 2007, 20:13
Цитировать

Мне удобне хранить их в sqlite, не надо писать reader и writer для xml'я.


А не проще ли использовать для настроек программ родной QSettings?

добавлено спустя 1 минуту:

 Для хранения и использования естественно.


Название: Qt 4.1.1 Избитая тема про БД
Отправлено: SABROG от Март 31, 2007, 01:02
Цитата: "Mikhail"
Цитировать

Мне удобне хранить их в sqlite, не надо писать reader и writer для xml'я.


А не проще ли использовать для настроек программ родной QSettings?

добавлено спустя 1 минуту:

 Для хранения и использования естественно.


QSettings не удобен для пользователей Windows, т.к. все настройки программа хранит в реестре. 1. Зачем засорять реестр ? 2. Как прикажите переносить настройки на другие машины, экспортировать в .reg файлы ?
Т.ч. Тролли в этом плане дали маху.


Название: Qt 4.1.1 Избитая тема про БД
Отправлено: Tonal от Март 31, 2007, 07:12
Цитата: "SABROG"
QSettings не удобен для пользователей Windows, т.к. все настройки программа хранит в реестре. 1. Зачем засорять реестр ? 2. Как прикажите переносить настройки на другие машины, экспортировать в .reg файлы ?
Т.ч. Тролли в этом плане дали маху.

QSettings нормально умеет работать с ini файдами.
Т.ч. оба возражения мимо кассы. ;-)


Название: Qt 4.1.1 Избитая тема про БД
Отправлено: SABROG от Март 31, 2007, 08:37
Цитата: "Tonal"
Цитата: "SABROG"
QSettings не удобен для пользователей Windows, т.к. все настройки программа хранит в реестре. 1. Зачем засорять реестр ? 2. Как прикажите переносить настройки на другие машины, экспортировать в .reg файлы ?
Т.ч. Тролли в этом плане дали маху.

QSettings нормально умеет работать с ini файдами.
Т.ч. оба возражения мимо кассы. ;-)


Посыпаю голову пеплом, в ассистанте об этом как-то вскользь сказано, без примеров.


Название: Qt 4.1.1 Избитая тема про БД
Отправлено: Krow от Март 31, 2007, 13:01
Цитата: "SABROG"
Подборка на тему визардов или как можно будет писать программы в будущем ;)

http://mtg.upf.edu/reactable/?media
http://fishki.net/comment.php?id=17185
http://www.fastcompany.com/video/player.html?bctid=422563006

так не интересно :)

добавлено спустя 1 минуту:

 
Цитата: "Tonal"
QSettings нормально умеет работать с ini файдами.
Т.ч. оба возражения мимо кассы. ;-)

сцылочку плиз :))


Название: Qt 4.1.1 Избитая тема про БД
Отправлено: SABROG от Март 31, 2007, 14:49
Цитата: "Krow"
сцылочку плиз :))


Вот как-то так:

Код:

     QSettings settings(QSettings::IniFormat, QSettings::UserScope,
                        "MySoft", "Star Runner");


Название: Qt 4.1.1 Избитая тема про БД
Отправлено: Krow от Март 31, 2007, 18:13
SABROG а остальное как обычно?? или есть ещё подводные камни??


Название: Qt 4.1.1 Избитая тема про БД
Отправлено: SABROG от Март 31, 2007, 19:02
Пока не приходилось пользоваться.


Название: Qt 4.1.1 Избитая тема про БД
Отправлено: Krow от Апрель 02, 2007, 18:26
ну в кто нить пользовался этой функцией Qt?


Название: Qt 4.1.1 Избитая тема про БД
Отправлено: SABROG от Апрель 02, 2007, 19:16
А почему ты так боишься сам ей попользоваться :) ?


Название: Qt 4.1.1 Избитая тема про БД
Отправлено: Krow от Апрель 03, 2007, 06:13
Цитата: "SABROG"
А почему ты так боишься сам ей попользоваться :) ?

я не боюсь.. просто не знаю... поэтому мне нужен тот кто наставит меня на путь истины... :)


Название: Qt 4.1.1 Избитая тема про БД
Отправлено: -=QT=- от Апрель 03, 2007, 07:35
Код:
#include <QApplication>
#include <QStyle>
#include <QFontDialog>
#include <QMessageBox>
#include <QSettings>
#include <QDir>
//
#include "qmysettings.h"
#include "config.h"
//
QMySettings::QMySettings()
#ifdef Q_OS_WIN32
:QSettings (QDir::homePath()+"/Application Data/"+_PROGRAM_NAME+".ini", QSettings::IniFormat)
#else
:QSettings ( _ORGANIZATION, _PROGRAM_NAME )
#endif
{
#ifdef Q_OS_WIN32
m_font = QFont( _DEFAULT_FONT_WIN, _DEFAULT_FONTSIZE );
#else
m_font = QFont( _DEFAULT_FONT_LINUX, _DEFAULT_FONTSIZE );
#endif

QMySettings::loadINI();
}
// ~ Destructor
QMySettings::~QMySettings()
{
QMySettings::saveINI();
}
// load all save value in *ini file or registry windows
void QMySettings::loadINI()
{
// BEGIN group < _INI_GROUP_OPTION >
QMySettings::beginGroup( _INI_GROUP_OPTION );
QString s = QMySettings::value( _INI_VALNAME_SETFONT, m_font.toString()).toString();
m_font.fromString(s);
m_style = QMySettings::value( _INI_VALNAME_SETSTYLE, QApplication::style()->objectName()).toString();
QMySettings::endGroup();
// END group < _INI_GROUP_OPTION >

// BEGIN group < _INI_GROUP_SQL >
QMySettings::beginGroup( _INI_GROUP_SQL );
m_driver = QMySettings::value( _INI_VALNAME_DRNAME,  _SQL_DEFAULT_DRNAME ).toString();
m_database = QMySettings::value( _INI_VALNAME_DATABASE,  _SQL_DEFAULT_DBNAME ).toString();
m_username = QMySettings::value( _INI_VALNAME_USERNAME, _SQL_DEFAULT_USERNAME ).toString();
m_password = QMySettings::value( _INI_VALNAME_PASSWD, _SQL_DEFAULT_PASSWORD ).toString();
m_hostname = QMySettings::value( _INI_VALNAME_HOSTNAME, _SQL_DEFAULT_HOSTNAME ).toString();
m_port = QMySettings::value( _INI_VALNAME_PORT, _SQL_DEFAULT_PORT ).toInt();
m_qslitedb = QMySettings::value( _INI_VALNAME_SQLITEDB, _SQL_DEFAULT_SQLITEDB ).toBool();
QMySettings::endGroup();
// END group < _INI_GROUP_SQL >
}
// save all value in *ini file or registry windows
void QMySettings::saveINI()
{
// BEGIN group < _INI_GROUP_OPTION >
QMySettings::beginGroup( _INI_GROUP_OPTION );
QMySettings::setValue( _INI_VALNAME_SETFONT, QApplication::font().toString() );
QMySettings::setValue( _INI_VALNAME_SETSTYLE, QApplication::style()->objectName() );
QMySettings::endGroup();
// END group < _INI_GROUP_OPTION >

}
// - set driver name in *.ini file or registry windows
void  QMySettings::setDriverName( const QString &value )
{
QMySettings::m_driver .clear();
QMySettings::m_driver.append( value );
QMySettings::save( _INI_GROUP_SQL, _INI_VALNAME_DRNAME, value);
}
// - set database name in *.ini file or registry windows
void  QMySettings::setDatabaseName(const QString &value)
{
QMySettings::m_database.clear();
QMySettings::m_database.append( value );
QMySettings::save( _INI_GROUP_SQL, _INI_VALNAME_DATABASE, value );
}
// - set user name  in *.ini file or registry windows
void  QMySettings::setUsername(const QString &value)
{
QMySettings::m_username.clear();
QMySettings::m_username.append( value );
QMySettings::save( _INI_GROUP_SQL, _INI_VALNAME_USERNAME, value );
}
// - set password  in *.ini file or registry windows
void  QMySettings::setPassword(const QString &value)
{
QMySettings::m_password.clear();
QMySettings::m_password.append( value );
QMySettings::save( _INI_GROUP_SQL, _INI_VALNAME_PASSWD, value );
}
// set host name  in *.ini file or registry windows
void  QMySettings::setHostname(const QString &value)
{
QMySettings::m_hostname.clear();
QMySettings::m_hostname.append( value );
QMySettings::save( _INI_GROUP_SQL, _INI_VALNAME_HOSTNAME, value );
}
// set number port  in *.ini file or registry windows
void  QMySettings::setPort(const int &value)
{
QMySettings::m_port = value;
QMySettings::save( _INI_GROUP_SQL, _INI_VALNAME_PORT, value );
}
// set bool used Sqlite for default  in *.ini file or registry windows
void  QMySettings::setSqliteDB(const bool &value)
{
QMySettings::m_qslitedb = value;
QMySettings::save( _INI_GROUP_SQL, _INI_VALNAME_SQLITEDB, value );
}
// set geometry Widgets in *.ini file or registry windows
void  QMySettings::saveWidgetGeometry( QWidget * widget )
{
QRect myRect = widget->geometry();
    QString myObjectName = widget->objectName();
QMySettings::save( _INI_GROUP_GEOMETRY, myObjectName, myRect );
    QMySettings::save(_INI_GROUP_GEOMETRY, myObjectName, widget->saveGeometry());
}
//
void  QMySettings::setWidgetGeometry( QWidget * widget )
{
    QMySettings::beginGroup( _INI_GROUP_GEOMETRY );
    QString myObjectName = widget->objectName();
    QRect myRect = QMySettings::value( myObjectName,  widget->geometry() ).toRect();
    QByteArray myByteArray = QMySettings::value( myObjectName,  widget->saveGeometry() ).toByteArray();
    widget->setGeometry( myRect );
    widget->restoreGeometry( myByteArray );
    QMySettings::endGroup();
}
//
void  QMySettings::saveTreeWidgetColumnWidth( QTreeWidget * TreeWidget )
{
    for( int i=0; i < TreeWidget->columnCount(); i++)
    {
     int myWidth = TreeWidget->columnWidth(i);
     QString myColumn = QString("%1").arg(i);
     
     QString myObjectName = QString("%1.%2.%3")
                                     .arg( _INI_GROUP_GEOMETRY )
                                     .arg( TreeWidget->objectName() )
                                     .arg( "Column" );
                                     
     QMySettings::save( myObjectName, myColumn, myWidth );
    }  
}
//
void QMySettings::setTreeWidgetColumnWidth( QTreeWidget * TreeWidget )
{
    for( int i=0; i < TreeWidget->columnCount(); i++)
    {
        QString myObjectName = QString("%1.%2.%3")
                                     .arg( _INI_GROUP_GEOMETRY )
                                     .arg( TreeWidget->objectName() )
                                     .arg( "Column" );
                                     
QMySettings::beginGroup( myObjectName );
QString myColumn = QString("%1").arg(i);
        int myWidth = QMySettings::value( myColumn,  _GEO_DEFAULT_COLUMN_WITH ).toInt();
        QMySettings::endGroup();
       
        TreeWidget->setColumnWidth( i, myWidth );
    }
}
//
void  QMySettings::saveTreeViewColumnWidth( QTreeView * TreeView, const int &columnCount )
{
    for( int i=0; i < columnCount ; i++)
    {
     int myWidth = TreeView->columnWidth(i);
     QString myColumn = QString("%1").arg(i);
     
     QString myObjectName = QString("%1.%2.%3")
                                     .arg( _INI_GROUP_GEOMETRY )
                                     .arg( TreeView->objectName() )
                                     .arg( "Column" );
                                     
     QMySettings::save( myObjectName, myColumn, myWidth );
    }
}
//
void QMySettings::setTreeViewColumnWidth( QTreeView * TreeView, const int &columnCount )
{
    for( int i=0; i < columnCount ; i++)
    {
        QString myObjectName = QString("%1.%2.%3")
                                     .arg( _INI_GROUP_GEOMETRY )
                                     .arg( TreeView->objectName() )
                                     .arg( "Column" );
                                     
QMySettings::beginGroup( myObjectName );
QString myColumn = QString("%1").arg(i);
        int myWidth = QMySettings::value( myColumn,  _GEO_DEFAULT_COLUMN_WITH ).toInt();
        QMySettings::endGroup();
       
        TreeView->setColumnWidth( i, myWidth );
    }
}
//
template<class T>
void  QMySettings::save( const QString &group, const QString &name, T saveValue )
{
QMySettings::beginGroup( group );
QMySettings::setValue( name, saveValue );
QMySettings::endGroup();
}
//
void QMySettings::setDefault()
{
// BEGIN group < _INI_GROUP_OPTION >
QMySettings::beginGroup( _INI_GROUP_OPTION );
#ifdef Q_OS_WIN32
QMySettings::setValue( _INI_VALNAME_SETFONT, QFont( _DEFAULT_FONT_WIN, _DEFAULT_FONTSIZE ).toString() );
#else
QMySettings::setValue( _INI_VALNAME_SETFONT, QFont( _DEFAULT_FONT_LINUX, _DEFAULT_FONTSIZE ).toString() );
#endif
QMySettings::setValue( _INI_VALNAME_SETSTYLE, _DEFAULT_STYLE );
QMySettings::endGroup();
// END group < _INI_GROUP_OPTION >

// BEGIN group < _INI_GROUP_SQL >
QMySettings::beginGroup( _INI_GROUP_SQL );
QMySettings::setValue( _INI_VALNAME_DRNAME, _SQL_DEFAULT_DRNAME );
QMySettings::setValue( _INI_VALNAME_DATABASE, _SQL_DEFAULT_DBNAME );
QMySettings::setValue( _INI_VALNAME_USERNAME, _SQL_DEFAULT_USERNAME );
QMySettings::setValue( _INI_VALNAME_PASSWD, _SQL_DEFAULT_PASSWORD );
QMySettings::setValue( _INI_VALNAME_HOSTNAME, _SQL_DEFAULT_HOSTNAME );
QMySettings::setValue( _INI_VALNAME_PORT, _SQL_DEFAULT_PORT );
QMySettings::setValue( _INI_VALNAME_SQLITEDB, _SQL_DEFAULT_SQLITEDB );
QMySettings::endGroup();
// END group < _INI_GROUP_SQL >
}
// ========

Рабочий кусок реализации с QSettings


Название: Qt 4.1.1 Избитая тема про БД
Отправлено: Krow от Апрель 06, 2007, 10:18
спасибо.  :D


Название: Qt 4.1.1 Избитая тема про БД
Отправлено: SABROG от Апрель 06, 2007, 10:49
Насчет этой строчки есть комментарий:

Код:

QSettings (QDir::homePath()+"/Application Data/"+_PROGRAM_NAME+".ini", QSettings::IniFormat)

Нет смысла указывать папку Application Data и PROGRAM_NAME, т.к. Qt автоматически сохраняет по такому пути конфиг, достаточно написать так:
Код:

QSettings settings(QSettings::IniFormat, QSettings::UserScope,                        "MySoft", "PROGRAM_NAME");


Однако если написать так:

Код:

QSettings(QLatin1String("config.ini"),QSettings::IniFormat);


То config.ini файл создастся в текущей директории программы. В этом случае конечно невозможно будет разделить конфиги на профили пользователей, зато переносить настройки с компа на комп станет удобнее.


Название: Qt 4.1.1 Избитая тема про БД
Отправлено: Krow от Апрель 06, 2007, 14:52
SABROG первая и вторая строчка кода твоего последнего сообщения правильны?? просто в первой указывается сначала путь для сохранения файла а потом тип файла..
а во ворой сначала тип, а потом путь насколько я понял.. или вообще путь можно не указывать? не понял... :-?