Суббота, 20.04.2024, 14:26
Приветствую Вас Гость

Не ошибается тот, кто ничего не делает.
Но и ничего не делать - ошибка.

Эмиль Кроткий

Меню сайта
Категории раздела
База данных "Склад" [14]
Статьи, связанные с программированием баз данных
Форма входа

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0


















Тиц
Главная » Статьи » Базы данных » База данных "Склад"

Delphi. Урок 1.12. Программирование баз данных в Delphi (Создаем формы для учета расхода продуктов на складе)
Содержание


Урок 1.1. Пишем программу складского учета.
Будем писать программу учета продуктов на складе по средней цене прихода. А для этого нам нужно научиться работать с базами данных. Начнем работу с создания базы в MS Access 2007.

Урок 1.2. Создаем главную форму программы склад.
На этом уроке мы создадим главную форму для нашего склада. Создадим подключение, к базе, используя компонент TADOConnection. Используемые компоненты ( TADOConnection ).

Урок 1.3. Создаем главную форму программы склад.
На этом уроке мы продолжим создание главной формы для нашего склада. Разместим основные компоненты, создадим меню... Используемые компоненты (TADOTable, TMainMenu).

Урок 1.4. Создаем подчиненные формы для справочников программы склад.
На этом уроке мы создадим форму для справочника "Единицы измерения"  нашего склада. Используемые компоненты (TButton, TDBGrid, TDataSource ).

Урок 1.5. Создаем подчиненные формы для справочников программы склад.
На этом уроке мы создадим форму для справочника «Категории продуктов» и «Поставщики»  нашего склада. Используемые компоненты (TButton, TDBGrid, TDataSource ).

Урок 1.6. Создаем подчиненные формы для справочников программы склад.
На этом уроке мы создадим форму для справочника «Продукты»  нашего склада c использованием поле Lookup  из других таблиц. Используемые компоненты (TButton, TDBGrid, TDataSource ).

Урок 1.7. Создаем формы прихода продуктов на склад.
На этом уроке мы создадим формы прихода продуктов на склад. Приход продуктов будет состоять из трех форм. В первой мы будем хранить данные о приходе. Во второй, данные о продуктах для каждого прихода. Третья – форма для выбора продуктов. Используемые компоненты (TButton, TDBGrid, TADOTable, TADOQuery, DataModule).

Урок 1.8. Создаем формы прихода продуктов на склад.
На этом уроке мы создадим вторую форму,  в которой будут отражаться данные о продуктах для каждого прихода. Используемые компоненты (TButton, TDBGrid, TADOTable, TADOQuery, DataModule, TDateTimePicker, TDBLookupComboBox).

Урок 1.9. Создаем формы прихода продуктов на склад.
На этом уроке мы создадим последнюю форму для прихода продуктов. В  ней  будет происходить   выбор продуктов прихода. Используемые компоненты (TButton, TDataSource, TDateTimePicker, TDBLookupComboBox, TDBEdit).

Урок 1.10. Программирование баз данных в Delphi - создаем формы прихода продуктов на склад.
На этом уроке мы напишем процедуры для обработки событий для наших форм прихода, созданных на уроках 1.7. – 1.9.

Урок 1.13. Программирование баз данных в Delphi (Создаем модуль печати данных о приходе и расходе).
На этом уроке мы реализуем  печать данных прихода, расхода и состояния склада.  Печать будем реализовывать через MS Excel, то есть это будет не совсем печать, а экспорт данных в MS Excel, а там пользователь может сам выбрать, печатать или сохранить отчет. В начале приготовим шаблоны  MS Excel, в которые будем выводить отчеты

Урок 1.14. Программирование баз данных в Delphi (Создаем модуль для сжатия и восстановления базы данных).


Урок 1.12.
Программирование баз данных в Delphi

(Создаем формы для учета расхода продуктов на складе)

На этом уроке мы поговорим о создании форм расхода продуктов на складе. Учет расхода также как и учет прихода  будет состоять из трех форм. В первой форме будем выводить номер накладной расхода, дату расхода и сумму расхода по накладной.

Программирование баз данных в Delphi (Создаем формы для учета расхода продуктов на складе).

Во второй форме будем выводить список продуктов выбранных для расхода с количеством, ценой и на какую сумму.

Программирование баз данных в Delphi (Создаем формы для учета расхода продуктов на складе).

Ну и в третьей форме мы будем производить выбор продуктов для учета расхода.

Программирование баз данных в Delphi (Создаем формы для учета расхода продуктов на складе).

