Russian Qt Forum
Ноябрь 23, 2024, 15:34 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2 3   Вниз
  Печать  
Автор Тема: Написание СУБД или какую БД выбрать  (Прочитано 25236 раз)
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« : Сентябрь 16, 2007, 17:33 »

Добрый день.
    У меня есть проект, который я поддерживаю уже 3 года. Раньше информация хранилась в текстовых файлах, но после увеличения базы перешел на БД. Выбрал Sqlite как самое простое и доступное. БД обязательно должна быть локальной, т.е на серваке нельзя запускать серверную часть. Работа производится через подключение сетевого диска и обращение как к локальной БД. Всего 15 клиентов. Все бы было ничего но...
    БД содержит около 20 разных таблиц. Нужна возможность их редактирования, но через QTableView не хочется, т.е. не хочется, чтобы данные редактировались в QTableView. Нашел решение так: при нажатии кнопки редактирования выскакивает окошко, содержащее лейблы и эдиты. Но тут как раз и появилась проблема: Sqlite пофиг на данные. Т.е. я не могу проверить какое поле QDateTime, какое QStringList и т.д. В итоге я не могу поставить QDateTimeEdit когда он требуется. Разрабатывать окно для каждой тадлицы не решение.
   Посмотрев на это решил перейти на другую БД. Попробовал установить Firebird, но не смог. Искал по форуму помощь, нашел, но не помогло.
   Вот теперь вопросы:
1. Как можно обойти проблему?
2. Какую БД мне лучше использовать и как ее привязать к куте.
Заранее благодарю всех откликнувшихся.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Tonal
Гость
« Ответ #1 : Сентябрь 16, 2007, 18:13 »

Если работа через сетевой диск, то Embedded Firebird не подойдёт - он работает только с базой расположенной на локальном физическом диске (можно ещё на NFS, но это на винде не доступно)
Т.е. остаётся или SQLite, или через ODBC к *.mdb (базе MS Access)

Есть ещё Embedded MySql, но про него ничего не скажу - не знаю.
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #2 : Сентябрь 16, 2007, 18:37 »

Дык сетевой и локальный диск практически одно и то же. Вот только как у Firebird с доступом сразу нескольким пользователям?
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Вячеслав
Гость
« Ответ #3 : Сентябрь 16, 2007, 19:27 »

Дык сетевой и локальный диск практически одно и то же. Вот только как у Firebird с доступом сразу нескольким пользователям?
Сетевой != локальный ;( И они правы - слишком много граблей на этом пути .... А что мешает запустить птица как сервис и лазить через сеть ?  Просто как-то странно приложение сетевое - но сервер низя .... Какая разнича лезть через шару или собственный протокол сервера ?
За птицу скажу - забрался на нее 4 года назад (Еще на дятла) с тех пор и летаем Подмигивающий Грабли есть(где без них) , но разработчики наши и оччень внятные Подмигивающий Всегда раскажут почему сам дурак Подмигивающий Если что надо -спрашивай чем могу-помогу....
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #4 : Сентябрь 16, 2007, 19:48 »

Я не являюсь админом. Админ у нас козел - занимает место только благодаря соц. положению и связям, и не дает мне работать. Вот и приходится выпендриваться. На серве я максимум могу во множестве подпапок спрятать файл БД. Грустный
Можешь рассказать как прикрутить птицу к куте 4.3.1 с MinGW? Если не трудно, то подробно, думаю не я один буду благодарен. Я скачал с оффсайта Firebird-2.0.1.12855-1-Win32 - оно или нет? И еще - как с многопользовательским доступом если нет сервака?
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
AlekSi
Гость
« Ответ #5 : Сентябрь 16, 2007, 23:36 »

Цитировать
Работа производится через подключение сетевого диска и обращение как к локальной БД.
Если я правильно понимаю, то БД жива только благодаря тому, что SQLite поддерживает конкурентные транзакции самым простым способом - эксклюзивной блокировкой файла. Далеко не уверен, что такой фокус пройдёт с другими СУБД.
Я бы вставил одмину...
Записан
ритт
Гость
« Ответ #6 : Сентябрь 17, 2007, 00:09 »

> Можешь рассказать как прикрутить птицу к куте 4.3.1 с MinGW? Если не трудно, то подробно, думаю не я один буду благодарен.

я тоже буду благодарен, если подробно Улыбающийся
просто, желание прикрутить птицу было, а времени разбираться - не было...
Записан
Tonal
Гость
« Ответ #7 : Сентябрь 17, 2007, 05:54 »

Дык сетевой и локальный диск практически одно и то же. Вот только как у Firebird с доступом сразу нескольким пользователям?
Ещё раз и медленно
1) Птиц не работает с базами на сетевых дисках.
2) Встроенный птиц не позволяет работать с одним файлом базы разным программам одновременно (т.к. открывает файл в ексклюзивном режиме)

Соответственно для многопользовательской работы в сети тебе нужен запущенный сервер.

А прикрутить совсем просто - собираешь плагин и вперёд. ;-)
Записан
Вячеслав
Гость
« Ответ #8 : Сентябрь 17, 2007, 07:39 »

Я не являюсь админом. Админ у нас козел - занимает место только благодаря соц. положению и связям, и не дает мне работать. Вот и приходится выпендриваться. На серве я максимум могу во множестве подпапок спрятать файл БД. Грустный
Можешь рассказать как прикрутить птицу к куте 4.3.1 с MinGW? Если не трудно, то подробно, думаю не я один буду благодарен. Я скачал с оффсайта Firebird-2.0.1.12855-1-Win32 - оно или нет? И еще - как с многопользовательским доступом если нет сервака?

Ставишь птица как сервис на любой машине и назначаешь _сам_ его как сервер бд ( для себя любимого)
Желательно не пихать его в каталог с пробелами i.e. "Program Files" так как configure можт не сожрать путь к либам и инклюдам .... После установки в принципе ессть два варианта 1) перетащить из птица include и lib куда-нибудь поближе к Qt или 2) скормить configure полный путь до птица ...
Далее как уже сказано собираешь плагин или драйвер (че больше нравиться)
PS еще очччень рекомендую в сторону ibExpert'а посмотреть - это тулза для работы с БД - просто наглядно и удобно ( для жителей xUSSR - халява)
ЗЗЫ ЕСли чего не получаеться - спрашивай ...
Записан
Deiv
Гость
« Ответ #9 : Сентябрь 17, 2007, 15:39 »

Можно и "скюлайтом" реализовать.

Создай таблицу что то типа:
create table sys_tablefields
(
   id INTEGER PRIMARY KEY, -- не знаю зачем, у мя во всех таблицах присутствует
                                      -- без такого поля любые таблицы кажутся неполнноценными  Смеющийся
   tablename TEXT,            -- имя таблицы
   tablefield_id INTEGER,      -- номер поля в таблице
   tablefield_name TEXT,     -- имя поля в таблице
   tablefield_type INTEGER или TEXT -- здесь хранишь, что за тип у этого поля
);
Можно конечно полноценный репозиторий описания базы сваять, но тебе на... это не нужно (кажется)
(sys_tables, sys_types, sys_fields и т.п.)

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

Для использования репозитория можно написать отдельную функцию, типа get_fieldtype_by_fieldname_and_tablename("имя таблицы", "имя поля");.
Усе. Правда использовать это просто на запросах типа "select * from table".
А вот для запросов  "select * from table, table_2 where table.id = table_2.table" все значительно усложняется. А на более сложных становиться вообще весело.
Потому пристрели одмина и работай с сервачком каким-нибудь  Крутой.
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #10 : Сентябрь 17, 2007, 18:57 »

Я бы вставил одмину...
Эх, как давно этого желаю. Данная проблема не первая палка в колеса прогресса на моей работе. Грустный
Ещё раз и медленно
1) Птиц не работает с базами на сетевых дисках.
2) Встроенный птиц не позволяет работать с одним файлом базы разным программам одновременно (т.к. открывает файл в ексклюзивном режиме)
Соответственно для многопользовательской работы в сети тебе нужен запущенный сервер.
А прикрутить совсем просто - собираешь плагин и вперёд. ;-)
Грустный А я то надеялся. Может еще какая-либо БД умеет работать как sqlite? Прикрутить как раз таки не так легко. 2 дня пытался собрать плагин, да так и не собрал. Одна из проблем - либы в птице не подходят для mingw. К сожалению в птице необходимость отпала.
Ставишь птица как сервис на любой машине и назначаешь _сам_ его как сервер бд ( для себя любимого)
И что будет? Мне нужно чтобы база была одна на серве, а не 15 на каждом клиенте.
Цитировать
PS еще очччень рекомендую в сторону ibExpert'а посмотреть - это тулза для работы с БД - просто наглядно и удобно ( для жителей xUSSR - халява)
А можешь кратко описать что она из себя представляет, как подключается к куте. А данную проблему она решает?
Можно и "скюлайтом" реализовать.
.....
Потому пристрели одмина и работай с сервачком каким-нибудь  Крутой.
Очень интересное решение. Если ничего не поможет, обращусь к нему.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Вячеслав
Гость
« Ответ #11 : Сентябрь 17, 2007, 20:35 »

