Topic: Вопрос по БД

Добрый день! Схема следующая:
к ардуино подключен считыватель карт (RC522) который считывает карту и бросает её в монитор порта, эта часть работает отлично. У персонала имеются карты - пропуска у каждого свой собственный. Задача следующая: создать простую БД, привязать уникальный номер карты к каждому сотруднику. С этим проблем нет, я воспользовался скриптом com порта, любезно предоставленным автором, с него получаю данные в MVDB. Теперь хотелось бы добиться автоматизации процесса, то есть при считывании карты, что бы в любом месте БД, открывалась форма в которой уже найденному владельцу карты можно было бы выдать какой либо инвентарь,  при считывании другой карты, автоматически находился другой сотрудник и соответственно ему выдавался другой инвентарь. Знаю C++ на уровне программирования контроллеров а вот с паскалем не знаком, сижу разбираюсь. Подскажите возможно ли такое реализовать? Быть может есть какие то готовые примеры? По завершении проекта, не зависимо от того помогут мне или нет, я выложу его в открытый доступ потому как альтернатив я не нашёл на просторах рунета, что весьма странно ведь такой формат БД очень актуален особенно сейчас когда пропускные карты есть почти везде на предприятиях. Спасибо за внимание, разработчику отдельное спасибо за очень простой и функциональны продукт!

Re: Вопрос по БД

Приветствую.


Думаю это вполне можно реализовать.


На чем конкретно вы остановились? Для начала необходимо, чтобы проект работал и без чтения COM порта, т.е. можно было вызвать форму с владельцем карты и присвоить ему инвентарь, а затем уже можно реализовать работу с COM портом.


Можете приложить ваш проект (zip файл без exe и dll), постараюсь помочь.

Dmitry.

Re: Вопрос по БД

Отправил проект в почту.

Re: Вопрос по БД

доработал ваш проект, к сожалению нет возможности протестировать работу с COM портом, поэтому разместил на форме кнопку Тест


также удалил часть скрипта, который позволяет искать в ComboBox, т.к. в последних версиях это можно сделать, просто установив свойство компонента Searchable = True

Post's attachments

Attachment icon Склад_fixed.zip 9.09 kb, 358 downloads since 2018-07-05 

Dmitry.

5 (edited by legolas-novo 2018-07-10 14:05:26)

Re: Вопрос по БД

Добрый день. Спасибо все работает как надо! Подскажите пожалуйста, есть ли пример скрипта, что бы при нажатии кнопки комбобокс очищался? Как очистить Edit я разобрался. И еще подскажите как сделать что бы по умолчанию всегда на главной форме курсор бы на комбобоксе "техника" ? Поясню, работник прикладывает карточку, после его считывания, кладовщик берет считыватель кодов и начинает пропикивать инвентарь, не нажимая каждый раз мышкой на комбобокс "техника". Это создаст полную автоматизацию процесса.

6 (edited by legolas-novo 2018-07-10 07:42:07)

Re: Вопрос по БД

Скетч для ардуино который считывает только UID в HEX формате для этой БД если кому нибудь пригодится

Post's attachments

Attachment icon UID Nano.txt 622 b, 576 downloads since 2018-07-10 

Re: Вопрос по БД

legolas-novo wrote:

Добрый день. Спасибо все работает как надо! Подскажите пожалуйста, есть ли пример скрипта, что бы при нажатии кнопки комбобокс очищался? Например в форме "техника" при добавлении наименования и инвентарного номера, при нажатии кнопки добавить, оба комбобокса очищались, на главной форме только один комбобокс. И еще подскажите как сделать что бы по умолчанию всегда на главной форме курсор бы на комбобоксе "техника" ? Поясню, работник прикладывает карточку, после его считывания, кладовщик берет считыватель кодов и начинает пропикивать инвентарь, не нажимая каждый раз мышкой на комбобокс "техника". Это создаст полную автоматизацию процесса.

А какие карточки и считыватели вы используете?

Re: Вопрос по БД

считыватель RC522 через ардуино Nano. Карточки mifare.

Re: Вопрос по БД

С комбобоксом вроде разобрался так:
procedure Form1_Button1_OnAfterClick (Sender: TObject; var Cancel: boolean);
begin

   Form1.ComboBox2.dbItemID := -1;
end;

Re: Вопрос по БД

Вроде и с фокусом разобрался
procedure Form1_Button1_OnAfterClick (Sender: TObject; var Cancel: boolean);
begin

   Form1.ComboBox2.dbItemID := -1;
    Form1.ComboBox2.SetFocus;
end;

Re: Вопрос по БД

Буду пробовать дальше уже в реальной работе

12 (edited by legolas-novo 2018-08-22 11:36:02)

Re: Вопрос по БД

Доброго времени суток Дмитрий!  Возник вопрос который самостоятельно решить я не смогу. На данный момент все работает но возникла задача организовать статистику получаемого и сдаваемого инвентаря. Сейчас все работает так: подходит человек , прикладывает карточку, открывается его страница с инвентарём, далее кладовщик начинает пропикивать инвентарь и он автоматически добавляется человеку. Я хотел изначально с Вашей помощью реализвать что бы вечером по окончании работ человек прикладывал карточку, кладовщик пропикивает получаемый назад инвентарь и он автоматически удаляется, но так как нужна статистика то я ввел комбобокс "состояние" на главной форме с двумя значениями - выданно/сдано. Скажите возможно ли такое что оператор выбирает в начале дня значение выданно, выдаёт инвентарь, а вечером когда его возвращают то если инвентарь уже есть в БД с пометкой "выданно" то он автоматически меняет состояние на "сдано". Соответственно если он есть в БД с пометкой "сдано" то он может выдатся вновь уже новой записью. Таким образом останется статистика. Подскажите возможно ли такое ?, есть ли у Вас подобные примеры? Быть может есть варианты проще? Например создать вторую таблицу связанную с первой но если в первой удаляется то во второй остаётся? Очень нужна ваша помощь, извините за длинный текст. На всякий случай проект прилагаю.

Post's attachments

Attachment icon Склад_fixed.zip 350.75 kb, 334 downloads since 2018-08-22 

Re: Вопрос по БД

Не понял на счет статитистики, ее необходимо вести? Т.е. запоминать, кто, когда, что брал и когда вернул?

Dmitry.

Re: Вопрос по БД

Да совершенно верно

Re: Вопрос по БД

Достаточно даже того когда вернул

16 (edited by m.prokhachev 2018-08-22 21:43:01)

Re: Вопрос по БД

Это не статистика, это логгирование или ведение истории "аренды" инвентаря... Для этого нужна отдельная таблица, на мой взгляд... Где будет ссылка-ключ на человека, дата дневной "аренды" и ссылка-ключ на предмет, который брался в "аренду" на день. Возможна так же пометка о статусе "аренды" - взял или сдал... Если это на несколько дней - то дата начала "аренды" и дата окончания "аренды"... Ой, что-то мне это напоминает... Где-то, блин, уже читал... В какой-то книжке электронной, угу... )))
Интересные вы ребята, леголасы... Значит, с ардуино работать - нет проблем, а простейшую БД для аренды инвентаря написать - уже сложно))) Научите меня с ардуино работать, а?)

17 (edited by legolas-novo 2018-08-23 07:33:45)

Re: Вопрос по БД

m.prokhachev wrote:

Это не статистика, это логгирование или ведение истории "аренды" инвентаря... Для этого нужна отдельная таблица, на мой взгляд... Где будет ссылка-ключ на человека, дата дневной "аренды" и ссылка-ключ на предмет, который брался в "аренду" на день. Возможна так же пометка о статусе "аренды" - взял или сдал... Если это на несколько дней - то дата начала "аренды" и дата окончания "аренды"... Ой, что-то мне это напоминает... Где-то, блин, уже читал... В какой-то книжке электронной, угу... )))
Интересные вы ребята, леголасы... Значит, с ардуино работать - нет проблем, а простейшую БД для аренды инвентаря написать - уже сложно))) Научите меня с ардуино работать, а?)

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

"Значит, с ардуино работать - нет проблем"  проблем предостаточно.

18 (edited by m.prokhachev 2018-08-23 16:47:47)

Re: Вопрос по БД

