Среда, 22.11.2017, 01:51
Приветствую Вас Гость

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

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

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

Статистика

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


















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

Delphi. Урок 1.4. Программирование баз данных в 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.4.

Программирование баз данных в Delphi - создаем подчиненные формы для справочников программы склад

На этом уроке мы создадим форму для справочника единицы измерения  нашего склада.

Запускает наш проект, и создаем новую форму File->New->Form -Delphi

Программирование баз данных в Delphi - создаем подчиненные формы для справочников программы склад

В инспекторе объектов  устанавливаем следующие свойства для новой формы

Caption -> Единицы измерения;

FormStyle -> fsMDIChild;

Name -> Form_ed_izmer;


Программирование баз данных в Delphi - создаем подчиненные формы для справочников программы склад

Сохраните модуль с именем ed_izmer.

Пропишем Uses general; после раздела implementation в программном модуле unit ed_izmer как показано на рисунке.
Программирование баз данных в Delphi - создаем подчиненные формы для справочников программы склад

А программном модуле unit general главной формы пропишем Uses ed_izmer;

Программирование баз данных в Delphi - создаем подчиненные формы для справочников программы склад

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

Далее размещаем на форме следующие компоненты

Программирование баз данных в Delphi - создаем подчиненные формы для справочников программы склад

Три кнопки TButton из вкладки Standart

В инспекторе объектов для Button1 устанавливаем свойство  Caption  -> Новая запись;

для Button2 устанавливаем  свойство  Caption  -> Удалить запись;

для Button3 устанавливаем  свойство  Caption  -> Закрыть;


Программирование баз данных в Delphi - создаем подчиненные формы для справочников программы склад

Из вкладки Data Access помещаем на форму компонент TDataSource.

В инспекторе объектов для него устанавливаем  следующие свойства:

DataSet -> Form_general.table_ed_izmer;

Name -> ed_izmer.

Программирование баз данных в Delphi - создаем подчиненные формы для справочников программы склад


А из вкладки Data Controls помещаем на форму компонент TDBGrid.

В инспекторе объектов для него устанавливаем  следующие свойства:

DataSource -> ed_izmer;

Программирование баз данных в Delphi - создаем подчиненные формы для справочников программы склад

Если вы все правильно сделали то должны на форме увидеть следующее:

Программирование баз данных в Delphi - создаем подчиненные формы для справочников программы склад


Если поля таблицы не отображаются в DBGrid,возможно у вас отключено (False) свойство Active главной форме в инспекторе объектов компонента table_ed_izmer (TADOtable), установите Active -> True.

Сейчас мы переименуем поля нашей таблице. Для этого перейдем на главную форму проекта.

Выберем компонент table_ed_izmer  (ADOTable) и в структуре (Structure) -> ed_izmer -> Fields -> щелкнем правой кнопкой мыши и выберем Add all fields.

Программирование баз данных в Delphi - создаем подчиненные формы для справочников программы склад

У вас должно получиться следующее:


Далее выбираем поле id и в инспекторе объектов устанавливаем у него свойство Visible->False,

Программирование баз данных в Delphi - создаем подчиненные формы для справочников программы склад

затем выбираем поле ed_name и в инспекторе объектов устанавливаем у него свойства

DisplayLabel -> Единица  измерения;

DisplayWidth -> 30;
Программирование баз данных в Delphi - создаем подчиненные формы для справочников программы склад

После этого видим для формы «Единицы измерения»:

Программирование баз данных в Delphi - создаем подчиненные формы для справочников программы склад


Теперь пишем обработчики событий для кнопок.

Щелкнем дважды мышкой по кнопке «Новая запись» и пишем следующий код:


procedure TForm_ed_izmer.Button1Click(Sender: TObject);
begin
//
новая запись
form_general.table_ed_izmer.Append;
dbgrid1.SetFocus

end;

Щелкнем дважды мышкой по кнопке «Удалить запись» и пишем следующий код:


procedure TForm_ed_izmer.Button2Click(Sender: TObject);
//удаление записи
begin
//если записи отсутствуют то выводим сообщение, иначе удаляем запись
  if dbgrid1.DataSource.DataSet.RecordCount<>0  then
      
begin
        if (MessageBox(Handle, 'Удаление записей может привести к нарушению работы всей базы данных. Удалить запись?', 'Внимание !!!', MB_YESNO)=  IDYES) then
           form_general.table_ed_izmer.Delete
      
end
                                                else ShowMessage('Нет записей для удаления');
end;


Щелкнем дважды мышкой по кнопке «Закрыть» и пишем следующий код:

procedure TForm_ed_izmer.Button3Click(Sender: TObject);
begin
//закрытие формы
Close;
end;


 
В инспекторе объектов для Form_ed_izmer  событие FormActivate пишем:

Программирование баз данных в Delphi - создаем подчиненные формы для справочников программы склад


procedure TForm_ed_izmer.FormActivate(Sender: TObject);
begin
//установка фокуса при активации формы
dbgrid1.SetFocus;

end;

В инспекторе объектов для Form_ed_izmer  событие FormClose пишем:


procedure TForm_ed_izmer.FormClose(Sender: TObject; var Action: TCloseAction);
begin
//процедура закрытия формы
  Action:=cafree;
end;


В инспекторе объектов для Form_ed_izmer  событие FormCloseQuery пишем:

procedure TForm_ed_izmer.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
//проверка на наличие пустых записей перед закрытием, если такие записи найдены то отменяем //закрытие формы
begin
 if dbgrid1.DataSource.DataSet.RecordCount<>0  then begin
