Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.12.23;
Скачать: CL | DM;

Вниз

База данных   Найти похожие ветки 

 
Mtb   (2003-12-10 18:22) [0]

Имеется приложение, которое связано с базой данных mdb с помощью
ADOConnection, ADODataSet и DataSource. На перовой форме находится компонент DBGrid, отображающий саму базу данных и две кнопки "Создать новую запись" и "Редактировать запись". Эти кнопки должны должны показывать вторую форму, в которой в зависимисти от нажатой кнопки должны выполняться соответствующие действия.

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


 
Radionov Alexey ©   (2003-12-10 18:27) [1]

ShowModal и ModalResult не помогут?


 
Mtb   (2003-12-10 18:34) [2]

а как их поюзать?


 
Vlad ©   (2003-12-10 18:55) [3]

Не надо тебе получать никаких данных.
Делаешь так: в Unit2(где объявлена вторая форма) добавляешь в uses Unit1 (где находится ADODataSet). Теперь вторая форма "видит" твой ADODataSet и соответственно сама может внести изменения в него. Т.е. первой форме совсем необязательно знать об этих данных.


 
Sandman25 ©   (2003-12-10 18:58) [4]

Если делать по-нормальному, то нужно вызывать метод второй формы с 2 параметрами - IsAdd: boolean; var Rec: TMyRecord.
Если уж совсем правильно, то нужен еще один параметр - IsClearAdd: boolean. В таком случае можно будет добавлять новую запись, но с начальными значениями, как в текущей записи. Очень удобно при заполнении справочников похожими данными.


 
Vlad ©   (2003-12-10 19:03) [5]


> Sandman25 © (10.12.03 18:58) [4]

Если ADODataSet уже переведен в состояние dsEdit либо dsInsert перед открытием второй формы, то зачем еще какие-то доп. параметры ?


 
Mtb   (2003-12-10 19:27) [6]

//Не надо тебе получать никаких данных.
Делаешь так: в Unit2(где объявлена вторая форма) добавляешь в uses Unit1 (где находится ADODataSet). Теперь вторая форма "видит" твой ADODataSet и соответственно сама может внести изменения в него. Т.е. первой форме совсем необязательно знать об этих данных.

повторяю, вторая форма должна использоваться и при редактировании записи, и при создании новой.

//Если делать по-нормальному, то нужно вызывать метод второй формы с 2 параметрами - IsAdd: boolean; var Rec: TMyRecord.

а что за метод то?
так расскажите как использовать ShowModal и ModalResult?


 
Vlad ©   (2003-12-10 20:15) [7]


> Mtb (10.12.03 19:27) [6]
>повторяю, вторая форма должна использоваться и при редактировании записи, и при создании новой.

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


 
Sharker   (2003-12-10 20:28) [8]

Можно открывать форму и вызывать в ней из основной формы соответствующие процедуры с параметрами.

frm_edit.ShowModal;
frm_edit.GoEdit(...);

А в frm_edit прописываешь процедурки:

procedure Tfrm_edit.GoEdit(параметры какие надо);
begin
//тут из базы заполняешь поля для редактирования
//устанавливаешь признак режима редактирования в true
end;

procedure Tfrm_edit.GoAdd(параметры какие надо);
begin
//тут очищаешь поля формы для ввода новых значений
//устанавливаешь признак режима редактирования в false
end;

Потом при нажатии OK или чего там еще:
в зависимости от признака редактирования изменяешь соотв. образом данные в базе... (+ можно отсюда обновить grid-ы и поля основной формы для отображения измененных данных)


 
Mtb   (2003-12-10 20:39) [9]

имется форма с 2-мя кнопками и таблицей DBGrid. При нажатии на первую кнопку появляется вторая форма, со значениями выбранной записи в DBGrid в TEdit"ах, которые можно изменять. при нажатии кнопки OK изменения должны внестись в базу. При нажатии Cancel соответственно изменения не подтверждаются.
При нажатии на вторую кнопку в первой форме, создается новая запись в базе данных и появляется та же вторая форма с пустыми Edit"ми.
при нажатии кнопки OK новая запись вносится в базу. При нажатии Cancel, соответственно, не вносится.


 
Vlad ©   (2003-12-10 20:48) [10]


> Mtb (10.12.03 20:39) [9]

Чудестно. Но ты так и не ответил на вопрос - о каких данных идет речь ? Ведь ты спрашивал:
как из второй формы получить данные в зависимости от нажатой кнопки
Ты понимаешь что этот вопрос можно понять по-разному ?
Это во-первых. Во вторых, на второй форме разумнее использовать не TEdit"ы, а TDBEdit"ы. Они предназначены специально для этого. Возможно тогда и вопрос твой отпадет.


 
Mtb   (2003-12-10 21:26) [11]

я нашел такое решение:
Спасибо всем кто подсказывал.

первая форма:


procedure TForm1.Button2Click(Sender: TObject);
begin

if Form2.ShowModal=mrOK then begin
ADODataSet1.Edit;
ADODataSet1.FieldByName("FIO").AsString:=Form2.Edit1.Text;
ADODataSet1.FieldByName("Group").AsString:=Form2.Edit2.Text;
ADODataSet1.Post;
end
else
ADODataSet1.Cancel;

end;

procedure TForm1.Button1Click(Sender: TObject);
begin
ADODataSet1.Append;

if Form2.ShowModal=mrOK then begin
ADODataSet1.FieldByName("FIO").AsString:=Form2.Edit1.Text;
ADODataSet1.FieldByName("Group").AsString:=Form2.Edit2.Text;
ADODataSet1.Post;
end
else
ADODataSet1.Cancel;
end;


вторая форма:


procedure TForm2.FormShow(Sender: TObject);
begin
Edit1.Text:=Form1.ADODataSet1.FieldByName("FIO").AsString;
Edit2.Text:=Form1.ADODataSet1.FieldByName("Group").AsString;
end;

procedure TForm2.Button1Click(Sender: TObject);
begin

if (Edit1.Text="")or(Edit2.Text="") then begin
ShowMessage("???????????? ????.");
end
else
ModalResult:=mrOk;

end;

procedure TForm2.Button2Click(Sender: TObject);
begin
ModalResult:=mrCancel;
end;


 
Vlad ©   (2003-12-10 21:38) [12]

Ну-ну.
Две трети кода можно смело урезать, если пользоваться DBEdit вместо Edit


 
Mtb   (2003-12-10 21:47) [13]

можно, но мне нужно использовать именно простые Edit"ы


 
Sam Stone ©   (2003-12-10 23:40) [14]

Хех... А нельзя сразу в гриде редактировать данные???



Страницы: 1 вся ветка

Текущий архив: 2003.12.23;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.022 c
7-75438
Kein
2003-10-20 15:24
2003.12.23
странности при работе с Com-портом


14-75308
SPeller
2003-11-26 17:30
2003.12.23
Н-да... Спам в нашей стране процветает...


3-75125
Frag
2003-11-28 11:59
2003.12.23
Обработка огромного файла Excel


14-75306
IronHawk
2003-11-21 11:58
2003.12.23
Где можно взять прогу контроля версий?


8-75268
help
2003-08-25 12:40
2003.12.23
Изменение экранного разрешения