Поле Код поступления является ключевым(*).
Таблица 5 Продажа:
Номер | Название полей | Тип поля | Ключ |
1 | Код лекарства | N | |
2 | Номер чека | N | * |
3 | Дата продажи | D | |
4 | Цена за ед. продукта | N | |
5 | Кол-во проданных лекарств | N |
В таблице 5 поля имеют тип:
Код лекарства (N) имеет числовой тип, Номер чека (N) имеет числовой тип, Дата продажи (D) дата, Цена за ед. продукта (N) имеет числовой тип, Кол-во проданных лекарств (N) числовой тип.
Поле Номер чека является ключевым(*).
Связи в базе организованны по соотношению один ко многим.
Для установления связей между таблицами открывали дочернюю таблицу
И выбирали в спадающем списке Table propertiesпункт ReferentialIntegrity.
Связь таблицы Предприятие с таблицей Накладная.
Связь таблицы Лекарства с таблицей Продажа.
Связь таблицы Лекарства с таблицей Поступление.
По такому же принципу сделана связи с таблицей Накладная Поступление.
3.3 Организация пользовательского интерфейса
Интерфейс программы “Лекарственные средства” представлен на первой форме. Для удобства работы с базой при наведении курсора на объект появляются подсказки в статусной строке. Также присутствуют кнопки, для управления базой данных. В первой форме предусмотрен поиск позволяющий искать нужную запись.
Процедуры кнопок формы1:
Кнопка добавление:
procedure TForm1.Button1Click(Sender: TObject);
begin
If table1.State = dsBrowse then
table1.insert;
end;
КнопкаИзменения:
procedure TForm1.Button2Click(Sender: TObject);
begin
If table1.State = dsBrowse then
table1.edit;
end;
КнопкаУдаления:
procedure TForm1.Button3Click(Sender: TObject);
begin
If table1.State = dsBrowse then
If Messagedlg('',mtconfirmation,[mbYes,mbNo],0)=mrYes then
table1.delete;
end;
Процедура на кнопку поиск:
procedure TForm1.Table1FilterRecord(DataSet: TDataSet;
var Accept: Boolean);
begin
Accept:=Dataset['Name_lek'] = Edit1.text;
end;
procedure TForm1.CheckBox1Click(Sender: TObject);
begin
Table1.Filtered:=CheckBox1.Checked;
Table1.Filtered:=true;
end;
Форма 2 на которой находятся таблицы Предприятие и Накладная.
Процедуры кнопок Формы 2:
Процедура кнопки перехода на Форму1:
procedure TForm2.BitBtn1Click(Sender: TObject);
begin
Form1.show;
Form2.hide;
end;
Процедура кнопки перехода на Форму3:
procedure TForm2.BitBtn2Click(Sender: TObject);
begin
Form3.show;
Form2.hide;
end;
Процедура соединения таблиц двух таблиц, дочерняя таблица Накладная с родительской таблицей Предприятие :
procedure TForm2.OnActivate(Sender: TObject);
begin
DBGrid2.Columns.Items[1].PickList.Clear;
with Table1 do begin
first;
While not eof do Begin
DBGrid2.columns.Items[1].Picklist.add(FieldByName('Kod_pred').value);
next;
end;
end;
А также на форме присутствуют кнопки управления базой данных, как для таблицы Предприятие так и для таблицы Накладная:
кнопки добавления ,изменения, удаления, сохранения, отмены.
ПроцедуракнопкиЗапомнить:
procedure TForm2.Button4Click(Sender: TObject);
begin
If table1.State in [dsInsert,dsEdit]then
table1.post;
end;
Процедура кнопки Отменить:
procedure TForm2.Button9Click(Sender: TObject);
begin
If table1.State in [dsInsert,dsEdit]then
table1.Cancel;
end;
Процедура кнопки Добавить:
procedure TForm2.Button1Click(Sender: TObject);
begin
If table1.State = dsBrowse then
table1.insert;
end;
Процедура кнопки Изменить:
procedure TForm2.Button2Click(Sender: TObject);
begin
If table1.State = dsBrowse then
table1.edit;
end;
Процедура кнопки Удалить:
procedure TForm2.Button3Click(Sender: TObject);
begin
If table1.State = dsBrowse then
If Messagedlg('',mtconfirmation,[mbYes,mbNo],0)=mrYes then
table1.delete;
end;
Форма 3 с таблицами Поступление и Продажа.
На форме 3 находятся таблицы Продажа и Поступление. В этих таблицах фиксируется сколько лекарственных средств поступило на склад и по какой цене. Также фиксируется Код предприятия с которым установлены торговое соглашение, номер накладной где указан товар и в каком количестве. В таблице Продажа также фиксируются цена на лекарственные средства но при этом учитывается транспортировка и по этим параметрам устанавливается продажная цена.
Процедурыуправляющихкнопок:
procedure TForm3.Button1Click(Sender: TObject);
begin
If table2.State = dsBrowse then
table2.insert;
end;
procedure TForm3.Button4Click(Sender: TObject);
begin
If table2.State in [dsInsert,dsEdit]then
table2.post;
end;
procedure TForm3.Button3Click(Sender: TObject);
begin
If table2.State = dsBrowse then
table2.edit;
end;
procedure TForm3.Button2Click(Sender: TObject);
begin
If table2.State = dsBrowse then
If Messagedlg('',mtconfirmation,[mbYes,mbNo],0)=mrYes then
table2.delete;
end;
procedure TForm3.Button5Click(Sender: TObject);
begin
If table1.State = dsBrowse then
table1.insert;
end;
procedure TForm3.Button6Click(Sender: TObject);
begin
If table1.State = dsBrowse then
If Messagedlg('',mtconfirmation,[mbYes,mbNo],0)=mrYes then
table1.delete;
end;
procedure TForm3.Button7Click(Sender: TObject);
begin
If table1.State = dsBrowse then
table1.edit;
end;
procedure TForm3.Button8Click(Sender: TObject);
begin
If table1.State in [dsInsert,dsEdit]then
table1.post;
end;
end;
end;
Процедурысоединениятаблиц:
DBGrid2.Columns.Items[1].PickList.Clear;
with Form2.Table2 do begin
first;
While not eof do Begin
DBGrid2.columns.Items[1].Picklist.add(FieldbyName('Nom_naklad').value);
next;
end;
end;
DBGrid2.Columns.Items[2].PickList.Clear;
with Form2.Table1 do begin
first;
While not eof do Begin
DBGrid2.columns.Items[2].Picklist.add(FieldbyName('Kod_pred').value);
Форма 4 запрос SQL. На данной форме выводится параметрический запрос по полям “Название лекарства” и по ”Количеству проданных лекарств”.
Процедура Запроса SQL:
Процедура кнопки обновить список:
procedure TForm4.Button1Click(Sender: TObject);
begin
Query1.Filtered:=false;
Query1.Active:=true;
end;
Процедуракнопкипоиска :
procedure TForm4.Button3Click(Sender: TObject);
begin
Query1.Filtered:=false;
Case Radiogroup1.itemindex of
0:pole:='Name_lek';
1:pole:='Kolvo_p_lek'
end;
Query1.Filtered:=true;
end;
procedure TForm4.Query1FilterRecord(DataSet: TDataSet;
var Accept: Boolean);
begin
Accept:=Dataset[pole]=edit1.text;
end;
Форма 5 на ней показана информация о Программе.
ЗАКЛЮЧЕНИЕ
Данная программа пригодится небольшим фирмам занимающихся продажей и учетом лекарственных средств. Моя программа облегчит им работу, уменьшит работу с бумагами накладными и т.д.
После разработки своей программы я узнал более подробно о языке программирования Delphi и приложений к нему в частности BDEAdministrator и DatabaseDesktop . BDEAdministratorнужен для установления псевдонима. При переносе базы данных на другой компьютер надо обязательно установить псевдоним т.е. каталог где она находится иначе при запуске базы данных выйдет сообщение об ошибке. DatabaseDesktopнужна для создания и редактирования таблиц баз данных. Язык программирования Delphiявляется более простым для написания баз данных в нем есть все возможные компоненты упрощающие работу. На Delphiнаписано довольно большое число баз данных.
ЛИТЕРАТУРА
1. Delphi 3 и создание приложений баз данных Шумаков П.В. 704 с. иллюстрации есть.
2. Delphi 4 для профессионалов издание Питер М.Кенту 1088 с. иллюстрации есть.
Листингпрограммы
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, StdCtrls, Grids, DBGrids, Db, DBTables, ComCtrls, Menus,
Buttons, Mask, DBCtrls;
type
TForm1 = class(TForm)
DataSource1: TDataSource;
Table1: TTable;
GroupBox1: TGroupBox;
DBGrid1: TDBGrid;
Label1: TLabel;
Panel1: TPanel;
GroupBox2: TGroupBox;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
Button5: TButton;
MainMenu1: TMainMenu;
N1: TMenuItem;
N2: TMenuItem;
GroupBox3: TGroupBox;
BitBtn3: TBitBtn;
BitBtn4: TBitBtn;
N3: TMenuItem;
DBEdit1: TDBEdit;
DBEdit2: TDBEdit;
DBEdit3: TDBEdit;
DBEdit4: TDBEdit;
DBEdit5: TDBEdit;
SQL1: TMenuItem;
RadioGroup1: TRadioGroup;
CheckBox1: TCheckBox;
Edit1: TEdit;
Button6: TButton;
StatusBar1: TStatusBar;
N4: TMenuItem;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure BitBtn3Click(Sender: TObject);
procedure BitBtn4Click(Sender: TObject);
procedure N3Click(Sender: TObject);
procedure SQL1Click(Sender: TObject);
procedure Table1FilterRecord(DataSet: TDataSet; var Accept: Boolean);
procedure CheckBox1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure ShowHint(Sender: TObject);
procedure N4Click(Sender: TObject);
procedure Button6Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
uses Unit2, Unit3, Unit4, Unit5;
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
begin
If table1.State = dsBrowse then
table1.insert;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
If table1.State = dsBrowse then
table1.edit;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
If table1.State = dsBrowse then
If Messagedlg('',mtconfirmation,[mbYes,mbNo],0)=mrYes then
table1.delete;
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
If table1.State in [dsInsert,dsEdit]then
table1.post;
end;
procedure TForm1.Button5Click(Sender: TObject);
begin
If table1.State in [dsInsert,dsEdit]then
table1.Cancel;
end;
procedure TForm1.BitBtn3Click(Sender: TObject);
begin
Form2.show;
Form1.hide;
end;
procedure TForm1.BitBtn4Click(Sender: TObject);
begin
Form3.show;
Form1.hide;
end;
procedure TForm1.N3Click(Sender: TObject);
begin
close;
end;
procedure TForm1.SQL1Click(Sender: TObject);
begin
Form4.show;
end;
procedure TForm1.Table1FilterRecord(DataSet: TDataSet;