Форум: "Базы";
Текущий архив: 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