Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 19.07.2016, 22:41
s2000 s2000 вне форума
Прохожий
 
Регистрация: 19.07.2016
Сообщения: 9
Версия Delphi: Delphi Seattle
Репутация: 10
По умолчанию Заставили делать БД и писать клиента к ней, а я почти НОЛЬ

Меня зовут Серега. Все что я скажу, попрошу воспринять адекватно. Я не программист и не учился по этой специальности. Но судьба так сложилась, что пришлось работать системным администратором. Хотя это, как попутное занятия к моим основным обязанностям. Бог свидетель я не хотел этого, но есть - то, что есть. Раньше обходилось, но теперь поставили задачу сделать БД в которую человек будет вносить данные, а другие люди с сайта будут ее смотреть и пользоваться ней.Еще нужно -будет делать импорт из MS Office 2007-2010 в СУБД. Мне предложили сделать это в Acces но в нем не разбираюсь. Подумал и вспомнил, что на у уроках информатики я посещал секцию Turbo Pascal и был не самым худшим в группе. Я даже когда-то помог товарищу с Телекома и привел в божеский вид номера телефонов области, посредством Delphi+Sybase. Но было это 12 лет тому назад... И программа была мягко говоря не очень дружественная к пользователю, а про стиль программирования я вообще молчу...
Но как бы там ни было, благодаря плохим людям, мне не выйдет найти фрилансера, котрому контора заплатит - мне нужно будет делать самому. И от этого мне не по себе... Плюс еще нужно же подумать о коммерческой стороне вопроса - мне нужна бесплатная СУБД...

И вот мы подошли к сакральной и банальной фразе: "Люди - пожалуйста ПОМОГИТЕ!!!! "

Я в ВК обратился по группам со своими вопросами - аудитория 14 000 чел. - ответил только один! Все остальные продают себя! Как - так? Я помогаю людям в основном просто - так. И никогда не просил ничего в замен. А тут мне понадобилось - и такая ситуация...
В общем тот человек, который ответил - один из 14 000 чел. сказал, что мне нужно: "mysql + delphi 7 + zeos. И вперед!" Я прекрасно понял, что он имел ввиду. Так и делаю пока-что. Но все таки решил зайти на проф. форум и спросить еще у вас. В чем я сомневаюсь, так это в выборе среды - почему Delphi 7? - она надежная, но старая чуток. На работе все стало без проблем, но дома - почему-то не очень - висело пол часа потом, что-то установило и на Визи-брокер наругалось... Система чистая - ось - MSDN образ и. т.д. (не лох - знаю, что к чему)

И основная мысли моего долгого повествования - есть добровольцы, которые смогут без раздражения отвечать, на некоторые ключевые вопросы, которые у меня будут возникать в процессе работы? Обещаю не задавать глупые вопросы - я НЕ ПРОШУ СДЕЛАТЬ ПРОЕКТ ВМЕСТО МЕНЯ - просто мне нужно с кем, то советоваться - я никогда ничего такого не делал.

В моем понимании сначала нужно:

1. Создать БД, справочники (таблицы с константами - дынными, которые не будут меняться, или будут, но очень редко)
2. Разбить и сгруппировать всю инфу по таблицам
3. Написать хранимые процедуры (добавление, редактирование и т.д.)
4. Разработать систему отчетов на основе Rave report
5. Написать клиентское приложение, котрое облегчить работу с БД для конечного пользователя
6. Заполнить БД данными
7. Перенести БД на хостинг
8. Отладить работу клиента и СервераБД в боевых условиях
9. Отблагодарить всех, кто помогал.

Спасибо всем, кто прочитал это чтиво - много текста, потому, что я хотел быть искренним.

С уважением Сергей!

Последний раз редактировалось s2000, 19.07.2016 в 23:22.
Ответить с цитированием
  #2  
Старый 20.07.2016, 10:59
ApxaHGe1 ApxaHGe1 вне форума
Активный
 
Регистрация: 08.04.2008
Адрес: Нижний новгород
Сообщения: 311
Репутация: 38
По умолчанию

Все правильно тебе посоветовали, mysql + delphi 7, раз тебе нужно отображение информации из базы на веб интерфейсе.
Ответить с цитированием
  #3  
