Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > Процедура DBGrid1KeyDown отсутствие значения


Автор: SergSD29 7.12.2010, 11:36
Добрый день участники форума, у меня возникла проблема при построении программы с процедурой  (procedure TForm1.DBGrid1KeyDown (Sender: TObject; var Key: Word;
  Shift: TShiftState);),  то есть когда я соединил  свою (*.db) с Table1 а потом с DBgrid1 был создан просмотр (*.db)  который необходимо было листать (просматривать) и выводить каждое новое активное значения строки в Edit,  для этого я ввёл procedure TForm1.DBGrid1KeyDown собственно которая позволяет листать мне Table нажатием клавиши вниз, но при листании и попадание на последнею запись Таблице в DBGrid1 и нажатии ещё 1-го раза вниз вылетает ошибка отсутствия значения null.
Вот код:
Код

procedure TForm1.DBGrid1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
Edit3.Text:=(Table1.FieldByName('F.I.O.').AsString);
Edit4.Text:=(Table1.FieldByName('Data_Zaselenia').AsString);
Edit5.Text:=(Table1.FieldByName('Data_Otezda').AsString);
Edit6.Text:=IntToStr(Table1.FieldByName('Nomer').AsInteger);
Edit7.Text:=(Table1.FieldByName('Status').AsString);
Edit8.Text:=IntToStr(Table1.FieldByName('Oplata').AsInteger);
end;

Как можно сделать так чтобы ошибки не было или таблица возвращалась вверх, что угодно но чтобы не было  ошибки.
Заранее Благодарен.

Автор: SPrograMMer 7.12.2010, 12:55
1. Используйте вместо TEdit компоненты TDBEdit => пропадет тот код который вы написали

Цитата(SergSD29 @  7.12.2010,  11:36 Найти цитируемый пост)
собственно которая позволяет листать мне Table нажатием клавиши вниз

эээ.... а разве так не происходит без какого-либо дополнительного программирвоания в DBGrid?

2. Ну или если уж сильно надо, то подобная реализация могла бы быть следующая:
Код

procedure TForm1.DBGrid1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  case key of
     38:   /// вверх
           if Not DataSet.Bof Then DataSet.Prior;
     40:   /// вниз
           if Not DataSet.Eof Then DataSet.Next;
  end;
end;

Автор: SergSD29 7.12.2010, 14:22
DBEdit не помогает а с DataSet я мало знаком может другой метод

http://s1.ipicture.ru/Gallery/Viewfull/2498868.html

Автор: superVad 7.12.2010, 14:30
SergSD29, TDBEdit по другому работает - ему не надо никаких значений присваивать - просто настроить на нужные поля в ДатаСорсе, так же как грид.
Можно еще гриду - ридонли в тру поставить, тогда он по идее не будет новую строчку создавать внизу.

Автор: SergSD29 7.12.2010, 14:36
СПАСИБО superVad помогло  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)