Ну что я могу сказать... Логика работы БД с бабушкой в качестве оператора тогда мне представляется такой:
1) приходит человек с RFID-картой за инвентарем, а на инвентаре у нас штрих-кода.
2) человек подносит RFID-карту к считывателю, прога автоматом определяет ID человека и выскакивает форма с профайлом по этому человеку
3) бабушка пропикивает штрих-коды нескольких единиц инвентаря, которые прога отмечает в БД как взятые в "аренду" со ссылкой на ID чкеловека
4) у этих единиц инвентаря в БД статус "сдано"
5) приходит этот же человек с этой же RFID-картой и бабушка пропикивает сданный ей инвентарь назад, при открытом профайле со уже определенным (тем же) ID человека в БД
6) процедура пропикивания приводит к тому, что единицы инвентаря получают статус "возвращено", а записи со ссылкой на человека так и остаются в БД
Какие мои соображения... Минимум три таблицы.
Таблица с профилями людей Emploees, таблица со списком инвентаря Equipment и собственно таблица движения инвентаря RentsLog.
Таблица Emploees должна содержать данные о RFID-карте и другие сведения о сотруднике (вплоть до фото - имеется же такая возможность, ну!). Таблица Equipment содержит наименование единицы инвентаря, штрих-код, нанесенный на этот самый инвентарь, ну и прочие описания ("лопата зеленая, с деревянной ручкой, с выщербленкой у основания штыка"). Ну а таблица RentsLog содержит сведения такие: ссылка-ключ id_Emploees, ссылка-ключ id_Equipment, чек-бокс на "взято в аренду", чек-бок на "отдано из аренды", дата-время взятия в аренду, дата-время возвращения из аренды. Собственно и все.
В самой программе в гриде тупо поставить "режекторный" фильтр на отображение тех записей RentsLog, у которых чек-бокс на "отдано из аренды" равен false или 0 (уж сами определитесь). То есть бабушка при открытом профиле человека пикает инвентарь - инвентарь появляется в списке взятого человеком оборудования, пикает этот же инвентарь второй раз - инвентарь пропадает из списка взятого человеком оборудования. Ну и запилить отдельную форму, где можно тупо смотреть по ID человека и штрих-коду инвентаря историю сколько раз и когда был взят этот инвентарь этим человеком.
По моему, все просто) за основу можно взять проект из книги по MVD, там больше половины функционала уже реализовано, прикрутить только считыватели и изменить структуру БД.

Re: Вопрос по БД

m.prokhachev wrote:

Ну что я могу сказать... Логика работы БД с бабушкой в качестве оператора тогда мне представляется такой:

Спасибо огромное за подробный ответ! Я перечитал его раз 10 если честно что бы ничего не упустить. То что вы описываете вроде бы у меня уже реализовано, разве не так? 3 таблицы , 1 с людьми и uid , 2 с техникой и штрих кодом,3 имеет ключ к предыдущим 2 и комбобокс - выданно\сдано, не чек бокс как вы предлогаете правда. Я просто думал использовать скрипт проверки дублирования данных, в частности по штрих коду инвентаря и в случае совпадения что то уже менять в графе типа данные комбобокса выданно\сдано. Собственно это я пытался спросить у разработчика только естественно сделал это через одно место. Чек бокс меня вполне устроит как вы предлагаете. Как реализовать 6 пункт в вашем сообщении можете мне подсказать? Просто блин по паскалю даже на работе спросить не у кого.  Я посмотрю конечно пример завтра сразу же с утра, каюсь его я не додумался глянуть. Еще раз спасибо!

20 (edited by m.prokhachev 2018-08-23 19:08:09)

Re: Вопрос по БД

Я бы все-таки порекомендовал разделить на два поля состояние взято/сдано. Это в перспективе вкупе с двумя полями типа дата-время позволит найти злостный несдавальщиков инвентаря.
А алгоритм пункта 6 на мой взгляд выглядит так:
1) пропикали инвентарь, получили штрих-код
2) запросом в БД проверили этот штрих код на человека (точно ли он взял) и на состояние "сдано в аренду" (может, не сдано, ну? подсовывают такой же инвентарь с другим штрих-кодом)
3) если условия выполняются - ставим статус в табилце RentLogs по данному инвентарю "возвращено из аренды", и все
А чек-бокс на форме хорош тем, что он автоматом может ставиться в галку, или убирать галку по пропикиванию инвентаря... А так же быть в третьем состоянии ни да, ни нет на момент выдачи инвентаря. Опять же, это мое ИМХО.
Самое трудное тут будет - получение события от RFID-сканера и сканера штрих-кода...

