Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.04.11;
Скачать: CL | DM;

Вниз

Процедура в InterBase   Найти похожие ветки 

 
Назаров Евгений   (2004-04-13 13:21) [0]

Подскажите, почему такой запрос в процедуре компилируется нормально
select name from cat_parse where (id in (2,3))  into :n

а такой ругается

select name from A where (id in (:vp1,:vp2))  into :n
здесь vp1 и vp2 переменные типа integer,  id тоже integer


 
Курдль ©   (2004-04-13 13:22) [1]

Как декларированы vp1 и vp2?


 
Johnmen ©   (2004-04-13 13:25) [2]

>ругается

Матом ?


 
Назаров Евгений   (2004-04-13 13:31) [3]

DECLARE VARIABLE VP1 INTEGER;
DECLARE VARIABLE VP2 INTEGER;


 
Назаров Евгений   (2004-04-13 13:32) [4]

Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 31, char 46.
:.


 
stud ©   (2004-04-13 13:33) [5]

так ругается когда? при компиляции или при выполнении?


 
Vlad ©   (2004-04-13 13:36) [6]

Могу ошибаться, но по-моему двоеточия тут не нужны:

> (:vp1,:vp2)


 
stud ©   (2004-04-13 13:36) [7]

вообще-то нормально и компилируется и выполняется.
наверное вы что-то недоговариваете?


 
Johnmen ©   (2004-04-13 13:36) [8]

Так убери : в параметрах, которые в in
:)


 
Назаров Евгений   (2004-04-13 13:41) [9]

убираю, и на этапе компиляции говорит, что
Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 31, char 46.
vp1.


 
Соловьев ©   (2004-04-13 13:45) [10]


> Token unknown - line 31, char 46.

Телепатриуем - ошибка не в

> select name from A where (id in (:vp1,:vp2))  into :n


 
Соловьев ©   (2004-04-13 13:48) [11]

Вот набросал. работает. БД под ФБ 1.5

CREATE PROCEDURE GET_TEMP
RETURNS (
   NAME VARCHAR(54) CHARACTER SET WIN1251)
AS
DECLARE VARIABLE V1 INTEGER;
DECLARE VARIABLE V2 INTEGER;
begin
   V1 = 1;
   V2 = 2;
 FOR
     SELECT A.ZONA
     FROM ABROAD A
     WHERE A.KZON IN (:V1, :V2)
     INTO :NAME
 do
 suspend;
end


 
serge35   (2004-04-13 13:49) [12]

Найди 31 строку а в ней 46 символ. Что там написано?


 
Назаров Евгений   (2004-04-13 13:54) [13]

а у меня ругается (IBase 6.5)
declare variable vp1 integer;
declare variable vp2 integer;
declare variable n varchar(255);
begin
vp1=1;
vp2=2;
for
  select name from cat_parse
  where id in (:vp1,:vp2)
  into :n
do
  name=name+n;//выходной параметр
 suspend;
end


 
Соловьев ©   (2004-04-13 14:07) [14]


> Назаров Евгений   (13.04.04 13:54) [13]

В чем создаешь?


 
Johnmen ©   (2004-04-13 14:07) [15]

Смажь всё-таки лыжи и разберись с name


 
Назаров Евгений   (2004-04-13 14:09) [16]

в это строке
where id in (:vp1,:vp2)
курсор стоит в конце слова in


 
serge35   (2004-04-13 14:17) [17]

Проблема в объявлении переменных.
попробуй сразу после degin проинициализировать переменные как написано в примере Соловьева.


 
Назаров Евгений   (2004-04-13 14:52) [18]

>sergey35  -  а разве после begin можно ??
я уже даже новую процедуру создал, всё заново написал как в примере Соловьева, не работает так же !


 
Digitman ©   (2004-04-13 15:05) [19]

оператор конкатенации строк - ||


 
serge35   (2004-04-13 15:07) [20]

После begin можно практически все.
Нужен полный текст процедуры.


 
Курдль ©   (2004-04-13 15:08) [21]

НЕ ПОНЯЛ!
К сожалению, у меня IB не установлен и проверить нечем...
Но разве если переменная задекларирована, как "vp1", то и прописывать ее надо, как "vp1" а не ":vp1"? Это ведь не параметр процедуры!


 
serge35   (2004-04-13 15:18) [22]

Про двоеточия сказали еще 2 часа назад.


 
Курдль ©   (2004-04-13 15:21) [23]


> Про двоеточия сказали еще 2 часа назад.

Не заметил :)  Однако, народ же упорно приводит рабочие примеры
с двоеточиями!


 
Соловьев ©   (2004-04-13 15:38) [24]


> WHERE A.KZON IN (:V1, :V2)

: - нужно, так как его не написать - то это будет поле таблицы

> Назаров Евгений   (13.04.04 14:52) [18]

Проблема при создании? Еще раз спрашиваю - в чем ты это делаешь?
> name=name+n;//выходной параметр

См.> Digitman ©   (13.04.04 15:05) [19]


 
Назаров Евгений   (2004-04-13 15:57) [25]

делаю в IB Expert
а строку > name=name+n;//выходной параметр
я вообще-то закоментировал, тоже не помогло !


 
Соловьев ©   (2004-04-13 15:59) [26]


> Назаров Евгений   (13.04.04 15:57) [25]

мож глюк ИБ 6.5 - перейди на ФБ 1.5


 
Назаров Евгений   (2004-04-13 16:09) [27]

а в программе разве ничего править не надо будет ?
тяжковато будет, прогу уже больше года пишу, (а с БД не очень дружу), сейчас ввожу новшества, пишу каталог железа для компьютерной фирмы...
на сколько помню, пытался перейти на FB, первый встретившийся глюк - IBQuery.ExecSQL; - говорит нет такого , короче долго заморачиваться не стал..


 
Соловьев ©   (2004-04-13 16:11) [28]


> на сколько помню, пытался перейти на FB, первый встретившийся
> глюк - IBQuery.ExecSQL;

мда... точно не дружишь :)
это никак не связано с СУБД - это к компонентам доступа.
Но то что-то ты не договариваешь...
Executes the SQL statement for the query.


procedure ExecSQL;

Description

Call ExecSQL to execute the SQL statement currently assigned to the SQL property. Use ExecSQL to execute queries that do not return a cursor to data (such as INSERT, UPDATE, DELETE, and CREATE TABLE).

Note: For SELECT statements, call Open instead of ExecSQL.

ExecSQL prepares the statement in SQL property for execution if it has not already been prepared. To speed performance, an application should ordinarily call Prepare before calling ExecSQL for the first time.


 
serge35   (2004-04-13 16:12) [29]

Без полного текста процедуры дальнейшее перепирательство безсмысленно.


 
Соловьев ©   (2004-04-13 16:13) [30]


> а в программе разве ничего править не надо будет ?

думаю ничего - разве что БД прийдется восстановить из резервной копии. Но лучше про это почитай на www.ibase.ru


 
stud ©   (2004-04-13 16:42) [31]

если исползуеш бде и перейдеш на ибх то придется возможно код подправить чтобы по уму все работало. если останешся на бде ничего править будет не надо


 
Назаров Евгений   (2004-04-13 16:51) [32]

>Stud , база не BDE, а InterBase, хотел перейти на FB, если надумаю, почитаю, и сделаю - www.ibase.ru - это руль :)


 
Соловьев ©   (2004-04-13 16:58) [33]


> база не BDE, а InterBase

БДЕ - это набор длл для доступа к данным. Так что если используешь TDatabase, TQuery и т.п. То желательно перейти на InterBase Express(IBX)



Страницы: 1 вся ветка

Текущий архив: 2004.04.11;
Скачать: CL | DM;

Наверх




Память: 0.54 MB
Время: 0.033 c
4-1075481587
Hotabich
2004-01-30 19:53
2004.04.11
Помещение картинки на форму


1-1082234534
Игорь
2004-04-18 00:42
2004.04.11
Как добавить данные в меню на выпадающем меню, на рабочем столе?


6-1075996302
Aleksandr
2004-02-05 18:51
2004.04.11
Какие могут быть причины для отказа DComconnection в доступе?


8-1071061579
_VectoR_
2003-12-10 16:06
2004.04.11
3D-график


14-1079467489
kamerad
2004-03-16 23:04
2004.04.11
Можно ли написать антивирус на Delphi