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

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

Create Procedure [D3, IB6.x]


BlackKing ©   (2003-12-01 11:43:00) 

Подскажите пожалуйста, что сдесь не так? почему ругается на: Column unknown. IDMAT.

CREATE PROCEDURE SetMatDaudz(IdMat INT)
AS
Declare variable Sum1 Double precision;
Declare variable Sum2 Double precision;
BEGIN
Select Sum(SSar_Daudz) From Sp_Sar Where Sp_Sar.Id_Mat =IdMat INTO SUM1;
IF (SUM1 IS NULL) THEN SUM1=0;
Select Sum(SVSar_Daudz) From SVp_Sar Where SVp_Sar.Id_Mat =IdMat INTO SUM2;
IF (SUM2 IS NULL) THEN SUM2=0;
Update Material Set Mat_Daudz = SUM1+SUM2 Where Material.Id_Mat =IdMat;
END;


BlackKing   (2003-12-01 17:27:00) [1]

Nu kak vsegda, kak tol"ko nashol, tak srazu otvet pojavljajetsja :o)

Vsjo ravno vsem Spasibo :o)

Imenno ParamCheck i portil vsju malinu.


kaif   (2003-12-01 16:04:00) [2]

Ты спокойно можешь выполнить из IBQuery или из IBSQL эту свою команду по созданию процедуры.
Единственное, что нужно сделать - призвоить свойству ParamCheck значение False. Иначе компонент пытается все места в тексте, где находит двоеточие, заменить символом вопроса и интерпретировать, как параметры SQL-запроса.
А все так называемые исполнители скриптов именно это и делают. Сначала разбивают скрипт на отдельные команды, а затем передают их на исполнение компоненту IBSQL или другому компоненту, способному отослать команду на сервер. Важно лишь, повторяю, отключить ParamCheck.


Val   (2003-12-01 12:52:00) [3]

Ясно. Вам нужен либо компонент, который умеет выполнять именно скрипты, либо используйте isql любым доступным способом.


BlackKing   (2003-12-01 12:43:00) [4]

смысл таков: прога установлена в другом городе, я же не поеду к клиенту, чтобы в его базу добавить ету процедуру. я просто пошлю ЕХЕ-файлик и он всё сделает.
Ну ето тока пример.
Ещё делаю програмку, которая автоматически будет синхронизировать структуру базы клиента с моей (я послал ему структуру моей, а программа его базу подогнала под мою).
И т.д.

Да и вааще, не люблю я пользоваться чужими программами, особенно где много наворотов мне не нужных. Обычно делаю свои простенькие редакторы.


Val   (2003-12-01 12:34:00) [5]

скажите, а какова необходимость выполнять данный ддл-скрипт с клиента?


BlackKing   (2003-12-01 12:26:00) [6]

CREATE PROCEDURE SETMATDAUDZ (IDMAT INTEGER)
AS
DECLARE VARIABLE SUM2 DOUBLE PRECISION;
DECLARE VARIABLE SUM1 DOUBLE PRECISION;
begin
Select Sum(SSar_Daudz) From Sp_Sar Where Sp_Sar.Id_Mat =:IdMat INTO :SUM1;
IF (:SUM1 IS NULL) THEN SUM1=0;
Select Sum(SVSar_Daudz) From SVp_Sar Where SVp_Sar.Id_Mat =:IdMat INTO :SUM2;
IF (:SUM2 IS NULL) THEN SUM2=0;
Update Material Set Mat_Daudz = :SUM1+:SUM2 Where Material.Id_Mat =:IdMat;
end

IBExpert такое принял, создал процедуру, но когда я пытаюсь создать её через TQuery.ExecSQL - ругается. Почему? там другой синткс или надо процедуру создавать поэтапно?

ругается на ету строку:
Select Sum(SSar_Daudz) From Sp_Sar Where Sp_Sar.Id_Mat =:IdMat INTO :SUM1;


Val   (2003-12-01 12:01:00) [7]

>BlackKing (01.12.03 11:56) [2]
"...мать тихо ответило эхо..." :)
читаем доку по ИБ, про процедуры читаем, убираем двоеточие из определения параметра и вставляем при использовании его внутри процедуры.


BlackKing   (2003-12-01 11:58:00) [8]

Всё, разобрался.
Senks".


BlackKing   (2003-12-01 11:56:00) [9]

hmmm..в хелпе по IB нигде в примерах нет ":"
да и сам генератор в IBExpert без ":" делает.

к тому же ругается на первую строку.
если напишу
CREATE PROCEDURE SetMatDaudz(:IdMat INTEGER)
кричит : не знаю что такое ":".


Val   (2003-12-01 11:49:00) [10]

:IdMat - поскольку - параметр


Наверх

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