![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как добавить запись в DBGrid? [D7]
JazY © (2005-12-03 17:02:00)Мне нужно записывать текст в одном поле DBGrid, если в другом поле появился определенный текст. К примеру, я забил в поле "Товар", текст "ТоварА", тут же автоматически в DBGrid, но в поле "Завод" должен появиться текст "Завод 1". Как отловить появления текста в ячейке, я наверное, понял:
В OnDrawColumnCell я пишу
if (Column.FieldName = 'Товар') then
if (Column.Field.Asstring = 'ТоварА') then begin
Но вот как добавить текст в той же строке, но в другое поле никак не разберусь, т.к только начал работать с БД. Подскажите исходник, а? Заранее спасибо.
Плохиш (2005-12-06 15:47:00) [1]
> Сам Плохиш так, как советует, вряд ли делает ;))
У меня как-то такой необходимости не возникало ;-)
JazY (2005-12-06 15:28:00) [2]
> если необходимо визуализировать дополнительно заполненное
> поле непосредственно СРАЗУ после изменения юзером основного,
> но ДО записи в БД.
Вот как раз это и нужно.
msguns (2005-12-06 09:43:00) [3]То, что написано в [23] может иметь смысл в одном единственном случае - если необходимо визуализировать дополнительно заполненное поле непосредственно СРАЗУ после изменения юзером основного, но ДО записи в БД.
Сам Плохиш так, как советует, вряд ли делает ;))
msguns (2005-12-06 09:40:00) [4]Неверно использование события OnDataChange в этом контексте из-за [6].
Если надо перед записью изменений в БД присвоить значения некоторым полям, разумнее использовать событие BeforePost, которое происходит ОДИН РАЗ НЕПОСРЕДСТВЕННО ПЕРЕД ЗАПИСЬЮ В БД, а не после изменения любогополя записи НД.
JazY (2005-12-06 01:07:00) [5]2 Плохиш
Большое спасибо! Я не знаю смогу ли я в будущем создавать такие элегантные решения, но по крайней мере буду стремиться. Еще раз спасибо, что указали решение задачи.
Плохиш (2005-12-06 00:19:00) [6]
procedure TForm1.DataSource1DataChange(Sender: TObject; Field: TField);
begin
if Field <> nil then
if (Field.FieldName = 'Производство') and (Field.AsString = '*') then
begin
if not (adotable1.state in [dsEdit, dsInsert]) then adotable1.edit;
adotable1.FieldByName('Готовность').AsString := 'ok';
end;
end;
JazY (2005-12-05 23:29:00) [7]Все. Не понимаю чего происходит:
procedure TForm1.DataSource1DataChange(Sender: TObject; Field: TField);
begin
if (dbgrid1.Columns.Items[dbgrid1.SelectedIndex].FieldName = 'Ïðоизводство') then
if (dbgrid1.Columns.Items[dbgrid1.SelectedIndex].Field.AsString='*') then begin
if adotable1.State=dsEdit then begin
adotable1.FieldByName('Готовность').AsString:='ok';
end
else begin
adotable1.Edit;
adotable1.FieldByName('Готовность').AsString:='ok';
end;
end;
end;
Не работает... и все тут.
Накрылась идея автоматизировать нашу контору... представителя малого бизнеса. :) Чего делать не знаю.
Плохиш (2005-12-05 22:14:00) [8]
> JazY (05.12.05 20:46) [19]
> А как определить, что набор данных уже в состояние редактирования.
> Понимаю, что уже задолбал со своими вопрос, но задачу мне
> надо решить как можно быстрее, поэтому и надоедаю. Подскажите,
> а?
Читай справку, там всё написано
Virgo_Style (2005-12-05 21:44:00) [9]JazY (05.12.05 20:46) [19]
if ADOQuery1.State = dsEdit...
JazY (2005-12-05 20:46:00) [10]А как определить, что набор данных уже в состояние редактирования. Понимаю, что уже задолбал со своими вопрос, но задачу мне надо решить как можно быстрее, поэтому и надоедаю. Подскажите, а?
Плохиш (2005-12-05 17:39:00) [11]Да
JazY (2005-12-05 17:37:00) [12]
> а не находится ли набор данных уже в состоянии редактирования
Т.е если находится, то тогда режим редактирования не включаем, а сразу adotable1.FieldByName('Готовность').AsString:='ok';
Правильно я понял?
Плохиш (2005-12-05 17:23:00) [13]
> JazY (05.12.05 16:37) [11]
> Хорошо. Начнем с начала.
> Вот такой код:
> procedure TForm1.DataSource1DataChange(Sender: TObject;
> Field: TField );
Вот здесь сказоно изменение какого поля вызвало данное событие, это поле и проверяй.
Перед вызовом Edit надо проверить, а не находится ли набор данных уже в состоянии редактирования или вставки записи.
JazY (2005-12-05 17:08:00) [14]
> См. вычисляемые поля. Это попроще будет.
Может без них можно обойтись?
ANB (2005-12-05 17:01:00) [15]
> JazY (05.12.05 16:55) [13]
См. вычисляемые поля. Это попроще будет.
JazY (2005-12-05 16:55:00) [16]
> Может уточним термин "добавить запись" ?
Чтобы в ячейке текст появился. Т.е есть строка, и в этой строке в определенном поле появляется "*" тут же в той же строке, но в другом поле появляется "ок". Иными словами, просто нужно добавить текст в определенную ячейку уже имеющейся строки.
ANB (2005-12-05 16:44:00) [17]
> JazY (05.12.05 16:37) [11]
Может уточним термин "добавить запись" ?
JazY (2005-12-05 16:37:00) [18]Хорошо. Начнем с начала.
Вот такой код:
procedure TForm1.DataSource1DataChange(Sender: TObject; Field: TField);
begin
if (dbgrid1.Columns.Items[dbgrid1.SelectedIndex].FieldName = 'Производство') then
if (dbgrid1.Columns.Items[dbgrid1.SelectedIndex].Field.AsString='*') then begin
adotable1.Edit;
adotable1.FieldByName('Готовность').AsString:='ok';
end;
Насколько я понял, в результате выполнения такого кода произойдет зацикливание.... А это не есть хорошо. Как быть? Половина кода работает как надо!
Т.е:
if (dbgrid1.Columns.Items[dbgrid1.SelectedIndex].FieldName = 'Производство') then
if (dbgrid1.Columns.Items[dbgrid1.SelectedIndex].Field.AsString='*') then begin
Вот этот код помогает отлавить появление звездочки в столбце ''производcтво''. Далее необходимо в этой же строке, но в другое поле ("Готовность") добавить запись ''ok''. Вот и все. Как отлавить появление нужного текста, я кажется понял, но как после этого отлавливания добавить запись не разберусь. Вот в этом и прошу помочь.
ANB (2005-12-05 16:07:00) [19]
> ЮЮ © (05.12.05 03:42) [6]
Ключевое слово - Calculated.
Sergey13 (2005-12-05 16:03:00) [20]2 [7] JazY (05.12.05 15:53)
Ты не с того конца вообще к задаче подошел. В гриде нет данных, они там только отображаются. И работать с гридом в данном случае - это все равно что причесывать зеркало.
>Мне действительно очень важно выполнить указанную задачу!
Тогда читать книжки надо. По другому никак, ИМХО.