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

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

Запрос на создание процедуры в IBase. [D6, XP]


Страницы:   1 2

Drowsy ©   (2009-11-05 08:41:00) 

Почему не проходит такой запрос?
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;


Drowsy   (2009-11-05 11:44:00) [1]

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


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

Query.ParamCheck = ???


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

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


Drowsy   (2009-11-05 11:29:00) [4]


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


char 8 - это ':'


Drowsy   (2009-11-05 11:28:00) [5]

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


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


> line 6, char 8


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

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


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


> Сергей М. ©   (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:15:00) [8]

Старнно ..

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 - 5char 41

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


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

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


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

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;


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

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


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

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

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


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

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:10:00) [14]

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

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


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

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

UPDATE MyTable SET eq_rel_code = - 1


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


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

пишет

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


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


> Drowsy   (05.11.09 08:58) [8]


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


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


> suspend убрал


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


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


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

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


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

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


Страницы:   1 2

Наверх

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