Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.03.2016, 16:31   #1
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию Программа клиент-серверная с БД в облаке

Ребят, пора повышать уровень программирования, но т.к. я экономист - самому разобраться будет сложно в общем суть такая...

Нужна программа "Заказы", человек видит перед собой таблицу (TAdvStringGrid), к примеру, данные заполняются через Tedit (фамилия, имя, номер телефона, заказ). Таблицу сделать - проблем, конечно, нет. С типизированным файлом тоже нет проблем. Есть проблема в другом.

Эта программа может находится на разных ПК в разных точках города, желательно записи хранить не в типизированном файле, а в какой-нибудь БД. Записи искать при помощи SQL - запросов. БД хочу защитить своими алгоритмами шифрования, CRC32 пока сложен для понимания.

Программа, в принципе, простая, но подскажите вот что:

какие компоненты использовать для того, чтоб если контрольная сумма БД, с которой (с БД) я тоже пока не умею работать, изменялась, то программа автоматически обновляла таблицу?

Где хранить данные?
Удобно ли иметь один файлик в облаке, или лучше чтоб каждая копия программа хранила данные в пк, а по закрытию добавляла записи? (думаю могут возникнуть при обращении к БД с другого ПК, т.е. на локальном диске-то запись будет, а вот другие ПК ее не увидят, т.к. файлик один будет, скорее всего...)

Что почитать, есть ли какие - нибудь особенности работы с БД ? (В свое время разрабатывал БД на VFoxPro (запросы, формы, репорты, сущности и т.д.)) а вот с делфи БД (или как она там правильнее называется) - не знаком. ЖЕЛАТЕЛЬНО что-нибудь по сложнее, а не стандартные компоненты.

ПЛАН:
1) подобрать хранилище, научится с ним работать программно
2) научиться разрабатывать БД в делфи, попробовать поиграться с Данными, выводя их в грид,
3) попрактиковаться в приеме - отправке запросов...

Думаю вы бы так же делали. В общем жду ваших советов!)
from dark to light)

Последний раз редактировалось Алексей_2012; 14.03.2016 в 16:34.
Алексей_2012 вне форума Ответить с цитированием
Старый 14.03.2016, 16:40   #2
TaLadno
Форумчанин
 
Регистрация: 03.06.2015
Сообщений: 393
По умолчанию

SQLite + шифрование
Бекенд в облаке со своим API на прием/отдачу

Приложение обращается к серверу, синхронизирует по "какой-то" логике данные в локальном хранилище и показывает их тоже по "какой-то" логике

Это всё в общем, т.к. таковы входящие данные в топике

Конкретизируй немного инфу и можно углубляться в конкретику.
Всякие TAdvStringGrid и TEdit и нафиг не нужны на данном этапе
Вы там держитесь.
TaLadno вне форума Ответить с цитированием
Старый 14.03.2016, 16:44   #3
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

Цитата:
Конкретизируй немного инфу и можно углубляться в конкретику.
Что именно конкретизировать?

з.ы. бекенд - это что за зверь?О.о

Цитата:
Всякие TAdvStringGrid и TEdit и нафиг не нужны на данном этапе
Ну нужно же хоть какой-то интерфейс для проверки работы программы.

А, и еще, возможно ли на одном ПК имитировать работу с разных (с двумя копиями программы)?

В голову пришла только Доп. ОС на виртуальной машине, но это слишком по-Челябински
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 14.03.2016, 17:10   #4
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Цитата:
Ребят, пора повышать уровень программирования
...и начать надо с того, что есть 3 вещи
1. фронт-энд
2. бэк-энд
3. хранилище данных

Хранилище данных содержит данные, может быть представленно чем угодно.
Бэкэнд управляет бизнес-логикой (обработка и управление данными, т.е. какие-то внутренние процессы, подготовка к вихуализации данных и т.д.), управляет их расположением в хранилище. Фронтэнд это пользовательский интерфейс, визуализация бизнес-логики если хотите, его может не быть вообще.

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

Цитата:
БД хочу защитить своими алгоритмами шифрования, CRC32 пока сложен для понимания.
А за логин/пароль отвечает головой сам пользователь.
Ваша задача защитить базу, выставив на уровне БД уровни доступа к опред. таблицам.

