![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как прервать цикл While? [D7, 95/98]
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 можно список полей указать.