Re: Вопрос по БД

m.prokhachev wrote:

Я бы все-таки порекомендовал разделить на два поля состояние взято/сдано. Это в перспективе вкупе с двумя полями типа дата-время позволит найти злостный несдавальщиков инвентаря.
А алгоритм пункта 6 на мой взгляд выглядит так:
1) пропикали инвентарь, получили штрих-код
2) запросом в БД проверили этот штрих код на человека (точно ли он взял) и на состояние "сдано в аренду" (может, не сдано, ну? подсовывают такой же инвентарь с другим штрих-кодом)
3) если условия выполняются - ставим статус в табилце RentLogs по данному инвентарю "возвращено из аренды", и все
А чек-бокс на форме хорош тем, что он автоматом может ставиться в галку, или убирать галку по пропикиванию инвентаря... А так же быть в третьем состоянии ни да, ни нет на момент выдачи инвентаря. Опять же, это мое ИМХО.
Самое трудное тут будет - получение события от RFID-сканера и сканера штрих-кода...

Получить со считывателя rfid меток событие если я правильно вас понял это как раз совсем не трудное, ибо считыватель у меня прикручен к ардуино а там все таки понятный c++ на котором все реализовано. Разработчик mvdb любезно предоставил скрипт для монитора com порта который принимает с ардуины сигнал, а так же реализовал открытие страницы сотрудника при считывании rfid карты. Это все уже реализовано и работает. Так как с паскалем я не знаком от слова совсем то 2 и 3 пункты для меня сложно выполнимы ( но думаю все же рано или поздно выполнимы) просто придется помучится и поискать примеры , поныть на форумах - вот как сейчас, и я это сделаю (читай за меня это сделают или разжуют как для тупого) ибо повторюсь ни в запросах ни в паскале я не понимаю. Но спасибо за подсказку, буду думать и в этом направлении.

Re: Вопрос по БД

Господи, да Паскаль достаточно простой язык... Достаточно прочитать пару учебников. Я бы хотел помочь, честно, но не хочу давать невыполнимых обещаний, ибо у самого нету времени, так как свой проект имеется и своя работа. Сегодня я отправил запрос на покупку ключа к MVD, так как кончается пробный период. Посильную помощь могу оказать только по конкретике - и то, через дней 10, как получу ключ.

Re: Вопрос по БД

m.prokhachev wrote:

Господи, да Паскаль достаточно простой язык... Достаточно прочитать пару учебников. Я бы хотел помочь, честно, но не хочу давать невыполнимых обещаний, ибо у самого нету времени, так как свой проект имеется и своя работа. Сегодня я отправил запрос на покупку ключа к MVD, так как кончается пробный период. Посильную помощь могу оказать только по конкретике - и то, через дней 10, как получу ключ.

Спасибо большое, пока сам попробую) тоже будем покупать mvdb но как база будет готова. Спасибо за участие.

Re: Вопрос по БД

Я бы больше расспросил вас про считыватели, ардуино и прочая... Вдруг понадобится на будущее. Что, как, где.

Re: Вопрос по БД

m.prokhachev wrote:

Я бы больше расспросил вас про считыватели, ардуино и прочая... Вдруг понадобится на будущее. Что, как, где.

Спрашивайте, отвечу на любые вопросы. Касаемо конкретно этого проекта то я планирую все сделать и выложить базу, новый скетч для ардуино вместе с библиотекой и ссылки на алиэкспресс всей техники что я использовал. Поначалу было одно, потом все сложнее и сложнее. В итоге остановился на считывателе с интерфейсом wiegand-26. Для штрих кодов взял самый простой usb сканер фирмы атол. Штрих коды генерируются через exel. Все проще простого.