Теперь про программу:
Вам нужно несколько таблиц как минимум:
1. Клиенты - имя, фамилия, отчество, теленфон, id клиента
2. Товары - название, номер, и т.д. и т.п. и id поставщика, id товара
3. Поставщики товаров - организация и т.д. т.п. и номер в системе
4. Заказы - содержит id клиента, id товара, id статуса, дату и время заказа и прочую инфу о сущности "заказ" которую нельзя отнести в таблицу клиента или заказа
5. справочник статусов заказа - id, название, описание

и уже на основе этого можно извращаться с интефрейсом. Я бы не использовал GRID'ы а сразу чистый SQL, а данными бы манипулировал в любом удобном компненте. Гриды не гибгие, хотя не все видел

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

Доступ к базе:
Прямой коннект к БД, при условии, что логин и пароль пользователя это доступ к базе, и на уровне базы залочен на опред. действия с опред. таблицами. Можно придумать что-то с crc32 для логина и md5 для пароля с солькой.

Ставьте себе OpenServer запускайте его на СУБД mySQL, PostgreeSQL, MariDB или иным другим и играйтесь с базой. Не надо мороится, что за ас уже там настроили.

Цитата:
SQLite + шифрование
Бекенд в облаке со своим API на прием/отдачу
SQLite на то и Lite т.к. максимум что там можно, это доступ нескольких копий ПО к одной базе. Для этого и разрабатывалась собственно, чтобы СУБД не ставить целиком. А вы из неё СУБД пытаетесь сделать, зачем?

Последний раз редактировалось Человек_Борща; 14.03.2016 в 17:26.
Человек_Борща вне форума Ответить с цитированием
Старый 14.03.2016, 17:28   #5
TaLadno
Форумчанин
 
Регистрация: 03.06.2015
Сообщений: 393
По умолчанию

Цитата:
Сообщение от Человек_Борща Посмотреть сообщение
SQLite отметатайте сразу, иначе получится так, что у каждого пользователя будет собственная БД. А вам надо мнопользовательское приложение с единым хранилищем.
SQLite имелась ввиду как локальное хранилище, в которое будет синхриться из облака (имеем возможность работы в оффлайн режиме + всякие там выборки на клиентской стороне, которые не нагружают лишней работой сервер).

Я бы делал так на примере тех же заказов:
Первый запуск программы - полное обновление (или не полное, опять же в зависимости от логики программы)
Очередной запуск - частичное обновление (в зависимости от того, что изменилось с последнего обновления. Пихай в таблицу поле LastUpdateTime и выгребай по нему все записи, которые изменились с последней синхронизации)
"Онлайн" работа программы - динамическое обновление данных (ну тут уже или по таймеру, что есть "фу-фу-фу" или же нормальные PUSH-уведомления)


Цитата:
Ставьте себе OpenServer запускайте его на СУБД mySQL, PostgreeSQL, MariDB или иным другим и играйтесь. Не надо мороится, что за ас уже там настроили.
OpenServer ну может быть, не использовал, не знаю как оно там. Надо будет потыкаться тама

Цитата:
Сообщение от Человек_Борща Посмотреть сообщение
SQLite на то и Lite т.к. максимум что там можно, это доступ нескольких копий ПО к одной базе. Для этого и разрабатывалась собственно, чтобы СУБД не ставить целиком. А вы из неё СУБД пытаетесь сделать, зачем?
Это у мну "выражовывание" захромало на обе ноги. Ни в коем разе не имел ввиду SQLite как серверное хранилище/СУБД

Цитата:
Сообщение от Алексей_2012 Посмотреть сообщение
з.ы. бекенд - это что за зверь?О.о
как-то так http://www.wikireality.ru/wiki/%D0%9...B5%D0%BD%D0%B4

Цитата:
Сообщение от Алексей_2012 Посмотреть сообщение
Ну нужно же хоть какой-то интерфейс для проверки работы программы.
Да, нужно, но на этапе отладки "архитектуры" абсолютно не важно (хоть вообще рандомные наборы строк отправляй)
Ня, почитай https://ru.wikipedia.org/wiki/%D0%9C...BF%D0%BA%D0%B0 (можешь забить после прочтения)
Цитата:
Сообщение от Алексей_2012 Посмотреть сообщение
А, и еще, возможно ли на одном ПК имитировать работу с разных (с двумя копиями программы)?

