![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Запрос на создание процедуры в IBase. [D6, XP]
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]Старнно ..
1CREATE PROCEDURE UPD_TAB
2as
3declare variable N_V integer ;
4begin
5for 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.