C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
EXECUTE STATEMENT, Хорошая вещь, но не очень...
Deem
Отправлено: 30.04.2004, 17:20


Мастер участка

Группа: Участник
Сообщений: 327



Программа — сохраненная процедура. Сервер FBird 1.5
Короче, обращаюсь (вернее — хочу обратиться) к таблице, переданной в параметре TABLENAME (varchar). Модифицировать запрос можно только так:

STRING = 'SELECT CLIENTID FROM ' || TABLENAME || ' WHERE ID = :RECID '||
'INTO :CLIENTID ';
EXECUTE STATEMENT STRING;


Однако, фишка с INTO тут не проходит (ругается). В книжке пример с update, поэтому им легче. А мне надо полученную строку засунуть в переменную. Пока выхода не нашел.

Или может поскажете запрос с одновременным чтением одной таблицы и изменением другой? smile.gif

olegenty
Отправлено: 03.05.2004, 07:00


Ветеран

Группа: Модератор
Сообщений: 2412



задачка, однако...
в MS SQL всё бы работало, а вот в Firebird (хотя у меня Yaffil), я этого никогда не делал, хотя текущий проект сдаю именно на нём. поэкспериментирую — скажу чё-нибудь.
Deem
Отправлено: 05.05.2004, 14:21


Мастер участка

Группа: Участник
Сообщений: 327



Доку производителя читайте, дети.

EXECUTE STATEMENT string INTO :var1, ., :varn;

INTO в String вставлять нельзя. Он выносится наружу.
Да, тут уж я развернусь.

Отредактировано Deem — 05/05/2004, 15:25
olegenty
Отправлено: 05.05.2004, 15:52


Ветеран

Группа: Модератор
Сообщений: 2412



зато теперь я тоже это знаю, а знать больше — лучше, чем знать меньше.

если в результате statement получается более одной записи, что происходит?
Deem
Отправлено: 12.05.2004, 16:42


Мастер участка

Группа: Участник
Сообщений: 327



To Olegenty

А что будет, если не FOR, а просто SELECT .... INTO :A  — несколько записей вернет ? smile.gif Я не пробовал. И похоже, эта фигня E S только для SQL-запросов. Присвоение не проходит. sad.gif

Тут другая фигня, рано я обрадовался. Весь запрос можно собрать (изменять) кроме INTO, который из переменной выносится!
А мне теперь данные нужно отправлять в разные переменные. Обрабатываю месяцы smile.gif 12 штук. В цикле. Обрадовался, забабахал таблицу на 12 строк. Потом дошло, что другая проца (многопользование, однако) затрет данные, или прочтет не то, что положила. А может хваленая многоверсионность хранения данных в IB дадут прочитать каждому свои данные из одной таблицы? Каждая проца идт же по своей транзакции?
Все равно это фигня. Если не получится использовать в процедуре массив, то придется хороший кусок кода 12 раз писать(множить) для того, чтоб изменить в конце INTO M1 на INTO M2 ..... INTO M12. smile.gif

Как, блин, тут выкрутиться? КТО ЗНАЕТ, МОЖНО ЛИ В ХП СДЕЛАТЬ ПЕРЕМЕННУЮ ТИПА МАССИВ?

Отредактировано Deem — 12/05/2004, 18:36

Вернуться в Работа с базами данных в C++Builder