В голову пришла только Доп. ОС на виртуальной машине, но это слишком по-Челябински
Да хоть 10 разных иммитаций, ни разу что ли не запускал копию ехе с другой папки?)
Вы там держитесь.

Последний раз редактировалось TaLadno; 14.03.2016 в 17:38.
TaLadno вне форума Ответить с цитированием
Старый 14.03.2016, 17:47   #6
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Цитата:
Я бы делал так на примере тех же заказов:
Первый запуск программы - полное обновление (или не полное, опять же в зависимости от логики программы)
Очередной запуск - частичное обновление (в зависимости от того, что изменилось с последнего обновления. Пихай в таблицу поле LastUpdateTime и выгребай по нему все записи, которые изменились с последней синхронизации)
"Онлайн" работа программы - динамическое обновление данных (ну тут уже или по таймеру, что есть "фу-фу-фу" или же нормальные PUSH-уведомления)
Цитата:
SQLite имелась ввиду как локальное хранилище, в которое будет синхриться из облака (имеем возможность работы в оффлайн режиме + всякие там выборки на клиентской стороне, которые не нагружают лишней работой сервер).
Тогда только СУБД Firebird, по крайней мере для windows можно будет сделать репликацию локальных изменений в основную субд. А вся клиентская часть БД перекачивается в локальную встраиваемую БД от того же firebird. Одна БД, 2 источника, 2х зайцев одним выстрелом.

Проблема в другом, шифруемую SQLite надо компилировать самому, а хорошо шифруемая SQLite стоит денег, но оно того стоит.
А Firebird не имеет шифрования на сколько помню.

Цитата:
OpenServer ну может быть, не использовал, не знаю как оно там. Надо будет потыкаться тама
Очень удобный HTTP-сервер, сразу тащит за собой стопитцов субд, манагеров кеша и прочих плюшек.
Человек_Борща вне форума Ответить с цитированием
Старый 15.03.2016, 00:47   #7
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,875
По умолчанию

Цитата:
Сообщение от Алексей_2012 Посмотреть сообщение
Ребят, пора повышать уровень программирования, но т.к. я экономист - самому разобраться будет сложно в общем суть такая...
...
БД хочу защитить своими алгоритмами шифрования, CRC32 пока сложен для понимания.
Действительно экономист.
2 Алексей_2012, "для на всякий случай", CRC8/16/32 ни разу не имеют отношения к какому-либо шифрованию

P.S. "Для на всякий случай 2", MD5 тоже не имеет никакого отношения к шифрованию.

Последний раз редактировалось northener; 15.03.2016 в 00:53.
northener вне форума Ответить с цитированием
Старый 15.03.2016, 14:26   #8
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Цитата:
northener
, он через CRC32 хотел пониимать, изменилась ли БД в облаке.

ТС начните изучение написания ПО для СУБД с чтения книги по какой-либо СУБД. Книгу берите по любой реляционной, в той части которую вы даже на 100% не задействуете, и которую вам надо изучить, все существующие СУБД более чем похожи. Остальное уже ньюансы конкретных реализаций и какими-то крутыми возможностями у конкретных СУБД (например у оракла есть свои крутые фичи, а у Postgre свои).

Ну и насчет открытой шифровнной SQLite скау что есть некое ПО, которое эту самую БД может расшифровывать.
Человек_Борща вне форума Ответить с цитированием
Старый 16.03.2016, 00:18   #9
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,875
По умолчанию

[QUOTE=Человек_Борща;1587009], он через CRC32 хотел пониимать, изменилась ли БД в облаке./QUOTE]
Не уверен.
northener вне форума Ответить с цитированием
Старый 16.03.2016, 00:48   #10
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

да, через контрольные суммы хотел это сделать, попутал CRC32 с шифрованием
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Клиент-серверная игра Змейка Anny_Apple Gamedev - cоздание игр: Unity, OpenGL, DirectX 4 13.03.2014 01:24
Клиент-серверная БД в Delphi jediAlex БД в Delphi 1 15.10.2009 00:16