Форум: "Основная";
Текущий архив: 2003.12.23;
Скачать: [xml.tar.bz2];
ВнизБаза данных Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.009 c