Форум: "Начинающим";
Текущий архив: 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]Старнно ..
1CREATE PROCEDURE UPD_TAB
2as
3declare variable N_V integer ;
4begin
5for 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