Программирование баз данных в Delphi 7 - создаем шаблон программы складского учета
Сегодня мы создадим шаблон программы складского учета. И так, начнем новый проект в отдельном каталоге. Зайдем в меню "File" --> "New" --> "Other"*.
В открывшемся окне на закладке Projects выберем "MDI Application"*
Далее, у вас откроется окно сохранения проекта, в котором Вам нужно выбрать путь, куда сохранять. После чего появиться уже готовая форма*:
Если мы запустим ее, то увидим, что это самый обычный текстовый редактор, который мы писали на уроках 4.1, 4.2, 4.3, 4.4 и 4.5, правда, в нем можно открыть не одно окно редактирования текста, а много*.
Теперь давайте переименуем наш проект в StoreApp, для этого просто из меню "File" выберем "Save Project as..." и сохраним проект под нужным именем. Так же поступим с программным модулем - переключимся на него и сохраним под именем MainStoreAppUnit. через меню "File" --> "Save as..".Теперь давайте переименуем уложенные на форму компоненты, будем сразу привыкать к правильным именам. Начнем с ToolBar*:
Программа назвала его ToolBar2, мы назовем tbrStore. Теперь займемся кнопочками. Вместо ToolButton1, ToolButton2 и так далее, присвоим имена, соответствующие их назначению:
-
Новый файл * - tbnNew.
-
Открыть файл * - tbnOpen.
-
Сохранить файл * - tbnSave.
-
Вырезать текст * - tbnCut.
-
Скопировать текст * - tbnCopy.
-
Вставить текст * - tbnInsert.
-
Окна каскадом * - tbnCascade.
-
Окна горизонтально * - tbnHorizontal.
-
Окна вертикально * - tbnVertical.
Теперь перейдем к не визуальным компонентам в нижней части формы*:
Назовем их вот так, начиная с первого:
-
odOpenDialog.
-
mmMainMenu.
-
alActionList.
-
ilImageList.
Далее, изменим название и заголовок формы на frmStoreForm и "Программа складского учета".
Для начала скопируем форму, которую мы создали в созданный нами в прошлый раз шаблон. Для этого нужно скопировать в папку, где у нас лежит проект шаблона из папки, в котором мы на уроке 8.2 создали программу просмотра и редактирования базы данных, файлы UnitStore.dfm и UnitStore.pas.
Затем в Delphi выберем опцию Add to project*:
И добавим файл UnitStore.pas. У вас так же автоматически добавиться форма, которая будет доступна в списке форм проекта*:
Начнем с того, создадим еще одну таблицу базы данных с такой вот структурой
Имя поля |
Тип |
Размер |
id |
+ |
|
Fio |
A |
50 |
Address |
A |
100 |
Phone |
A |
15 |
*и назовем ее employees.db, сохранив в том же каталоге, что и wares.db. Затем переключимся на добавленную форму (через список форм) и переименуем форму в frmTableView. Теперь займемся переименованием положенных на форму компонентов. TTable назовем tbView, TDataSource переименуем в dsView, TDbGrid назовем dbgView, TDbNavigator - dbnView. Затем к объявлению класса формы добавим новый метод OpenTable(ATableName:string):
TfrmTableView = class(TForm)
tbView: TTable;
dsView: TDataSource;
dbgView: TDBGrid;
dbnView: TDBNavigator;
private
{ Private declarations }
public
{ Public declarations }
procedure OpenTable(ATableName:string);
end; |
Реализуем его:
procedure TfrmTableView.OpenTable(ATableName:string);
begin
tbView.Active:=false;
tbView.TableName:=ATableName;
tbView.Active:=true;
Show;
end; |
Да, кстати, не забудьте включить UnitStore в раздел uses модуля MainStoreAppUnit, иначе при компиляции у вас будет выдано сообщение об ошибке. Раньше этого не было написано в уроке, но посыпались вопросы, поэтому я решил дополнить урок (см. комментарии к уроку внизу текста)*:
Немного пояснений к программе:
tbView.Active:=false; - здесь мы выключаем доступ к таблице базы данных, что бы компонент TTable мог поменять таблицу. Если этого не сделать, то при попытке выполнить строку
tbView.TableName:=ATableName;
будет выдано сообщение об ошибке*:
Далее, мы присваиваем компоненту TTable новое имя таблицы и открываем его командой
tbView.Active:=true;
Теперь нам нужно еще и форму сделать видимой для пользователя. Это команда Show. Далее, переключимся на форму frmStoreForm и поставим на нее компонент TSession*.
Назовем добавленный компонет sSession. Свойство SessionName установим в "Store". Затем, с целью приведения имен в порядок, щелкнем на компонент TActionList*.
В открывшемся окне выберем FileOpen1*
и при помощи Object Inspector назначим ему новое имя acFileOpen. Заодно перведем обрабатываемый нами пункт меню на русский язык, сменив у пунктов меню File и Open свойство Caption*:
Теперь перейдем к обработчику события OnClick пункта меню "Файл --> Открыть" или кнопочки tbnOpen (он у них благодаря компоненту TActionList один и тот же) и изменим его содержимое:
procedure TfrmStoreForm.acFileOpenExecute(Sender: TObject);
var SessionParams:TStringList; i:integer;
begin
SessionParams:=TStringList.Create;
sSession.GetAliasParams('StorePrj',SessionParams);
for i:=0 to SessionParams.Count-1 do
if Pos('PATH',SessionParams[i])>0 then
begin
odOpenDialog.InitialDir:=copy(SessionParams[i],6,Length(SessionParams[i])-5);
if odOpenDialog.Execute then CreateMDIChild(odOpenDialog.FileName);
end;
end; |
В данном обработчике мы создаем переменную типа TStringList (список строк). При помощи метода GetAliasParams компонента TSession мы получаем в эту переменную список параметров Alias-а. Нам надо извлечь параметр PATH. Для этого в цикле перебираем все параметры, и если найдем, извлекаем его командой:
odOpenDialog.InitialDir:=copy(SessionParams[i],6,Length(SessionParams[i])-5);
которая просто напросто обрезает все, что в тексте параметра идет после "PATH=". То, что мы вырезали, а это у нас путь к базе данных, записываем в свойство InitialDir диалога открытия файла. После этого запускаем диалог, и, в случае успешного его выполнения (пользователь в диалоге нажал ОК), вызываем процедуру CreateMDIChild, указав ей в качестве параметра выбранный файл.
Сама процедура CreateMDIChild является методом форму, которую автоматически сгенерировала система Delphi, когда мы создавали MDI приложение. Мы можем ее изменить. Точнее не только можем, но и изменим, потому что созданная автоматом процедура у нас открывает только текстовые файлы, а нам надо таблицы баз данных.
procedure TfrmStoreForm.CreateMDIChild(const Name: string);
var
Child: TfrmTableView;
begin
{ create a new MDI child window }
Child := TfrmTableView.Create(Application);
Child.Caption := Name;
if FileExists(Name) then Child.OpenTable(Name);
end |
В этой процедуре мы создаем форму типа TfrmTableView (которую мы с вами скопировали из урока уроке 8.2 и добавили в проект. После чего, если у нас существует переданный в качестве параметра файл, то открываем его через вызов метода OpenTable, который мы с вами так же написали ранее.
Все, остались последние штрихи. В фильтр масок диалога открытия файла добавим маску "*.db". Затем запускаем программу и смотрим через нее наши таблицы wares.db и employees.db.
В заключении немного скажу о компоненте TActionList. Он содержит в себе список обработчиков событий, общих для нескольких объектов. В частности, для кнопочки и пункта меню. Для этой цели связан с компонентом TImageList через свое свойство Images, компонент TMainMenu связан с TImageList через свое свойство Images и компонент TToolBar, на котором расположены кнопочки, так же связан с TImageList .
|