Старый 22.07.2016, 05:50
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,057
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

В приципе, сказали правильно. Есть еще вариант - C# + MS SQL + IIS + ASP.Net. Связка тоже хорошо работает, но требует винду на сервере.

Не работал с Zoes, так что тут ничего не скажу. Обычно пользовался либо ADO, либо dbExpress, либо специальными библиотеками (ODAC), В отношении последнего, от них же есть MySqlDAC (или как-то так). Кстати, в новых версиях он доступен "из коробки" - FireDAC.

Теперь по очередности.
1.Анализ задачи и данных. Дизайн схемы БД.
2. Создать БД - написать скрипты (SQL) для создания и первичного заполнения справочников. Это тебе придется делать много раз, так что пиши скрипты сразу.
3. Перенести БД на хостинг, добиться подключения из Delphi и приложения.
4. Создать простенький сайт для просмотра через браузер того, что есть в БД.
5. Написать толстого и тонкого клиента (Delphi и Web). На этом этапе пункты 1 и 2 будут повторяться много раз, т.к. будут идти изменения в БД по мере разработки.
6. Наваять отчеты в программе и в Web. Если с web все понятно. то в программе я бы рекомендовал QuickReport или FastReport. С ними гораздо проще, чем с Rave'ом
7. Сдать заказчику и потребовать от него каких-нить ништяков.

Я бы не советовал использовать хранимые процедуры (ХП) для CRUD, лучше пусть БД занимается только хранением данных. И только массовую обработку, если там что-то большее, чем просто пачка JOIN'ов, делать на ХП. Ну или вообще делать многозвенку, но, мне кажется, тебе это не надо.

По поводу установки Delphi 7 на Windows 7 и старше. Надо ставить под полным администратором. В идеале, и пользователь должен иметь права админа, и запускать установщик тоже надо через Run As Administrator. И после установки, еще до первого запуска, дать полные NTFS права на папку установки (рекурсивно). Вообще, была где-то на интернете инструкция как правильно ставить "7 на 7".

Задавай вопросы, по мере возможностей бум подсказывать.
Ответить с цитированием
  #4  
Старый 22.07.2016, 10:40
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Цитата:
Сообщение от lmikle
1.Анализ задачи и данных. Дизайн схемы БД.
2. Создать БД - написать скрипты (SQL) для создания и первичного заполнения справочников. Это тебе придется делать много раз, так что пиши скрипты сразу.
power designer — редактор er-диаграмм с ф-ей генерации скрипта схемы.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #5  
Старый 23.07.2016, 04:15
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,057
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Ну да, можно им.
Но лично мне проще руками эти скрипты писать. Меньше разного мусора в них будет.
Ответить с цитированием
  #6  
Старый 16.09.2016, 10:41
s2000 s2000 вне форума
Прохожий
 
Регистрация: 19.07.2016
Сообщения: 9
Версия Delphi: Delphi Seattle
Репутация: 10
По умолчанию

Здравствуйте. Сделал 30 минутный видео-отчет, по тому, что на данный момент уже сделано: по созданию БД и написанию клиента к ней. Это конечно не так много, как хотелось бы, но что есть-то есть...
https://www.youtube.com/watch?v=nDb6jWK3WS8
Ответить с цитированием
  #7  
Старый 17.09.2016, 05:35
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,057
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Ну, для новичка сойдет.
Что можно посоветовать...
1. Посмотреть, что такое MDI-приложение.
2. Больше пользоваться встроенными возможностями DataAware компонентов, что бы не писать кучу кода на каждую кнопку.
3. Еще раз подумать над дизайном интерфейса. Яркий пример - в одной из форм часть полей, отображающих доп информацию находится над списком записей, часть - под списком. Это большой просчет в эргономике.
4. Те же справочники делать по общепринятой схеме - открывается список, из него идет добавление, редактирование и удаление элементов списка (по началу можно просто через DBGrid, диалоговую форму можно "прикручивать" потом).
Ответить с цитированием
Этот пользователь сказал Спасибо lmikle за это полезное сообщение:
s2000 (18.09.2016)
  #8  
Старый 17.09.2016, 10:59
s2000 s2000 вне форума
Прохожий
 
