![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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 - поскольку - параметр