![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как работать с SQL не "визуально" ? [D6, Win2k, WinXP]
DelphiN! © (2005-02-19 08:21:00)Вот буквально сегодня начал работать с SQL запросами (c Interbase).
Работаю через idQuery.
Меня озодачил следующий вопрос :
Допустим есть DBGrid, в котором пользователь работает с определенной таблицой.
Также есть процедура, которая по таймеру проверяет какие-то данные в таблице, и ей для этого необходимо сделать выборку(получить какие-то данные, которые необходимо проверить), так вот если она ее сделает, то изменяться данные и в DBGrid(которые сейчас смотрит пользователель). Как этого избежеть, тоесть сделать чтобы эта невизуальная процедура по таймеру пулачала нужные ей данные, при этом не трогая данные в DBGRid-е ? Неужели без еще одного TIDQuery не обойтись ?
atruhin (2005-02-20 14:01:00) [1]Нет ничего страшного если ты разместишь на форме хоть 10 Query, как тебе удобнее, только учти, что IBQuery работает в контексте одной транзакции (т.е. после модификации данных нужно Commit для транзакции), pFIBQuery может работать в двух, что гораздо удобнее. Часто делается один Query для модифицирующих запросов и нужное кол-во для отображения данных.
Desdechado (2005-02-19 20:31:00) [2]можно переключать datasource (передающий данные в грид) между разными наборами данных
Anatoly Podgoretsky (2005-02-19 13:58:00) [3]По поводу этого "Эти Query у меня кстати не связаны с Grid" и "изменяться данные и в DBGrid" гдето ты врешь. Поэтому опять отвечать невозможно.
Может не стоит торопиться писать сюда сразу как зечешалось, а сесть снача и обдумать вопрос. Отдача буде больше.
Anatoly Podgoretsky (2005-02-19 13:56:00) [4]DelphiN! © (19.02.05 13:51) [12]
А это меняет дело, так что отвечать будут только на заданые вопросы и никто их за тебя задавать не будет. Все в твоих руках.
DelphiN! (2005-02-19 13:53:00) [5]Эти Query у меня кстати не связаны с Grid-ами (они не визуальные для потдержки старых (не SQL-эх) процедур программы
DelphiN! (2005-02-19 13:51:00) [6]
> [11] Anatoly Podgoretsky © (19.02.05 13:42)
Сорри, не Query.ExecSQL а Query.Open
Описался ...
Anatoly Podgoretsky (2005-02-19 13:42:00) [7]IbQuery это не 5 наборов данных, а всего один компонент.
А судя по этому query.execsql у тебя вообще нет наборов данных.
И восстанавливать нечего, выполнилось и пропало.
DelphiN! (2005-02-19 13:40:00) [8]
> [9] Polevi © (19.02.05 13:33)
:)))
Таймера нет, я просто пример привел
Там сетевые сообщения в программу приходят, и в это время исполняються различные процедуры по работе с таблицами
Polevi (2005-02-19 13:33:00) [9]за таймер руки отрывать
DelphiN! (2005-02-19 13:26:00) [10]Как это отразиться на производительности ? Может лучше использовать по 1-у idQuery на каждую таблицу ?
DelphiN! (2005-02-19 13:21:00) [11]Ну когда 1-н IbQuery использую сраку скажем для 5-ти таблиц.
Получается нужно в каждой ф-ии сохранять текущее состояние таблицы, а при выходя востанавливать его, для другой ф-ии... Вобщем получается что-то типо [4] Сначало вызывается proc2, которая вызывает proc1. А proc1 сохраняет вначале состояние набора, а перед выходом востанавливает его для для proc2. Нормально ли это или лучше подругому ?
Anatoly Podgoretsky (2005-02-19 13:16:00) [12]или скажем один набор под несколько таблиц ? А это как, по русски можешь сказать?
DelphiN! (2005-02-19 12:43:00) [13]Народ, ну посоветуйте
DelphiN! (2005-02-19 11:03:00) [14]А как вы думаете, лучше сделать под каждую таблицу свой набор или скажем один набор под несколько таблиц ? Тоесть при одном наборе процедуры будут выглядеть примерно так:
procedure proc1;
var
sql: String;
begin
sql := query.sql.text; //Сохранение
qury.sql.text := 'select Field from Table1 ...';
query.execsql;
...
работа с набором
...
query.sql.text := SQL;
query.execsql; //Востановление
end;
procedure proc2;
var
sql: String;
begin
sql := query.sql.text; //Сохранение
qury.sql.text := 'select Field from Table2 ...';
query.execsql;
proc1;
...
работа с набором
...
query.sql.text := SQL;
query.execsql; //Востановление
end;
Приемлема ли эта схема ?
Просто я раньше не работал с SQL ...
Заранее благодарен за совет
Anatoly Podgoretsky (2005-02-19 09:44:00) [15]В DBGRid нет данныъ!
YurikGL (2005-02-19 09:29:00) [16]
> DelphiN! © (19.02.05 08:21)
Наборов данных нужно создавать столько, сколько их требуется. Если надо два - делай два.
DelphiN! (2005-02-19 08:23:00) [17]Может сделать 2 IdQuery, 1-й для визуальных пользовательских запросов, а второй для невизуальных(внутренних) ?