Как вы видите, первые две формы учета расхода практически не отличаются от первых двух форм учета прихода за одним исключением из второй формы учета расхода убрано поле поставщик. Поэтому и создание этих форм чисто технически не отличается от создания форм прихода. Я например создал первые две формы простым копированием содержимого из форм прихода. Затем переименовал названия компонентов (точнее заменил  слово prihod в rashod_doc, а слово storage в rashod) и подключил одноименные таблицы. А затем написал процедуры обработки форм расхода аналогичные процедурам обработки форм прихода.
Поэтому если вы разобрались с написанием форм прихода на предыдущих уроках, у вас не должно возникнуть проблем и с созданием первых двух форм расхода. А вот по созданию формы выбора продуктов расхода я немного поясню.

Данная форма содержит:

Фильтр по категории продуктов, который активируется по событию OnClick на компоненте CheckBox и выбору категории из выпадающего списка DBLookupComboBox,  подключенного к справочнику категория продуктов;

Таблицу DBgrid подключенную к запросу ADOQuery_ostatki_copy (который является копией запроса ADOQuery_ostatki). В нее выводятся список остатков продуктов на складе;

Программирование баз данных в Delphi (Создаем формы для учета расхода продуктов на складе).

Пять полей DBEdit подключенных к таблице rashod. При двойном клике на поле DBGridа данные из DBGrida (Продукт, единица измерения, средняя цена автоматически заносятся в соответствующие поля,  курсор устанавливается в поле количество). При нажатии кнопки ОК, данные заносятся в таблицу rashod базы данных после прохождения проверки корректности заполненных полей. При попытке ввести количество продуктов больше чем есть на складе, вызывается предупреждение. В случае отмены данные не сохраняются.

Кроме того я добавил выделение зеленым цветом нулевых  и красным цветом отрицательных остатков.

Так как это у нас уроки по базе данных, я предлагаю создать вам все три формы для учета расхода самостоятельно. Но вы всегда можете скачать готовый исходник к уроку и использовать его как шпаргалку. Если возникнут вопросы по созданию форм для данного урока, задавайте на форуме, попробую помочь.

Скачать исходники можно здесь.



Категория: База данных "Склад" | Добавил: xaramamburu (29.08.2011)
Просмотров: 19571 | Комментарии: 51 | Рейтинг: 2.7/6
Всего комментариев: 511 2 »
51 Danil  
0
Не могу понять, как сделать расход

49 Vfhbz  
0
Добрый день, подскажите пожалуйста, при попытке сохранить введенные данные выдает ошибку "Не удается найти строку для обновления. Некоторые значения могли быть изменены со времени ее последнего чтения". Такую ошибку выдает и при заполнении прихода и при заполнении расхода. С чем это может быть связано?

50 xaramamburu  
0
Не зная как у вас происходит заполнение прихода и расхода сложно вам что-то сказать. Но одна из причин, это отсутствие ключевых полей в таблицах, хотя есть и другие причины.)))

47 BlackXacker  
0
Доброго времени суток. Я собрали все уроки до конца без проблем!
После запуска программку пункт расходной дадут ошибка
Cannot perform this operation on a closed dataset
как можно исправит эту ошибками??

48 xaramamburu  
0
Ошибка означает, что вы пытаетесь выполнить какую то операцию, при закрытой таблице или запросе.))))

41 AucT  
0
Выделяет цветом, затупила.

40 AucT  
0
Здравствуйте! Подскажите пожалуйста, что значат эти ошибки при запуске программы появляется окно с тестом
Project storage.exe raised exception class EAccessViolation with message 'Access violation at address 004FDD67 in module 'storage. exe'. Read of address 00000000' После нажатия кнопки continue появляется другое окно с текстом Access violation at address 004FDD67 in module 'storage. exe'. Read of address 00000000. При нажатие слова ок . Программа запускается все добавляет, правда выделения цветом  нет.

42 xaramamburu  
0
Это ошибка доступа к памяти, возникать может из-за чего угодно, например при обращении к не инициализированной переменной значение которой равно Null. В каждом конкретном случае нужно разбираться отдельно.  Но в любом случае нужно в начале определить какая строка кода или процедура ее вызывает.)))

43 AucT  
0
Не подскажете как это сделать?)

46 xaramamburu  
0
1. Запускайте программу в пошаговом режиме по клавише F7. Далее жмете F7 до тех пор пока не вылетит ошибка. Ваша задача отследить стоку, когда это произойдет.
2. Если умеете пользоваться отладчиком, то создайте в процедурах где по вашему предположению вылетает эта ошибка точки останова, ну и снова смотрите на какой строке вылетит ошибка.
3. Используйте комментирование кода. Были случае когда приходилось за комментировать целый модуль, а затем последовательно снимал комментарии включая в модуль по одной процедуре, каждый раз запуская программу и проверяя на наличие ошибки доступа к памяти.

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

Да, если вы остановились на этом уроке, то "ошибка доступа к памяти" здесь чаще всего возникает из-за неправильно написанных SQL запросах.))))

