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

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

Как работать с 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-й для визуальных пользовательских запросов, а второй для невизуальных(внутренних) ?


Наверх

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