Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2002.01.28;
Скачать: [xml.tar.bz2];

Вниз

DBEdit в фокусе   Найти похожие ветки 

 
Oleg_K   (2001-12-17 21:03) [0]

1) В форме имеется несколько DBEdit’ов из которых посредством PopupMenu вызываются определенные DBGrid’ы. После чего нужная инфа из грида сбрасывается в DBEdit. Как можно определить в каком DBEdit’е находится фокус, т.е. какой DBEdit активный, чтобы инфа передавалась именно туда, а не определенный DBEdit?
Сейчас - FaceWork.EditPrisposobl.text := Table1.FieldByName("SHTAN").AsVariant;
Мне нужно передавать значения из грида не DBEdit: EditPrisposobl, а в тот, где фокус.

2) Почему при переводе БД в режим редактирования (Table.Edit) очищаются поля заполненные ранее? Как этого можно избежать, оставив возможность вставки?


 
Ю.Ю.(первый и единственный)   (2001-12-18 03:10) [1]

1) "из грида сбрасывается в DBEdit" как из NxM ячеек сбрасывать в одну,
не теряя при этом фокуса? Если он всё же теряется (переход в Grid), то запоминать нужный Edit в OnEnter Edit-ов bkb в onPopup PopupMenu.

Более того, почему бы не модифицировать непосредственно DataSet, к которому относятя DBEdit-ы. DBEdit всё-таки предназначен для "ручной" корректировки.

2) ??? "очищаются поля" - это как? Совсем пустые становятся? "оставив возможность вставки" - причем здесь Table.Edit ?


 
Oleg_K   (2001-12-18 08:49) [2]

1) Нет, данные сбрасываются из одной ячейки грида в ячейку DBEdit"а. Фокус конечно же теряется при переходе в грид (это я не правильно в прошлый раз выразился).
После запуска формы, я выбираю один из десятка DBEdito"ов и через попуповкий ShortCut вызываю из него грид, а затем выбираю нужную запись и по даблклику передаю из грида в DBEdit значение одной ячейки. Проблема в том, чтобы не явно указыть в гриде в какой DBEdit писать, а передавать именно в тот DBEdit из которого вызван грид. Утрируя: у меня десяток DBEdit"ов и все они по очереди заполняются из одного грида.

"запоминать нужный Edit в OnEnter Edit-ов bkb в onPopup PopupMenu."
Это как?

2)Да. Без Table.Edit выдает ошибку - "DataSet not in edit or insert mode".





 
Ю.Ю.(первый и единственный)   (2001-12-18 09:57) [3]

var
Form1: TForm1;
SelectedEdit:TDBEdit;
implementation

{$R *.DFM}

procedure TForm1.DBEditEnter(Sender: TObject);
// установить в качестве обработкика onEnter для всех DBEdit-ов
begin
SelectedEdit:=TDBEdit(SEnser);
end;

procedure TForm1.DBGridDblClick(Sender: TObject);
begin
if (SelectedEdit<>nil) and (TDBDBGrid(Sender).SelectedField<>nil)
then begin
if SelectedEdit.DataSource.DataSet=dsBrowse
then SelectedEdit.DataSource.Edit;
SelectedEdit.Field.Value:=TDBDBGrid(Sender).SelectedField.Value
end;
end;


 
panov   (2001-12-18 10:11) [4]

В public-секцию формы введи
public
...
tmpDS: TDataSet;
...

В OnPopupMenu устанавливай
if (PopupMenu.PopupComponent is TDBEdit)
then
tmpDS := TDBEdit(PopupMenu.PopupComponent).DataSource.Dataset
else
tmpDS := nil;

После выбора значения в другом окне c TDBGrid
выполни:
...
tmpDS.Edit;
tmpDS.FieldByName(поле1).As... :=
DBGrid.DataSource.DataSet.FieldByName("поле2").As...;
tmpDS.Post;

Примерно такой порядок действий


 
Ю Ю   (2001-12-20 04:19) [5]

поле1, "поле2", As...
А в моем примере обошлось без этого


 
Oleg_K   (2001-12-23 00:22) [6]

To Ю.Ю. :

В строке then SelectedEdit.DataSource.Edit;
при компиляции выдает ошибку
"[Error] shtang.pas(46): Incompatible types"
В чем может быть проблема?


 
panov   (2001-12-24 22:56) [7]

>Oleg_K (23.12.01 00:22)
SelectedEdit.DataSource.Edit;
заменить на
SelectedEdit.DataSource.DataSet.Edit;

К сожалению, при таком способе не удастся избежать побочных эффектов("Почему при переводе БД в режим редактирования (Table.Edit) очищаются поля заполненные ранее? Как этого можно избежать, оставив возможность вставки?").

Я бы не стал пользоваться TDBEdit, так как необходимо изменения в таблицу вносить только после выбора всех полей.

Мне кажется, лучше TEdit использовать.
Удобно присвоить для TEdit Name=имя соответствующего поля. При создании формы, на которой лежат эти TEdit заполнять все TEdit. А после окончания редактирования вносить изменения в таблицу. Причем не обязательно даже проверять, изменилось ли поле - просто заменять все поля в таблице.

В форме, на которой лежат TEdit вводим
var
tmpEdit:

Каждому TEdit назначаем наше единственное PopupMenu.

В этой же форме для PopupMenu в обработке OnPopup пишем:

procedure TForm.PopupMenu1Popup(Sender: TObject);
begin
tmpEdit := TEdit(PopupMenu1.PopupComponent);
end;

В последнем DBGrid(в котором выбираются данные для TEdit), пусть этот DBGrid называется DBGrid25 пишем:

tmpEdit.Text := DBGrid25.DataSource.DataSet.FieldByName("поле").AsString;
"поле" - имя поля, в котором находится значение для выбора.
-----------------------------
Если по этому коду возникнут вопросы, то пиши опять по почте, постараюсь быстро отреагировать...



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

Форум: "Базы";
Текущий архив: 2002.01.28;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.004 c
6-90340
Amit
2001-11-03 22:37
2002.01.28
Плиз помогите мне !


1-90322
Konsul
2002-01-03 13:32
2002.01.28
Зажигание клавиш


3-90228
Gelios
2001-12-24 06:50
2002.01.28
Помогите плз!!


3-90233
EternalWonderer
2001-12-25 10:01
2002.01.28
Проблема с join в connect by запросе.


1-90308
yus
2002-01-09 06:16
2002.01.28
Forma





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский