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

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

Как прервать цикл While? [D7, 95/98]


Страницы:   1 2 3

dera ©   (2006-02-01 14:36:00) 

В цикле while not Table1.Eof do ищется запись в довольно большой таблице. Таблица выведена в гриде. Как можна сделать:
1) по нажатию на ESC прервать поиск и выйти из цикла
2) на время поиска "отключить" таблицу от грида (возможно так будет быстрей искать)


Ega23   (2006-02-01 16:23:00) [21]


> (сейчас уже меня запинают ;))


Почему? Я обычно так и делаю...


msguns   (2006-02-01 16:22:00) [22]

>dera   (01.02.06 16:12) [25]
>Но мне как раз надо редактировать найденную запись. Как можна реализовать? Ведь Query этого не позволяет.

Даже на этом ресурсе есть статьи по работе с BDE, которые тебе просто необходимо прочитать.
Query вполне позволяет, если к нему "прикрутить" TUpdateSQL. Кроме того ничто не мешает другим квери апдэйтить таблицу, после чего отображающий просто переоткрывать с позиционированием на обновленную запись (сейчас уже меня запинают ;))
Помимо этого можно уйти от BDE в пользу ADO, где есть "универсальная" компонента, сочетающая в себе достоинства и Table, и Query,- TADODataSet.
Можно остановить выбор на dbExpress вообще практически с неорграниченными возможностями.


evvcom   (2006-02-01 16:19:00) [23]


> Ведь Query этого не позволяет.

Позволяет. См. TUpdateSQL


ZeroDivide   (2006-02-01 16:17:00) [24]


> Но мне как раз надо редактировать найденную запись. Как
> можна реализовать? Ведь Query этого не позволяет.


Возможно все что ты хочешь сделать можно написать одним Update Statement'ом.
Напиши алгоритм, который у тебя в теле цикла.


Kolan   (2006-02-01 16:17:00) [25]

Где и как выполняется цикл неважно.

Как боротся с "зависание" главного потока - другой вопрос. И решений несколько - доп. поток, Applicatio.ProcessMessages ...

Я ответил на вопрос...


Ega23   (2006-02-01 16:13:00) [26]


> Kolan ©   (01.02.06 16:08) [24]
>
> Как прервать цикл While
>
> Самое простое:
> Заводишь переменную:
> var
>  FIsBreakLoop: Boolean;
>
> while () do
> begin
> { Любые действия}
>  {Те проверяешь. Если переменная = True то надо цикл оборвать}
>  if FIsBreakLoop then
>  begin
>    FIsBreakLoop := False;
>    Break;
>  end;
> end;
>
> А в программе пишешь в OnKeyDown:
> procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
>
>  Shift: TShiftState);
> begin
>  if Key = VK_ESCAPE then  
>    FIsBreakLoop := True;
> end;


Ты забываешь, что цикл выполняется В ОСНОВНОМ ПОТОКЕ ПРОГРАММЫ.
Попробуй сам такой код написать. Без Applicatio.ProcessMessages в теле цикла.
И тогда ты увидишь, что твой вариант нихрена не работает.


dera   (2006-02-01 16:12:00) [27]

>>Asail   (01.02.06 16:02) [21]

Совершенно правильно. :-)

Но мне как раз надо редактировать найденную запись. Как можна реализовать? Ведь Query этого не позволяет.


Kolan   (2006-02-01 16:08:00) [28]

Как прервать цикл While

Самое простое:
Заводишь переменную:
var
 FIsBreakLoop: Boolean;


while () do
begin
{ Любые действия}
 {Те проверяешь. Если переменная = True то надо цикл оборвать}
 if FIsBreakLoop then
 begin
   FIsBreakLoop := False;
   Break;
 end;
end;


А в программе пишешь в OnKeyDown:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
 Shift: TShiftState);
begin
 if Key = VK_ESCAPE then  
   FIsBreakLoop := True;
end;


msguns   (2006-02-01 16:06:00) [29]

Переключись с BDE на ADO - там другой SQL с куда большими возможностями. В частности там есть волшебное слово TOP


dera   (2006-02-01 16:06:00) [30]

под "подключить" я понимаю  Query.Open;

я все неправильно делал :-(

теперь получилось! Благодарю, мастера!


Asail   (2006-02-01 16:02:00) [31]


> Что значит "подключить" ?

Видимо, автор пытался в Object Inspector'е для Query Active=True выставить, а в SQL тело запроса прописать и забыл...


Digitman   (2006-02-01 15:59:00) [32]


> dera   (01.02.06 15:56) [18]
>   при попытке подключить Query пишет


Что значит "подключить" ?

Телепатировать будем по поводу "подключить" ?

Давай потелепатируем.

Чему у тебя равно зн-е св-ва Query.SQL.Text ?


Ega23   (2006-02-01 15:57:00) [33]

А
Query.SQL.Text:='Select * from Table1';
Query.Open;

делать пробовал?

:о)


dera   (2006-02-01 15:56:00) [34]

>>Не верю. Select * from не проходит???
  при попытке подключить Query пишет
  "Query1: No SQL statement available"


Asail   (2006-02-01 15:54:00) [35]


> Не верю. Select * from не проходит???

И я тоже. Table.Open выполняет тот-же SELECT насколько я понимаю.


Ega23   (2006-02-01 15:47:00) [36]


>  Получилось только к Table подключить таблицу через ист.
> данных в ОДБС.
>  C Query не получается.


Не верю. Select * from не проходит???


dera   (2006-02-01 15:41:00) [37]

>>msguns ©   (01.02.06 15:34) [14]
 СУБД Brtieve
 Получилось только к Table подключить таблицу через ист.данных в ОДБС.
 C Query не получается.


msguns   (2006-02-01 15:34:00) [38]

>dera   (01.02.06 15:30) [11]

Какие форматы БД (парадокс, дибэйз, склXXX..) будут обрабатываться ?
Выбор компонент BDE жестко фиксирован ?


ZeroDivide   (2006-02-01 15:34:00) [39]

Locate можно делать по нескольким полям, разделенным ';'


Ega23   (2006-02-01 15:34:00) [40]

В методе Locate можно список полей указать.


Страницы:   1 2 3

Наверх

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