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

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

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???
...


Наверх

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