Регистрация: 19.07.2016
Сообщения: 9
Версия Delphi: Delphi Seattle
Репутация: 10
По умолчанию

Понял. Спасибо большое! Эргономика, очень важна для меня - переделаю. У меня есть вопрос по логической составляющей. Я толком и объяснить то не могу, но постараюсь... У меня есть таблица - ОСНОВНАЯ ТАБЛИЦА. Записи этой таблицы имеют уникальный порядковый номер. Но вот, когда пользователь выборочно формирует эти записи в ДРУГУЮ ТАБЛИЦУ - СТАРТОВЫЙ ПРОТОКОЛ - нужно учитывать порядок их добавления. И проблема в том, что порядок добавления одних и тех же записей, в зависимости от даты добавления может меняться. И я не могу придумать, как это реализовать. Я нарисовал как смог, в т.ч. для себя - может придет озарение... Посмотрите пожалуйста- мне легче нарисовать, чем объяснить на словах. Извините за путаницу. На видео для наглядности этот момент начинается с 15:15

C уважением Сергей!
Изображения
Тип файла: png Логическое планирование.png (106.5 Кбайт, 6 просмотров)
Ответить с цитированием
  #9  
Старый 17.09.2016, 11:23
s2000 s2000 вне форума
Прохожий
 
Регистрация: 19.07.2016
Сообщения: 9
Версия Delphi: Delphi Seattle
Репутация: 10
По умолчанию

Пока излагал все это. Пришла мысль. Если одинаковые события происходят в разные даты с одними и теми же записями, то хранить это все в рамках одно таблицы видимо не выйдет. Но и создавать 30-40 таблиц с большим объемом данных не хочется, так как эти данные будут дублировать данные основной таблицы и справочников, то может при каждом новом событии - создавать таблицу, где хранить только: Дату события, уникальный номер записи и порядковый номер, который получила эта запись именно в это число месяца? А потом с помощью SQL вытягивать на основе этих полей-идентификаторов, все необходимые данные уже в развернутом виде. То есть получается - создавать не таблицу с набором данных, а таблицу с идентификаторами, по которым, при необходимости, можно будет запросом вытаскивать из БД всю остальную информацию? Как-то так. Я же смогу создать хранимую процедуру, которая будет создавать такие таблицы-идентификаторы по необходимости? Пусть их будет хоть 60 за месяц - они ведь будут совсем маленькие по размеру - на три поля и максимум на 200 записей +/- А в конце года - делать Бекап базы и удалять их...

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

Последний раз редактировалось s2000, 17.09.2016 в 14:13.
Ответить с цитированием
  #10  
Старый 17.09.2016, 23:22
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,057
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

А просто добавить дату как ключ нельзя?
Т.е.:
Код:
CREATE TABLE CompetitionList
(
CompetitionDate DATE,
CompetitionNum INTEGER,
HorseID INTEGER REFERENCES HORSES.ID,
JokkeyID INTEGER REFERENCES JOKKEYS.ID
...
);
тогда твоим первичным ключем будет пара вышеуказанных полей (CompetitionDate, CompetitionNum). Ну и выборку нужно будет делать с учетом даты. Список уникальных дат можно получить (в интерфейс, если надо) из этой таблицы так:
Код:
select distinct CompetitionDate from CompetitionList
ЗЗЫ. по поводу дублирования данных. Читаем о 3й нормальной форме. Естестенно, дублирования быть не должно (за исключением особых случаев денормальзации для облегчения построения отчетов). Соотв. в этой таблице просто ссылки на спортсменов/лошадей (см. выше). Кстати, и тут данная таблица денормалтзованна, но, в данном случае, это не так страшно, т.к. избыточное поле только дата. В идеале должна быть таблица, где перечисляются соревнования (id, дата + другая информация), а текущая таблицы просто должна ссылаться на ту, что бы получить ключ.
Ответить с цитированием
Этот пользователь сказал Спасибо lmikle за это полезное сообщение:
s2000 (18.09.2016)
  #11  
Старый 18.09.2016, 13:37
s2000 s2000 вне форума
Прохожий
 
Регистрация: 19.07.2016
Сообщения: 9
Версия Delphi: Delphi Seattle
Репутация: 10
По умолчанию

Здравствуйте. У меня в запросе участвуют 3 таблицы. Запрос работает, но в результате почему, то возникают дубликаты значений. Пытался сделать через UNION - не получилось... В чем моя ошибка?

Код:
DataModule1.DataSource2.DataSet:=Datamodule1.FDQuery2;
TehRezStart.DBGrid5.DataSource:=Datamodule1.DataSource2;
Datamodule1.FDQuery2.Close;
Datamodule1.FDQuery2.SQL.Clear;
Datamodule1.FDQuery2.SQL.Add('SELECT DISTINCT ProtokolStartTeh.NumRecID,ProtokolStartTeh.SportSoName,');
Datamodule1.FDQuery2.SQL.Add('SportHorses.HorseName,TehRezSupport.TehRezStartID');
Datamodule1.FDQuery2.SQL.Add('FROM ProtokolStartTeh,SportHorses,TehRezSupport');
Datamodule1.FDQuery2.SQL.Add('WHERE ProtokolStartTeh.HorseID=SportHorses.ID');
Datamodule1.FDQuery2.SQL.Add('AND   ProtokolStartTeh.DataProved=TehRezSupport.TehRezData');//+DateToStr(TehRezSTART.DateTimePicker1.Date)+  //"2016-09-14"
Datamodule1.FDQuery2.SQL.Add('AND   ProtokolStartTeh.NazvaZmag=:NazZMG');
Datamodule1.FDQuery2.SQL.Add('AND   ProtokolStartTeh.NumMarsh=TehRezSupport.TehRezMarshNum');
Datamodule1.FDQuery2.SQL.Add('ORDER BY TehRezSupport.TehRezStartID');
Datamodule1.FDQuery2.ParamByName('NazZMG').AsString:=TehRezStart.ComboBox2.Text;
Datamodule1.FDQuery2.Prepare;
Datamodule1.FDQuery2.Open;

Во вложении - скрин дубликатов.
Изображения
Тип файла: png 1.png (19.8 Кбайт, 4 просмотров)
Ответить с цитированием
  #12  
Старый 19.09.2016, 04:15
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,057
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

1. Видимо, отличается четвертое выбираемое поле. Вероятно, TehRezSupport.TehRezStartID.
2. Вообще тут DISTINCT'а не должно быть. Здесь надо отфильтровывать на уровне WHERE.
3. Ну и переделать через JOIN, более читабельно и быстрее работает.
4. И совсем для красоты - использовать алиасы для таблиц, а то вообще глаза можно сломать.

Последний раз редактировалось lmikle, 20.09.2016 в 18:57.
Ответить с цитированием
  #13  
Старый 20.09.2016, 14:47
s2000 s2000 вне форума
Прохожий
 
Регистрация: 19.07.2016
Сообщения: 9
Версия Delphi: Delphi Seattle
Репутация: 10
По умолчанию

Случайно продублировал два одинаковых поста, как удалить этот не нашел...

Последний раз редактировалось s2000, 20.09.2016 в 14:56.
Ответить с цитированием
  #14  
Старый 20.09.2016, 14:53
s2000 s2000 вне форума
Прохожий
 
Регистрация: 19.07.2016
Сообщения: 9
Версия Delphi: Delphi Seattle
Репутация: 10
По умолчанию

У меня вопрос возник - можно написать оператор Delete таким образом, что бы удалялись все значения по определенному полю, при этом что бы соответствующие записи в остальных полях оставались неизменными?
Или писать цикл, идущий от первой строки до последней и SQL запрос, выполняющий удаление из нужного мне поля построчно?

Например, есть поля А,B,C - они заполнены данными - мне нужно очистить данные поля С, но в А и В те данные, что были должны остаться...
Ответить с цитированием
  #15  
Старый 20.09.2016, 18:59
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,057
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Дык это не DELETE, а UPDATE:
Код:
UPDATE [TableName]
SET C = NULL
WHERE [FilterCondition] -- если нужно только в опр. записях

ЗЫ. DELETE удаляет записи.
Ответить с цитированием
Этот пользователь сказал Спасибо lmikle за это полезное сообщение:
s2000 (20.09.2016)
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 15:41.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter