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

Вниз

Запрос на создание процедуры в IBase.   Найти похожие ветки 

 
Drowsy   (2009-11-05 08:41) [0]

Почему не проходит такой запрос?
procedure TfmDryBar.ProcClick(Sender: TObject);
var tab_nam : string;
begin
 tab_nam := Editor.Text"MILLS";
 with dmMain.QueryWork do
 begin
  if not Transaction.Active then Transaction.StartTransaction;
  try
   with Sql do
   begin
     Clear;
     Add("CREATE PROCEDURE UPD_TAB ");
     Add("as ");
     Add("declare variable N_V integer ; ");
     Add("begin ");

==>>      Add(Format("  for select %s.Code From %s into :N_V   ",[Tab_Nam, Tab_Nam]));
// в этой строке сервер не принимает символы :N_V
     Add("  do ");
     Add("  begin ");
     Add(Format("  update %s set  %s.eq_rel_code = -1 ",[Tab_Nam, Tab_Nam]));
     Add(Format("  where %s.Code = :SASD; ",[Tab_Nam]));
     Add("  end ");
     Add("  suspend ; ");
     Add("end; ");

   end;
   ExecSQL;

   if dmMain.QueryWork.Transaction.Active then dmMain.QueryWork.Transaction.Commit;
  except
   on E: Exception do
   begin
     if dmMain.QueryWork.Transaction.Active then dmMain.QueryWork.Transaction.Rollback;
     Application.MessageBox(PChar(E.Message + "   " + IntToStr(E.HelpContext)) ,PChar(""));
   end;
 end;
end;


 
Сергей М. ©   (2009-11-05 08:49) [1]


>  Add("  suspend ; ");


Какой может быть SUSPEND в процедуре, обновляющей (а не возвращающей) данные ? Да еще и вынесенное за пределы цикла for..do ?


> if dmMain.QueryWork.Transaction.Active then


С чего бы ей быть неактивной, если вышестоящий вызов Transaction.StartTransaction завершился успешно ?


 
Сергей М. ©   (2009-11-05 08:51) [2]


> for select


Пардон, не увидел сразу.


 
Сергей М. ©   (2009-11-05 08:52) [3]

QueryWork - это что ?


 
Drowsy   (2009-11-05 08:54) [4]

suspend убрал, но запрос всё равно не  идёт.
до выполнения процедуры дело не дошло - мне создать её не удаётся.


 
Drowsy   (2009-11-05 08:55) [5]

QueryWork: TIBQuery;


 
Inovet ©   (2009-11-05 08:57) [6]

> [0] Drowsy   (05.11.09 08:41)
> сервер не принимает символы :N_V

А они как параметр не трактуются ещё до отправки?


 
Сергей М. ©   (2009-11-05 08:58) [7]


> сервер не принимает символы :N_V


Что говорит ?


 
Drowsy   (2009-11-05 08:58) [8]

:SASD - это, конечно, очепятка  :N_V.


 
Drowsy   (2009-11-05 09:00) [9]


> Inovet ©   (05.11.09 08:57) [6]

это же локальная переменная.


 
Сергей М. ©   (2009-11-05 09:00) [10]


> suspend убрал


SUSPEND имеет смысл в селективной процедуре, возвращающей набор данных. А у тебя процедура никаких данных не возвращает.


 
Сергей М. ©   (2009-11-05 09:01) [11]


> Drowsy   (05.11.09 08:58) [8]


Непонятно, зачем тут вообще нужно SELECT-предложение ?


 
Drowsy   (2009-11-05 09:03) [12]


> Сергей М. ©   (05.11.09 08:58) [7]
>
> > сервер не принимает символы :N_V
>
>
> Что говорит ?

пишет

SQL error code = -104
Token unknown line - 5 char 41
? 0


 
Сергей М. ©   (2009-11-05 09:05) [13]

Насколько я понял, все это нагромождение сводится к выполнению тривиального запроса

UPDATE MyTable SET eq_rel_code = - 1


 
Drowsy   (2009-11-05 09:10) [14]

на самом деле запрос более сложный.
там ещё where и прочее.

я постепенно убирал, надеясь, что ошибка не в синтаксисе.


 
Drowsy   (2009-11-05 09:12) [15]

declare variable N_V integer - это проходит

    Add(Format("  for select %s.Code From %s into :N_V   ",[Tab_Nam, Tab_Nam])); - а это не нравится


 
Drowsy   (2009-11-05 09:17) [16]

Drowsy   (05.11.09 09:10) [14]
на самом деле запрос более сложный.

... в смысле, сама процедура более сложная, а не запрос на её создание.


 
Сергей М. ©   (2009-11-05 10:31) [17]

Приведи получившийся QueryWork.SQL.Text ..


 
Drowsy   (2009-11-05 10:56) [18]

CREATE PROCEDURE UPD_TAB
as
declare variable N_V integer ;
begin
 for select MILLS.Code From MILLS  
 into :N_V  
 do
 begin
 update MILLS set  MILLS.eq_rel_code = -1
 where MILLS.Code = :N_V;
 end
end;


 
Drowsy   (2009-11-05 11:11) [19]

Dynamic SQL Error
SQL error code = -104
Token unknown - line 6, char 8
?


 
Сергей М. ©   (2009-11-05 11:15) [20]

Старнно ..

1 CREATE PROCEDURE UPD_TAB
2 as
3 declare variable N_V integer ;
4 begin
5 for select MILLS.Code From MILLS  

Token unknown line - 5 char 41

5-я строчка - это не into :N_V , да и нет так 41 символов ..


 
Drowsy   (2009-11-05 11:19) [21]


> Сергей М. ©   (05.11.09 11:15) [20]
> Старнно ..


Было:

    Add(Format("  for select %s.Code From %s into :N_V   ",[Tab_Nam, Tab_Nam]));
// в этой строке сервер не принимает символы :N_V

=>>Token unknown line - 5 char 41

Теперь:
      Add(Format("  for select %s.Code From %s  ",[Tab_Nam, Tab_Nam]));
      Add("  into :N_V   ");
// в этой строке сервер не принимает символы :N_V

==>Token unknown - line 6, char 8


 
Сергей М. ©   (2009-11-05 11:27) [22]


> line 6, char 8


Все равно странно ..

А что говорит IBExpert при попытке компиляции текста этой ХП ?


 
Drowsy   (2009-11-05 11:28) [23]

компилируется и исправно исполняется.


 
Drowsy   (2009-11-05 11:29) [24]


> Сергей М. ©   (05.11.09 11:27) [22]
>
> > line 6, char 8
>
>
> Все равно странно ..


char 8 - это ":"


 
Сергей М. ©   (2009-11-05 11:30) [25]

А что говорит SQLMonitor ? Или ты не IBExpress-коимпоненты используешь ?


 
Сергей М. ©   (2009-11-05 11:31) [26]

Query.ParamCheck = ???


 
Drowsy   (2009-11-05 11:44) [27]

Спасибо, Сергей!
Я бы до Query.ParamCheck сто лет не догадался.



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

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

Наверх




Память: 0.53 MB
Время: 0.015 c
15-1255892869
POOP
2009-10-18 23:07
2009.12.20
Как в mathcad e решить линейное уравнение?


2-1256817317
user51
2009-10-29 14:55
2009.12.20
не считывает данные из сетевого файла


1-1229369606
Zilog
2008-12-15 22:33
2009.12.20
TListView - где это событие найти?


1-1228909434
Alex_C
2008-12-10 14:43
2009.12.20
Как в DBGrid отловить MouseWheel?


1-1229336430
Afonya
2008-12-15 13:20
2009.12.20
Прорисовка пункта меню своими руками