|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
12.07.2010, 16:26 | #1 |
Пользователь
Регистрация: 09.07.2010
Сообщений: 13
|
Назначить обработчик события на кнопку form2 из form1 программно
Вопрос в следующем:
Имеем приложение БД. ado+access Вопрос: Как из формы Form1 назначить обработчик события OnClick на кнопке в Form2 ?? т.е. необходимо при нажатии кнопки "Новая" на форме №1 - открывалась форма №2 и назначить обработчик собития OnClick кнопки "Сохранить" на форме №2. Событие - добалвение записи в БД та же ситуация только с кнопкой "изменить" на форме №1 (назначить обработчик собития OnClick кнопки "Сохранить" на форме №2. Событие - редактирование записи в БД) =================================== ===================== Код:
Последний раз редактировалось Stilet; 13.07.2010 в 08:38. |
12.07.2010, 19:18 | #2 |
Погулять вышел
Участник клуба
Регистрация: 17.05.2010
Сообщений: 1,573
|
А почему бы тебе не использовать специализированные компоненты вместо обычных Edit'ов??? Существуют же DBEdit, DBComboBox и т.д.. К тому же тебе AdoQuery сейчас явно не нужен (Используй ADOTable).
А при открытии второй формы просто переводить таблицу либо в режим редактирования, либо в режим добавления записи: Код:
Никогда не знаешь, где тебе повезет... (Фрай)
|
12.07.2010, 19:29 | #3 |
Пользователь
Регистрация: 09.07.2010
Сообщений: 13
|
хм... сейчас попробуем..
|
12.07.2010, 19:51 | #4 |
Пользователь
Регистрация: 09.07.2010
Сообщений: 13
|
Спасибо. Отлично.
//На вставку новой записи: procedure TForm1.Button1Click(Sender: TObject); // Новая запись var form2: TForm2; begin form2:=TForm2.Create(Form1); ADOTable1.Insert; form2.ShowModal; end; //На редактирование записи: procedure TForm1.Button2Click(Sender: TObject); // Редактирование begin form2:=TForm2.Create(Form1); form2.Edit1.Text:=Form1.ADOTable1.F ieldByName('Фамилия').Text; form2.Edit2.Text:=Form1.ADOTable1.F ieldByName('Имя').Text; ADOTable1.edit; form2.ShowModal; end; ======= //Сохраняем изменения: Желательно дописать проверку на пустые значения Edit1,Edit2 чтобы не сохранялись пустые записи в БД. (если пусто - отмена изменений (добавить/редактировать) if...then) procedure TForm2.Button1Click(Sender: TObject); //Сохранить изменения (новая либо изменения) begin Form1.ADOTable1.FieldByName('Фамилия').Text:=Edit1.Text; Form1.ADOTable1.FieldByName('Имя'). Text:=Edit2.Text; Form1.ADOTable1.post; close; end; //Отмена редактирования procedure TForm2.Button2Click(Sender: TObject); // Отмена изменений (добавления/изменения записи) begin Form1.ADOTable1.CancelUpdates; close; end; end. Отлично все получается. Последний раз редактировалось golopjatov; 12.07.2010 в 20:15. |
13.07.2010, 06:09 | #5 |
Форумчанин
Регистрация: 25.07.2009
Сообщений: 533
|
А не проще написать одну процедуру с параметром типа INT и передавая в него либо 1, либо 0 переводить дата сет в едит либо в инсерт.
Ну а перед Post еще сделать проверку состояния.
Маразм крепчал. Еноты пели...
R-style Dataknowlege Access Member Account (RDAMA) |
13.07.2010, 19:03 | #6 |
Погулять вышел
Участник клуба
Регистрация: 17.05.2010
Сообщений: 1,573
|
А смысл? это лишняя память и процессорное время...
Никогда не знаешь, где тебе повезет... (Фрай)
|
13.07.2010, 20:22 | #7 |
Пользователь
Регистрация: 09.07.2010
Сообщений: 13
|
procedure AddRec(inSet:TDataSet); // процедура открытия диалога для добавления записи
var Form2: TForm2; begin Form2 := TForm2.Create(Form1); try Form1.ADOQuery1.Insert; Form2.Caption:='Новая запись'; Form2.ShowModal; finally Form2.Free; end; procedure TForm1.Button1Click(Sender: TObject); begin AddRec(Form1.DataSource1.DataSet); end; Последний раз редактировалось golopjatov; 13.07.2010 в 22:58. |
13.07.2010, 20:51 | #8 |
Пользователь
Регистрация: 09.07.2010
Сообщений: 13
|
procedure EdtRec(inSet:TDataSet); // процедура редактирование записи
var Form2: TForm2; begin if (NotEmptySet(inSet)) // если сет пустой - незачем выводить запрос then //ну а если не пуста - открываем диалог редактирования begin Form2:=TForm2.Create(Form1); try Form2.Edit1.Text:=Form1.ADOQuery1.F ieldByName('Фамилия').Text; Form2.Edit2.Text:=Form1.ADOQuery1.F ieldByName('Имя').Text; Form1.ADOQuery1.Edit; Form2.Caption:='Редактирование записи'; Form2.ShowModal; finally Form2.Free; end; end else begin MessageDlg('Нет записей для редактирования!',mtInformation,[mbCancel], 0); Exit; end; end; procedure TForm1.Button2Click(Sender: TObject); begin EdtRec(Form1.DataSource1.DataSet); end; Последний раз редактировалось golopjatov; 13.07.2010 в 21:11. |
13.07.2010, 20:56 | #9 |
Пользователь
Регистрация: 09.07.2010
Сообщений: 13
|
procedure DelRec(inSet:TDataSet); // процедура удаление записи
begin if (NotEmptySet(inSet)) then begin if MessageDlg(PChar('Удалить запись? - '+Form1.ADOQuery1.FieldByName('Фамилия').AsString),mtConfirmation, mbOKCancel, 0) = mrOK then inSet.Delete end else begin MessageDlg('Нет записей для удаления!',mtInformation,[mbCancel], 0); Exit; end; end; procedure TForm1.Button4Click(Sender: TObject); begin DelRec(Form1.DataSource1.DataSet); // используем процедуру удаления end; ----------------------------------------------- Функция проверки наличия записей в DataSet function NotEmptySet(inSet:TDataSet): boolean; // не пусто, функция проверки на наличие записей в сете begin Result := Not (inSet.Bof and inSet.eof); end; Последний раз редактировалось golopjatov; 13.07.2010 в 21:05. |
13.07.2010, 21:24 | #10 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,238
|
просто замечание.
у DataSet можно проверить на пустоту через IsEmpty (и не надо городить огород через свою функцию NotEmptySet....): Код:
|
|
Опции темы | Поиск в этой теме |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
переменные form2 на form1 | motaro | Общие вопросы Delphi | 16 | 28.09.2009 07:49 |
Form1 & Form2 | Alex Cones | Общие вопросы Delphi | 4 | 31.07.2009 21:50 |
Управление элементами Form2 из Form1 | Niodar | Общие вопросы Delphi | 4 | 25.03.2009 04:22 |
Delphi. Form1 и Form2. | Xeon332 | Общие вопросы Delphi | 8 | 01.11.2008 15:52 |
form1 и form2 | SLIMMUS | Общие вопросы Delphi | 3 | 29.10.2008 01:15 |