Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как добавить запись в DBGrid? [D7]


Страницы:   1 2

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)
Ты не с того конца вообще к задаче подошел. В гриде нет данных, они там только отображаются. И работать с гридом в данном случае - это все равно что причесывать зеркало.

>Мне действительно очень важно выполнить указанную задачу!
Тогда читать книжки надо. По другому никак, ИМХО.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо