Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 20.11.2012, 09:47
Аватар для seelenus
seelenus seelenus вне форума
Прохожий
 
Регистрация: 14.11.2012
Адрес: Новокузнецк
Сообщения: 14
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию Перемещение указателя в DBGrid

Здравствуйте.
Проблема такая: есть ряд кнопок и четыре из них хочу сделать как в DBNavigator, т.е переход в начало списка (ToolToBegin), на предыдущую запись (ToolToBack), на слудующую (ToolToForward) и в конец списка (ToolToEnd). Вот обработчик кнопки "переход на следующую запись":
Код:
procedure TForm1.ToolToForwardClick(Sender: TObject);
begin
if DataModule2.ADOQuery1.Eof then
  begin
    Form1.ToolToForward.Enabled:=false;
    Form1.ToolToEnd.Enabled:=false;
  end
  else
  begin
    DataModule2.ADOQuery1.Next;
    if not DataModule2.ADOQuery1.Bof then
    begin
      Form1.ToolToBack.Enabled:=true;
      Form1.ToolToBegin.Enabled:=true;
    end;
  end;
end;
Никак не могу сделать, чтобы условие " if DataModule2.ADOQuery1.Eof " срабатывало сразу. Оно почему-то срабатывает не сразу, а после третьего нажатия на кнопку, т.е. кнопки у меня неактивными становятся не сразу.

Последний раз редактировалось seelenus, 20.11.2012 в 09:55.
Ответить с цитированием
  #2  
Старый 20.11.2012, 09:49
Аватар для seelenus
seelenus seelenus вне форума
Прохожий
 
Регистрация: 14.11.2012
Адрес: Новокузнецк
Сообщения: 14
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Может есть какой-то получше способ проверить стоит указатель в конце или в начале?
Ответить с цитированием
  #3  
Старый 20.11.2012, 10:03
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

в справке написано про это:
Цитата:
Eof is true when an application:
...
Call a dataset’s Next method, and the method fails because the current record is already the last row in the dataset.
...
т.е. если Next перешел на последнюю запись, то Eof не будет true. он станет true когда будет вызван Next с уже последней записи.
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
Этот пользователь сказал Спасибо NumLock за это полезное сообщение:
seelenus (20.11.2012)
  #4  
Старый 20.11.2012, 11:13
Аватар для seelenus
seelenus seelenus вне форума
Прохожий
 
Регистрация: 14.11.2012
Адрес: Новокузнецк
Сообщения: 14
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Здесь оказывается еще один момент есть: в таблице access есть последняя пустая строка. Я на нее сначала не обращал внимания, но потом в DBGrid, когда перемещаешь указатель с помощью клавиатуры от последней строчки вниз, то появляется пустая строка. А когда указатель перемещаешь вверх, то строка исчезает.[IMG]c:\imag.png[/IMG]
Подскажите, как избавиться от этой строки.
Ответить с цитированием
  #5  
Старый 20.11.2012, 11:28
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

просто при нажатии стрелки вниз на последней строке автоматически происходит добавление новой записи Dataset.Append:
Код:
procedure TCustomDBGrid.KeyDown(var Key: Word; Shift: TShiftState);
...
  procedure NextRow(Select: Boolean);
  begin
    with FDatalink.Dataset do
    begin
      if (State = dsInsert) and not Modified and not FDatalink.FModified then
        if FDataLink.EOF then Exit else Cancel
      else
        DoSelection(Select, 1);
      if FDataLink.EOF and CanModify and (not ReadOnly) and (dgEditing in Options) then
        Append;
    end;
  end;
...
      case Key of
        VK_UP: PriorRow(True);
        VK_DOWN: NextRow(True);
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
Этот пользователь сказал Спасибо NumLock за это полезное сообщение:
seelenus (20.11.2012)
  #6  
Старый 20.11.2012, 11:38
Аватар для seelenus
seelenus seelenus вне форума
Прохожий
 
Регистрация: 14.11.2012
Адрес: Новокузнецк
Сообщения: 14
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от NumLock
просто при нажатии стрелки вниз на последней строке автоматически происходит добавление новой записи Dataset.Append:
Код:
procedure TCustomDBGrid.KeyDown(var Key: Word; Shift: TShiftState);
...
  procedure NextRow(Select: Boolean);
  begin
    with FDatalink.Dataset do
    begin
      if (State = dsInsert) and not Modified and not FDatalink.FModified then
        if FDataLink.EOF then Exit else Cancel
      else
        DoSelection(Select, 1);
      if FDataLink.EOF and CanModify and (not ReadOnly) and (dgEditing in Options) then
        Append;
    end;
  end;
...
      case Key of
        VK_UP: PriorRow(True);
        VK_DOWN: NextRow(True);
Ага, то есть это автоматическое редактирование таблицы. Нашел такое свойство Editing и отключил, спасибо.
Ответить с цитированием
  #7  
Старый 20.11.2012, 12:03
Аватар для seelenus
seelenus seelenus вне форума
Прохожий
 
Регистрация: 14.11.2012
Адрес: Новокузнецк
Сообщения: 14
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от NumLock
т.е. если Next перешел на последнюю запись, то Eof не будет true. он станет true когда будет вызван Next с уже последней записи.

блин, не могу сделать, чтобы при установке указателя на последнюю строку кнопки отключались, т.е. чтобы реакция была сразу же. Не прдскажете как сделать проверку на последнюю и первую строки?
Ответить с цитированием
  #8  
Старый 20.11.2012, 12:06
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от seelenus
блин, не могу сделать, чтобы при установке указателя на последнюю строку кнопки отключались, т.е. чтобы реакция была сразу же. Не прдскажете как сделать проверку на последнюю и первую строки?
Можешь например в событии AfterScroll проверять значение RecNo на 1 и на RecordCount.

Последний раз редактировалось poli-smen, 20.11.2012 в 12:08.
Ответить с цитированием
Этот пользователь сказал Спасибо poli-smen за это полезное сообщение:
seelenus (20.11.2012)
  #9  
Старый 20.11.2012, 12:16
Аватар для seelenus
seelenus seelenus вне форума
Прохожий
 
Регистрация: 14.11.2012
Адрес: Новокузнецк
Сообщения: 14
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

ну, блин, че бы я без вас делал?м
Ответить с цитированием
  #10  
Старый 20.11.2012, 12:45
Аватар для seelenus
seelenus seelenus вне форума
Прохожий
 
Регистрация: 14.11.2012
Адрес: Новокузнецк
Сообщения: 14
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от poli-smen
Можешь например в событии AfterScroll проверять значение RecNo на 1 и на RecordCount.
Да, ща тоже посмотрел, там 1, а не ноль
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 18:32.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter