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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Клиент-серверное приложение с БД  (Прочитано 5001 раз)
qwyllum
Гость
« : Апрель 09, 2013, 11:15 »

С-но вопрос. Научился делать десктопное приложение, которое читает данные с SQLite и выводит их в таблицу TableView. Теперь передо мной следующая задача - сделать приложение клиент-серверным. Отсюда вопросы:
1. Как передавать данные клиенту, которые сервер читает с БД
2. Как их выводить в таблицу - model связана с БД. В случае клиент-серверного приложения, model не может напрямую конектится с БД, данные должен передавать сервер. Если честно, не знаю, как это реализовать. Буду признателен, если кто поможет.
Записан
alex312
Хакер
*****
Offline Offline

Сообщений: 606



Просмотр профиля
« Ответ #1 : Апрель 09, 2013, 11:18 »

C-но ответ. Научи свое приложение подключатся в mysql - и фсе . Это уже будет клиент-серверное приложение. Улыбающийся 
Записан
qwyllum
Гость
« Ответ #2 : Апрель 09, 2013, 12:27 »

C-но ответ. Научи свое приложение подключатся в mysql - и фсе . Это уже будет клиент-серверное приложение. Улыбающийся 
так мое приложение умеет подключаться к SQLite) просто БД с сервером может быть на одном компьютере, а клиент - на другом. И клиентов может быть несколько
Записан
Bepec
Гость
« Ответ #3 : Апрель 09, 2013, 12:30 »

Ну таки разрабатывайте протокол, или же переходите на серверную БД.
Записан
qwyllum
Гость
« Ответ #4 : Апрель 09, 2013, 14:50 »

Ну таки разрабатывайте протокол, или же переходите на серверную БД.
Ну, допустим, я разработал простейший протокол, который будет передавать данные записи от сервера к клиенту. Теперь вопрос - QTableView работает с моделью. Модель и база на сервере, QTableView на клиенте. Следовательно, тут я вижу такие варианты:
1. Копировать переменную класса QSqlQueryModel и пересылать ее по сети полностью. На клиенте из ее копии формировать таблицу, которую и требуется отобразить.
2. Передавать список параметров, которые надо либо выводить на клиенте, либо записывать в БД на сервере. С записью вроде понятно. А с выводом... ну, допустим, я получил 4 строковых параметра, как мне запихнуть их в QTableView?
Записан
Bepec
Гость
« Ответ #5 : Апрель 09, 2013, 14:59 »

Я думаю вам не так надо думать Веселый
Копирование QSqlQueryModel дело неблагодарное. Там жеж умные указатели и прочая.

Я вижу пару выходов:
1) работать с самопальной моделькой, которая будет запрашивать данные с сервера (т.е. видно 30 строк - она 30 запросит.) Нужно больше?  запросит следующие 30 али ещё сколько.
Т.е. посылаем запрос на сервер, получаем готовую строку.
Редактируем? уходит запрос.

+: возможное быстродействие
-: самому писать модельку, эт дело тоже неблагодарное Веселый


2) развернуть серверную БД и тупо использовать стандартные модели.
+: без особых понтов получаем полный функционал.
-: возможен взлом и прочая порча гадости Веселый Пусть и чисто теоритически
-: вам надо освоить серверную бд Веселый
Записан
KrupaKarlo
Гость
« Ответ #6 : Апрель 09, 2013, 19:51 »

Я думаю вам не так надо думать Веселый
Копирование QSqlQueryModel дело неблагодарное. Там жеж умные указатели и прочая.

Я вижу пару выходов:
1) работать с самопальной моделькой, которая будет запрашивать данные с сервера (т.е. видно 30 строк - она 30 запросит.) Нужно больше?  запросит следующие 30 али ещё сколько.
Т.е. посылаем запрос на сервер, получаем готовую строку.
Редактируем? уходит запрос.

+: возможное быстродействие
-: самому писать модельку, эт дело тоже неблагодарное Веселый


2) развернуть серверную БД и тупо использовать стандартные модели.
+: без особых понтов получаем полный функционал.
-: возможен взлом и прочая порча гадости Веселый Пусть и чисто теоритически
-: вам надо освоить серверную бд Веселый


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

1. Делать ли на сервере
  • отдельный тред на каждое подключение
  • пул  потоков
  • просто фигачить в одном треде

2. Выбор протокола или городить свой велосипед или пользоваться готовыми к примеру google protobuf

Но блин только в лабораторной работе в университете можно делать запросы к БД из гуй потока
« Последнее редактирование: Апрель 09, 2013, 19:53 от KrupaKarlo » Записан
Bepec
Гость
« Ответ #7 : Апрель 09, 2013, 20:30 »

Уровень детсада = уровню вашего понимания языка. У кого-то это детсад на полгорода, у другого на 1 место и без нянечки.


Не надо такой категоричности. Запрос к БД занимает довольно мало времени в локали. Так что для локали это зе бест и никаких потоков ненадо.

К тому же рассматривается пока концепция. А куда чего совать - это дальше по разработке.


PS и большая просьба, не цитируйте большие сообщения. Это лишь загрязняет тему. А я итак пойму о чём вы говорили Веселый

PPS чес-слово, а где вы в моём сообщении увидели что запросы выполняются в гуи потоке? Веселый

update: да, забыл добавить, запрос одной строки к локальной базе занимает около 0,002 мс Веселый
Записан
KrupaKarlo
Гость
« Ответ #8 : Апрель 09, 2013, 20:44 »

больше не буду цитировать. И да мой уровень понимания ниже среднего увы
« Последнее редактирование: Апрель 09, 2013, 20:50 от KrupaKarlo » Записан
Странник
Гость
« Ответ #9 : Апрель 09, 2013, 22:39 »

зачем городить велосипед и использовать SQLite в сетевом многопользовательском приложении? Оо
смените СУБД на MySQL, PostgresSQL или Firebird. они бесплатны и поддерживаются Qt, так что всей работы - перенести базу, приведя в соответствие типы данных.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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