44 AucT  
0
И еще, не могли бы вы подсказать пожалуйста где можно посмотреть как организовать поиск по БД по 5 Edit, чтобы после поиска информация отображалась в TDBGrid. Спасибо

45 xaramamburu  
0
В принципе здесь вариантов не так уж и много:
1. Если вы используете компонент AdoTable то фильтрация организуется с помощью свойства Filter, в это поле записывается условие для фильтрации. В дополнение к нему можно использовать событие OnFilterRecord у этого компонента.
2. Это использование SQL запросов с параметрами и компонента AdoQuery, способ может и сложнее, но после того как разберетесь с SQL запросами все станет на много проще и яснее и на создание БД будите смотреть другими глазами.)))
Вот ссылки по фильтрации:
http://articles.org.ru/cn/showdetail.php?cid=8806
http://delphiworld.narod.ru/base/search_and_filter.html

ну а по SQL запросам информации в интернете море.)))

37 Джон  
0
form_prihod_tov.DateTimePicker1.Date:=sysutils.Date;

почему у меня ругается на "=sysutils.Date;"???????

[DCC Error] select_tov.pas(101): E2003 Undeclared identifier: 'sysutils'
[DCC Error] select_tov.pas(101): E2014 Statement expected, but expression of type 'Variant' found
[DCC Fatal Error] F2063 Could not compile used unit 'select_tov.pas'

38 xaramamburu  
1
Посмотрите подключен ли модуль SysUtils в Uses.)))

39 Джон  
0
прописывал, не получилось((( 
в USES прописано было System.SysUtils, заменил "=sysutils.Date; " на "System.SysUtils.Date" и заработало.
Спасибо за отзыв!!!

35 Kristy  
0
Подскажите пожалуйста, как сделать чтобы продукты в DBDrid фильтровались в форме select_prod_rashod

36 xaramamburu  
0
Если под фильтрацией вы понимаете поиск по названию продукта, то нужно использовать запрос с параметром для поиска или фильтр у таблицы расход. Если под фильтрацией понимается фильтр по категории товара, то здесь можно тоже использовать фильтр у таблицы расход или создать еще один DBGrid, подключить к нему таблицу категорий, а таблицу категорий связать с таблицей расход по полю категория.)))))))))

25 unlimeted  
0
Извените, забыл у вас спросить, подскажите пожалуйста у меня в событии procedure TForm_select_prod_rashod.FormActivate(Sender: TObject); в строчке  dm.ADOQuery_ostatki_copy.Locate('product_name',dbedit1.Text, [loCaseInsensitive, loPartialKey] ) ; на
  [loCaseInsensitive, loPartialKey] )  выдает ошибку [DCC Error] select_prod_rashod.pas(130): E2003 Undeclared identifier: 'loCaseInsensitive',  если убрать эту строчку то все работает вроде в нормально, но в исходниках она работате, будте любезны))))

26 xaramamburu  
0
Странно, эти ключи встречаются не первый раз в данной программе (например в модулях со справочниками продуктов, единиц измерения и т.д.) если это там у вас работает, то и здесь должно работать. Единственное, что могу посоветовать посмотреть прописан ли у вас в Uses модуль DB.)))))))))))

27 unlimeted  
0
Так оно и оказалось, просто прописал его в uses и все заработало, спасибо за совет

23 nasta11  
0
Почему когда я нажимаю кнопку ОК на последней форме "Выбор продуктов" (там где идёт расход товара), у меня появляется ошибка : "невозможно добавление или изменение записи. Для обеспечения целостности данных необходимо наличие связанной записи в таблице "склад" ???

24 xaramamburu  
0
По вашему описанию трудно сказать в чем заключается ваша ошибка. Нужно смотреть сам код программы и конкретно какая строка вызывает данную ошибку. Кроме того непонятно, что за таблица "склад" и какое отношение она имеет к расходу?

20 zelenaia  
0
Можно чуть подробнее рассказать как это делать:
"Пять полей DBEdit подключенных к таблице rashod. При двойном клике на поле DBGridа данные из DBGrida (Продукт, единица измерения, средняя цена автоматически заносятся в соответствующие поля, курсор устанавливается в поле количество)."

в исходниках у этих полей вижу прописаны только DataField и пусто DataSource - как же они подключены к таблице?

у меня эти поля оказываются никуда не подключены и не редактируются и при двойном клике на поле DBGridа всё вылетает...

21 xaramamburu  
0
В DataSource должно стоять Form_rashod_prod.rashod. Очевидно при исправлении запросов, эти поля слетели. На днях исправлю.)))))))))

22 xaramamburu  
0
Посмотрел исходник (Delphi 2010), там все поля заполнены. Такой глюк наблюдается если открывать исходники под Delphi7.

1-10 11-18
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Поиск
Наш опрос
Оцените мой сайт
Всего ответов: 585
Уголок общения



Copyright MyCorp © 2024Конструктор сайтов - uCoz