Грустный А я то надеялся. Может еще какая-либо БД умеет работать как sqlite? Прикрутить как раз таки не так легко. 2 дня пытался собрать плагин, да так и не собрал. Одна из проблем - либы в птице не подходят для mingw. К сожалению в птице необходимость отпала.
Ставишь птица как сервис на любой машине и назначаешь _сам_ его как сервер бд ( для себя любимого)
И что будет? Мне нужно чтобы база была одна на серве, а не 15 на каждом клиенте.
Таки она одна и будет
Цитировать
PS еще очччень рекомендую в сторону ibExpert'а посмотреть - это тулза для работы с БД - просто наглядно и удобно ( для жителей xUSSR - халява)
А можешь кратко описать что она из себя представляет, как подключается к куте. А данную проблему она решает?
Нормальное управление БД . К QT не имеет никакого отношения , но проектировать\администрить БД с помощью этого зверя - одно удовольствие...
Поповоду либ для mingw ты не прав - они делаються на раз Подмигивающий Вообще IMHO для приложений уровня организации лидера 2 FireBird(НЕ InterBase !!!) и postgress .Но птиц мобильнее... Из минусов - базовая поддержка в QT - (одна транзакция на базу,фиг малой кровью подцепишь insert ..... returning etc) Но для старта - пойдет Подмигивающий
Опять-таки IMHO c  базами на шарах связываться опастно - при некорректной работе сети можно поймать массу "приятных" моментов ....
Записан
Tonal
Гость
« Ответ #12 : Сентябрь 18, 2007, 05:44 »

Соответственно для многопользовательской работы в сети тебе нужен запущенный сервер.
А прикрутить совсем просто - собираешь плагин и вперёд. ;-)
Прикрутить как раз таки не так легко. 2 дня пытался собрать плагин, да так и не собрал. Одна из проблем - либы в птице не подходят для mingw.
Всё довольно просто:
1) Ставишь себе птица полнстью (лучше SuperServer 2.0.1)
2) В директории $(QT4)\src\plugins\sqldrivers\ibase\ заменяешь файл ibase.pro на вот это:
Код:
TARGET	 = qsqlibase

HEADERS = ../../../sql/drivers/ibase/qsql_ibase.h
SOURCES = main.cpp \
  ../../../sql/drivers/ibase/qsql_ibase.cpp

unix:!contains( LIBS, .*gds.* ):!contains( LIBS, .*libfb.* ):LIBS    *= -lgds

win32:!contains( LIBS, .*gds.* ):!contains( LIBS, .*fbclient.* ) {
INCLUDEPATH += C:\Lang\Firebird\Firebird_2_0\include
LIBS += -LC:/Lang/Firebird/Firebird_2_0/lib
!win32-borland:LIBS *= -lfbclient_ms
win32-borland:LIBS  += fbclient_bor.lib
}

include(../qsqldriverbase.pri)
3) Меняешь пути в строках с INCLUDEPATH и LIBS на свои
4) Собираешь плагин и радуешься. ;-)

По поводу сервера и базы - ты можешь поставить сервер firebird-а на любую машину в сети.
Главное выбери такую чтоб сама машина была поживче, а её загрузка - поменьше.
Остальные будут обращаться к ней за данными.
А когда твоя система станет большой и необходимой всей конторе, у тебя появятся реальные доводы в споре с админом. ;-)
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #13 : Сентябрь 18, 2007, 11:37 »

Млин, не очень удобно серваком делать левую машину - а если человек в отпуске??? Придется на отпуска переназначать серваки. Грустный Попробую по вашему способу собрать плагин, если не получится - вечером все выскажу. Улыбающийся
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Tonal
Гость
« Ответ #14 : Сентябрь 18, 2007, 13:58 »

Интересная либа. Жалко что её не поддерживают уже очень давно.
По моему, можно использовать только для однопользовательских приложений - т.к. блокировок не разумеет.
Ну и SQL тоже. ;-)

Я её использовал, когда было нужно работать с dbf-ами и не было возможности пересесть на более современный способ хранения данных.
Записан
Страниц: [1] 2 3   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.124 секунд. Запросов: 23.