Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
3-75110
real_dimedrol
2003-11-29 01:48
2003.12.23
UpdateSQL для dbExpress


7-75407
cezar
2003-10-05 11:37
2003.12.23
Зимнее/летнее время


9-75065
loto
2003-05-28 20:49
2003.12.23
(OpenGL) вращение и перемещение объекта в glCallList(ListID)


1-75196
Lin7
2003-12-09 17:06
2003.12.23
Как в меню отобразить комбинацию горячих клавиш


1-75167
loki128
2003-12-09 15:41
2003.12.23
try .. finally





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский