![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
TpFIBQuery+TThread [FB1.0.3]
starik30 © (2004-05-20 12:34:00)Вроде бы простой код выполняется в потоке: (SQL_Statement - процедура для вставки в таблицу вида select * from proc_name (...)и формируется она динамически в потоке)
if SQL_Statement<>'' then
begin
fmMonotor1.trFromSAA.StartTransaction;
try
fmMonotor1.qrFromSAA.Close;
fmMonotor1.qrFromSAA.SQL.Clear;
fmMonotor1.qrFromSAA.SQL.Add(SQL_Statement);
fmMonotor1.qrFromSAA.ExecQuery;
fmMonotor1.trFromSAA.Commit;
except
Ошибка :
Can't Prepare, because query is empty
Пару записей вставляет потом затыкается и все...
Заранее благодарен
Юра
Курдль (2004-05-20 16:26:00) [1]
> А можно узнать в чем ошибка ?..
Да все более-менее. При Вашем "стиле вызова" это скорее будет не процедура, а функция. Если она не призвана возвращать НД, лучше так не делать. К тому же не все СУБД поддерживают такой синтаксис.
Vlad (2004-05-20 16:19:00) [2]
> starik30 (20.05.04 16:16) [10]
Да не в чем, шутят они. Все нормально.
starik30 (2004-05-20 16:16:00) [3]> Курдль
А можно узнать в чем ошибка ?..
Digitman (2004-05-20 15:29:00) [4]
> Курдль © (20.05.04 15:21) [8]
эт точно ! (с) Сухов
Курдль (2004-05-20 15:21:00) [5]
> вызов этой процедуры происходит так :
> select * from proc_name (...)
Чего только не насмотришься на этом сайте :)
starik30 (2004-05-20 15:18:00) [6]> Digitman
Есть хранимая процедурана сервере, которая выполняет вставку в таблицу + некоторый контроль и возвращает id вставленной записи ... вызов этой процедуры происходит так :
select * from proc_name (...)
Digitman (2004-05-20 15:13:00) [7]
> процедура для вставки в таблицу вида select * from proc_name
> (...)
это как ?
какая такая "вставка" ?
select-предложение никаких "вставок" не делает, оно предназначено для выборки!
starik30 (2004-05-20 15:09:00) [8]Извините за беспокойство - проблема решена - в строке встречался знак вопроса, который TpFIBQuery ... короче отключил ParamCheck и все завертелось ... Как говориться клинишь - сходи покушай рыбу -))
starik30 (2004-05-20 15:02:00) [9]> Johnmen
...
trFromSAA : TpFIBTransaction;
qrFromSAA: TpFIBQuery;
SQL_string : string;
...
Я хотел сказать что значение SQL_stringравно select * from proc_name (...)т.е. происходит вызов хранимой процедуры, которая выполняет вставку в таблицу ...
> Курдль программа мониторит директорий находит файлы записывает их в потоке в базу и еще хочется чтобы эта же программа в другом потоке через определенные промежутки времени делала запрос к базе и обратно готовила другие файлы в другой директорий ...
но из-за чего возникает ошибка?..
Vlad (2004-05-20 14:20:00) [10]
> Курдль © (20.05.04 14:11) [2]
> Зачем выполнять обращения к СУБД в потоке?
Причин много, например нужно чтобы основное приложение работало, а не висело, в то время как в фоне будет работать достаточно долгий запрос.
Другой пример - нужна очень быстрая загрузка данных из какого-либо источника на сервер. Несколько потоков будут делать это намного быстрее чем один
Курдль (2004-05-20 14:11:00) [11]...и еще, - научите меня быть умным!
Зачем выполнять обращения к СУБД в потоке?
Johnmen (2004-05-20 14:01:00) [12]Что-то не то здесь написано...
Чей метод StartTransaction? Разве TpFIBQuery ???
Что требуется в качестве аргумента методу Add ? По-моему, строка. Но SQL_Statement - процедура...- бред ?
Если select * from, то причем здесьExecQuery;?
Если вставки в таблицу, то причем здесь select * from???
...