Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2009.12.20;
Скачать: [xml.tar.bz2];

Вниз

Запрос на создание процедуры в 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.005 c
2-1256904426
И. Павел
2009-10-30 15:07
2009.12.20
Удаление Objects в TsListBox


2-1257111869
Тимофей
2009-11-02 00:44
2009.12.20
bmp or jpeg в черно белый


2-1256913703
Serge
2009-10-30 17:41
2009.12.20
Предпросмотр и печать ListView


2-1257331068
6ruse
2009-11-04 13:37
2009.12.20
Редактирование записи


2-1257243276
kyn66
2009-11-03 13:14
2009.12.20
Ошибка в коде, который раньше работал.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский