powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Горю
6 сообщений из 6, страница 1 из 1
Горю
    #32256056
Free2003
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
procedure TDataModule1.Query1AfterScroll(DataSet: TDataSet);
var a:tboonmark;
begin
a= Query1.getbookmark;
Query1.first;
while not Query1.eof do
begin
.....
Query1.next;
end;
Query1.gotobookmark(a);
Query1.freebookmark(a);
end;

Как вы думаете, Все работает правилно да?
А вот и нифига.
Процедуре есть 2 загводки. firs & next те после выполнения команды first опят вызывается этот же процедура и тд пока не будет переполнения стека.
Вопрос как делать чтобы first не вызвал этуже процедуру
...
Рейтинг: 0 / 0
Горю
    #32256102
Дмитрий Мыльников
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Никак. Процедура вызывается всегда, когда происходит перемещение курсора DataSet.
Если хочешь чтобы работало именно в этом виде, то заведи глобальный флаг, который будет при первом вызове устанавливаться, а во всех остальных случаях делай его проверку и просто пропускай само тело процедуры. Что-то типа:

Код:
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
var fWorkAS:boolean = false;

procedure TDataModule1.Query1AfterScroll(DataSet: TDataSet);
var a:tboonmark;
begin
   if not fWorkAS then begin
      fWorkAS:=true;
      try
        a:= Query1.getbookmark;
        Query1.first;
        while not Query1.eof do begin
            .....
           Query1.next;
        end;
        Query1.gotobookmark(a);
        Query1.freebookmark(a);
      finally fWorkAS:=false; end;
   end;
end; 

...
Рейтинг: 0 / 0
Горю
    #32256109
Фотография eNose
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[не активирован]
[не одобрен]
А вот вопрос есть: какой смысл этого кода???
...
Рейтинг: 0 / 0
Горю
    #32256128
Фотография CrazyMihey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Н-да...
Похоже, что логика работы этого приложения продиктована привычкой работать через BDE с Paradox овскими базами. Но сейчас, всё-таки лучше использовать SQL , или, по крайней мере, Calculated Fields . Sorry, если не так понял.
...
Рейтинг: 0 / 0
Горю
    #32256508
LAlex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Согласен с Дмитрием Мыльниковым, хочу только добавить, что явно данные из Query1 показываются в каком-то гриде или еще как-то видны пользователю, поэтому в ходе выполнения этой процедуры он будет видеть движение курсора по гриду. Поэтому перед первым вызовом следует вызвать DisableControls, а после последнего - EnableControls, это же может служить и флагом, т.е. примерно так

procedure TDataModule1.Query1AfterScroll(DataSet: TDataSet);
var a:tboonmark;
begin
if not Query1.ControlsDisabled() then begin
Query1.DisableControls();
try
a:= Query1.getbookmark;
Query1.first;
while not Query1.eof do begin
.....
Query1.next;
end;
Query1.gotobookmark(a);
Query1.freebookmark(a);
finally Query1.EnableControls(); end;
end;
end
...
Рейтинг: 0 / 0
Горю
    #32256539
ol2866
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
try
Query1.onAfterScroll:=nil;
....
finally
Query1.onAfterScroll:=Query1AfterScroll;
end;
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Горю
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]