if not (form_general.table_ed_izmer.Locate('ed_name', '', [loCaseInsensitive,loPartialKey])) then  begin form_general.table_ed_izmer.edit; form_general.table_ed_izmer.post; end
                                                             else begin ShowMessage('
У Вас есть не заполненные записи');CanClose:=false;dbgrid1.SetFocus;end;
 
                                                    end;

end;

Сейчас сделаем запуск справочника «Единиц измерения» из главной формы. Для этого выбираем в меню Project -> Options…


Программирование баз данных в Delphi - создаем подчиненные формы для справочников программы склад

и видим следующее окно:


Программирование баз данных в Delphi - создаем подчиненные формы для справочников программы склад

Выбираем Forms и перемещаем Form_ed_izmer из Auto-create forms  в Avalable forms.

Переходим на главную форму, щелкаем мышкой по компоненту MainMenu1, а затем по пункту Единицы измерения

Программирование баз данных в Delphi - создаем подчиненные формы для справочников программы склад

И пишем следующий обработчик события:

procedure TForm_general.N2Click(Sender: TObject);
begin
f:=0;
//проверяем, активна ли наша форма
if ActiveMDIChild.Caption<>'Единицы измерения' then begin
//если нет то ищем ее среди неактивных  и если находим, то показываем ее
for i:=0 to form_general.MDIChildCount-1 do
if form_general.MDIChildren[i].Caption='
Единицы измерения' then begin
MDIChildren[i].Show;f:=1;end;

end
                                               else f:=1;
//если форма еще не создана, то создаем ее
if f<>1 then Tform_ed_izmer.Create(Application);

end;

Переменные f и I описываем в разделе var

var
  Form_general: TForm_general;
  f
,i:integer; //f:=1 если подчиненная форма уже запущена и f:=0 если нет



Программирование баз данных в Delphi - создаем подчиненные формы для справочников программы склад

Вот и все готово, запускаем проект и заполняем справочник данными, например так:

Программирование баз данных в Delphi - создаем подчиненные формы для справочников программы склад

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


Категория: База данных "Склад" | Добавил: xaramamburu (16.06.2011)
Просмотров: 18897 | Комментарии: 24 | Рейтинг: 5.0/4
Всего комментариев: 241 2 »
24  
После перезапуска Delphi при нажатии в главном меню "Единицы измерения" дает ошибку "cannot focus a disabled or invisible window".

23  
Здравствуйте! При запуске программы и нажатие на кнопку в главном меню окно "Единицы измерения" попросту не открывается.

21  
Когда хочу заполнить кнопку "закрыть" показывает "Cannot find implementation of method Button3Click@

0
22  
Ваша ошибка означает, что в разделе implementation отсутсвует прседура (метод) для события кнопки  Button3Click. Попробуйте удалить кнопку, и запустить проект, если все пройдет без ошибок, то верните кнопку на место и заполните процедуру. Если будут ошибки, то удалите все строки кода, связанные с Button3Click, пока ошибки не исчезнут, а затем верните кнопку на место.)))

19  
здравствуйте. при попытке запуска программы появляются ошибки:
[FatalError]Unable to build.  License is
invalid or has expired.
[Fatal
Error] Unable to build.  License is
invalid or has expired.
[Fatal
Error] storage.dpr(2): Read error on 'c:\program
files\borland\delphi7\Lib\System.dcu'
Не могли бы вы помочь исправить?

20  
Судя по ошибке у вас проблема с Delphi. Он вам пишет "Лицензия 
недействительна или истек срок". Переустановите  Delphi.)))

14  
Доброво времяни суток! В событие  FormCreate пытаюсь обратиться к ADOQuery выдает ошибку  'access violarion at address 004986A3 in module '----' Read of address 00000060 ' . ADOQuery  находится в в другом unite. Если в другом событие обращаюсь к нему или компонет перенашу на форму то все работает нормально. Подскажите пожалуста из-за чего эта ошибка и что делать ?????

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

16  
Там не форма а DataModule. А можно как то заставить чтоб создавалсь датамодель а потом форма?

17  
Можно, порядок создания форм можно поменять в файле проекта имя.dpr или в меню Project->Options...-> forms. Правда если при этом на главной форме у вас были какие то подключения к базе то возникнут новые проблемы.))))

18  
Спасибо за совет. Помогло.

13  
Все я переименовала название базы. Заработало.

12  
Т.е. программа или модуль вызывает сам себя. Скорее всего вы в модуле Uses  подключаете этот же самый модуль.)))

8  
procedure TForm_ed_izmer.Button1Click(Sender: TObject);
begin
//íîâàÿ çàïèñü
form_general.table_ed_izmer.Append;
dbgrid1.SetFocus
end;
при запуске программы здесь ошибка, как исправить?

9  
Ошибка какая?

10  
там где красным выделено, и проэкт не запускается

11  
Меня интересует не только строка в которой ошибка, но и сообщение об этой ошибке, которое выдает сама среда Delphi. Оно появляется как правило внизу экрана. А в строке, на которую вы указываете, если названия таблиц и форм написано правильно ошибок нет. ))))

6  
Добрый день! Пытаюсь выполнить ваши уроки, на уроке 1.4, стало выдавать ошибку в процедуре  procedure FormCreate(Sender: TObject);  private    { Private declarations } public    { Public declarations }  end; и не запускается. Помогите пожалуйста исправить. Спасибо.

7  
Саму ошибку выложить не пробовали? А то просто так в этих строках ругаться на эти строки он не будет.)))).

4  
нашёл решение проблемы, надо добавить form_table.open и всё работает

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



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