![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Меня зовут Серега. Все что я скажу, попрошу воспринять адекватно. Я не программист и не учился по этой специальности. Но судьба так сложилась, что пришлось работать системным администратором. Хотя это, как попутное занятия к моим основным обязанностям. Бог свидетель я не хотел этого, но есть - то, что есть. Раньше обходилось, но теперь поставили задачу сделать БД в которую человек будет вносить данные, а другие люди с сайта будут ее смотреть и пользоваться ней.Еще нужно -будет делать импорт из 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
|
|||
|
|||
![]() Все правильно тебе посоветовали, mysql + delphi 7, раз тебе нужно отображение информации из базы на веб интерфейсе.
|
#3
|
|||
|
|||
![]() В приципе, сказали правильно. Есть еще вариант - 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
|
||||
|
||||
![]() Цитата:
— Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#5
|
|||
|
|||
![]() Ну да, можно им.
Но лично мне проще руками эти скрипты писать. Меньше разного мусора в них будет. |
#6
|
|||
|
|||
![]() Здравствуйте. Сделал 30 минутный видео-отчет, по тому, что на данный момент уже сделано: по созданию БД и написанию клиента к ней. Это конечно не так много, как хотелось бы, но что есть-то есть...
https://www.youtube.com/watch?v=nDb6jWK3WS8 |
#7
|
|||
|
|||
![]() Ну, для новичка сойдет.
Что можно посоветовать... 1. Посмотреть, что такое MDI-приложение. 2. Больше пользоваться встроенными возможностями DataAware компонентов, что бы не писать кучу кода на каждую кнопку. 3. Еще раз подумать над дизайном интерфейса. Яркий пример - в одной из форм часть полей, отображающих доп информацию находится над списком записей, часть - под списком. Это большой просчет в эргономике. 4. Те же справочники делать по общепринятой схеме - открывается список, из него идет добавление, редактирование и удаление элементов списка (по началу можно просто через DBGrid, диалоговую форму можно "прикручивать" потом). |
Этот пользователь сказал Спасибо lmikle за это полезное сообщение: | ||
s2000 (18.09.2016)
|
#8
|
|||
|
|||
![]() Понял. Спасибо большое! Эргономика, очень важна для меня - переделаю. У меня есть вопрос по логической составляющей. Я толком и объяснить то не могу, но постараюсь... У меня есть таблица - ОСНОВНАЯ ТАБЛИЦА. Записи этой таблицы имеют уникальный порядковый номер. Но вот, когда пользователь выборочно формирует эти записи в ДРУГУЮ ТАБЛИЦУ - СТАРТОВЫЙ ПРОТОКОЛ - нужно учитывать порядок их добавления. И проблема в том, что порядок добавления одних и тех же записей, в зависимости от даты добавления может меняться. И я не могу придумать, как это реализовать. Я нарисовал как смог, в т.ч. для себя - может придет озарение... Посмотрите пожалуйста- мне легче нарисовать, чем объяснить на словах. Извините за путаницу. На видео для наглядности этот момент начинается с 15:15
C уважением Сергей! |
#9
|
|||
|
|||
![]() Пока излагал все это. Пришла мысль. Если одинаковые события происходят в разные даты с одними и теми же записями, то хранить это все в рамках одно таблицы видимо не выйдет. Но и создавать 30-40 таблиц с большим объемом данных не хочется, так как эти данные будут дублировать данные основной таблицы и справочников, то может при каждом новом событии - создавать таблицу, где хранить только: Дату события, уникальный номер записи и порядковый номер, который получила эта запись именно в это число месяца? А потом с помощью SQL вытягивать на основе этих полей-идентификаторов, все необходимые данные уже в развернутом виде. То есть получается - создавать не таблицу с набором данных, а таблицу с идентификаторами, по которым, при необходимости, можно будет запросом вытаскивать из БД всю остальную информацию? Как-то так. Я же смогу создать хранимую процедуру, которая будет создавать такие таблицы-идентификаторы по необходимости? Пусть их будет хоть 60 за месяц - они ведь будут совсем маленькие по размеру - на три поля и максимум на 200 записей +/- А в конце года - делать Бекап базы и удалять их...
MDI-приложение - Посмотрел, да было бы замечательно так все реализовать... Благодарю за подсказку. Последний раз редактировалось s2000, 17.09.2016 в 14:13. |
#10
|
|||
|
|||
![]() А просто добавить дату как ключ нельзя?
Т.е.: Код:
CREATE TABLE CompetitionList ( CompetitionDate DATE, CompetitionNum INTEGER, HorseID INTEGER REFERENCES HORSES.ID, JokkeyID INTEGER REFERENCES JOKKEYS.ID ... ); Код:
select distinct CompetitionDate from CompetitionList |
Этот пользователь сказал Спасибо lmikle за это полезное сообщение: | ||
s2000 (18.09.2016)
|
#11
|
|||
|
|||
![]() Здравствуйте. У меня в запросе участвуют 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; Во вложении - скрин дубликатов. |
#12
|
|||
|
|||
![]() 1. Видимо, отличается четвертое выбираемое поле. Вероятно, TehRezSupport.TehRezStartID.
2. Вообще тут DISTINCT'а не должно быть. Здесь надо отфильтровывать на уровне WHERE. 3. Ну и переделать через JOIN, более читабельно и быстрее работает. 4. И совсем для красоты - использовать алиасы для таблиц, а то вообще глаза можно сломать. Последний раз редактировалось lmikle, 20.09.2016 в 18:57. |
#13
|
|||
|
|||
![]() Случайно продублировал два одинаковых поста, как удалить этот не нашел...
Последний раз редактировалось s2000, 20.09.2016 в 14:56. |
#14
|
|||
|
|||
![]() У меня вопрос возник - можно написать оператор Delete таким образом, что бы удалялись все значения по определенному полю, при этом что бы соответствующие записи в остальных полях оставались неизменными?
Или писать цикл, идущий от первой строки до последней и SQL запрос, выполняющий удаление из нужного мне поля построчно? Например, есть поля А,B,C - они заполнены данными - мне нужно очистить данные поля С, но в А и В те данные, что были должны остаться... |
#15
|
|||
|
|||
![]() Дык это не DELETE, а UPDATE:
Код:
UPDATE [TableName] SET C = NULL WHERE [FilterCondition] -- если нужно только в опр. записях ЗЫ. DELETE удаляет записи. |
Этот пользователь сказал Спасибо lmikle за это полезное сообщение: | ||
s2000 (20.09.2016)
|