Текущий архив: 2004.05.30;
Скачать: CL | DM;
ВнизСинтаксис Query Найти похожие ветки
← →
Skulll © (2004-05-07 17:01) [0]
SELECT n.id_price, n.id_sklad
FROM nakl_in n
WHERE n.id_nakl_in=:id_nakl_in
INTO :ID_PRICE1, :ID_SKLAD
;
SELECT s.id_price
FROM sklad s
WHERE s.id_sklad=:ID_SKLAD
INTO :ID_PRICE2
;
EXECUTE PROCEDURE price_copy (:ID_PRICE1, :ID_PRICE2);
Делфа не понимает INTO в Select в Query.
Модно ли в Query использовать локальные переменные?
Хранимую процедуру сделять не представляется возможным.
← →
Мунька © (2004-05-07 17:06) [1]Чего то я не понимаю, а причем здесь INTO к SELECT? Вы хотите как-то по-особому назвать извлеченные данные? Или что?
Или INTO - особенность Интербэйса?
← →
HSolo © (2004-05-07 17:16) [2]>Хранимую процедуру сделять не представляется возможным
Так - да :) А зачем ее с клиента создавать?
На сервере:
create procedure New_Procedure (входные_параметры)
returns (выходные_параметры)
as
begin
/* Procedure Text */
suspend;
end
На клиенте:
select ... from New_Procedure (входные_параметры)
← →
Skulll © (2004-05-07 17:24) [3]>Мунька
>INTO - особенность Интербэйса?
Это я догодывался, я так для примера привел
>HSolo
У меня сервер Cache. Он тоже INTO в SELECT не понимает.
Вот можно ли какнибудь в стандартном SQL(QUERY) не зависящем от Interbase"а использовать локальные переменные, т.е обьявить та их можно но как в них из select"а передать значения
← →
Nikolay M. © (2004-05-07 17:41) [4]Какие-то почесывание левой ногой, имхо.
Почему пример из сабжа просто не сделать одним запросом? Не нужны будут никакие переменные.
← →
Мунька © (2004-05-07 17:44) [5]Параметризованный запрос
sqltxt = "DELETE FROM TableHistory " + AnsiString("\n");
sqltxt = sqltxt + "WHERE UserId =" + IntToStr(UserId);
sqltxt += " AND (DateTimeEvent BETWEEN :DTEB AND :DTEE) ";
//:DTEB, :DTEE - параметры, их отличительная особенность :
ADODelHist->SQL->Clear();
ADODelHist->SQL->Add(sqltxt);
try
{
//Здесь в параметры передаются значения
ADODelHist->Parameters->ParamByName(WideString("DTEB"))->Value = BDT;
ADODelHist->Parameters->ParamByName(WideString("DTEE"))->Value = EDT;
if (!ADODelHist->Prepared)
ADODelHist->Prepared = true;
ADODelHist->ExecSQL() ;
}
catch(...)
{
ModalResult = mrCancel;
return;
}
← →
HSolo © (2004-05-07 17:51) [6]Про Cache я не знаю ничего, кроме факта его существования :( Но, может, Вам достаточно выполнить с клиента примерно такой запрос:
SELECT n.id_price id_price1, n.id_sklad, s.id_price id_price2
FROM nakl_in n
JOIN sklad s on s.id_sklad = n.id_sklad
WHERE n.id_nakl_in = :id_nakl_in
(с точностью до синтаксиса - не знаю, как выглядит join в cache)
← →
Skulll © (2004-05-08 10:32) [7]>Nikolay M.
>Почему пример из сабжа просто не сделать одним запросом? Не >нужны будут никакие переменные.
Это и есть один запрос. Правдо я про ";" забыл, надо наверное SET TERM.
>Мунька ©
у меня задача немного другая.
:id_nakl_in - входной параметр
ID_PRICE1, :ID_PRICE2, :ID_SKLAD - локальные переменные определяемые через :id_nakl_in
Выходных параметров нет.
Вообще я нашен немного геморойный, но выход. Надо на каждый блок создовани свой запрос.
Блок 1
SELECT n.id_price, n.id_sklad
FROM nakl_in n
WHERE n.id_nakl_in=:id_nakl_in
INTO :ID_PRICE1, :ID_SKLAD
Блок 2
SELECT s.id_price
FROM sklad s
WHERE s.id_sklad=:ID_SKLAD
INTO :ID_PRICE2
Блок 3
EXECUTE PROCEDURE price_copy (:ID_PRICE1, :ID_PRICE2)
Но у меня price_copy состоит из четырех блоков с циклом.
Как я понял SQL Query нельзя такое проделять
← →
Desdechado © (2004-05-08 15:09) [8]а что, вызвать квери 3 раза с разным текстом запроса нельзя?
имхе, самый простой выход
Страницы: 1 вся ветка
Текущий архив: 2004.05.30;
Скачать: CL | DM;
Память: 0.46 MB
Время: 0.046 c