Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.05.2007, 10:24   #1
zinnyrik
 
Регистрация: 14.05.2007
Сообщений: 8
Восклицание для этой штуки нужны тригеры и курсоры.

Брацы и сестры!...есть небольшая БД на SQL ....для этой штуки нужны тригеры и курсоры....кто нибудь если в этом во всем разбереться БОЛЬШОЕ ЧЕЛОВЕЧЕСКОЕ СПАСИБО!! =)


Create Table sklad(
sklad_num NUMERIC(6) PRIMARY KEY ,
sklad_name VARCHAR(100)
);
Create Table firm(
firm_svid NUMERIC(6)PRIMARY KEY ,
firm_name VARCHAR (100)
);
Create Table zakazwik(
zakazwik_svid NUMERIC(6)PRIMARY KEY ,
zakazwik_name VARCHAR (100)
);
Create Table dogovor(
dogovor_num NUMERIC(6)PRIMARY KEY ,
dogovor_date DATETIME DEFAULT GETDATE(),
sklad_num NUMERIC (6)
REFERENCES sklad (sklad_num),
firm_svid NUMERIC (6)
references firm (firm_svid),
);

Create Table tovar (
tovar_name VARCHAR(100)PRIMARY KEY,
tovar_num NUMERIC(6) ,
tovar_price NUMERIC(9,2) ,
sklad_num NUMERIC(6) ,
constraint ft_tovar_sklad_num foreign key (sklad_num)
references sklad (sklad_num),
);
Create Table zakaz(
zakaz_num NUMERIC (6)IDENTITY PRIMARY KEY ,
zakaz_date Datetime Default Getdate(),
zakaz_price numeric (6,2),
zakaz_pr numeric (6,2) ,
firm_svid NUMERIC(6)
references firm (firm_svid),
zakazwik_svid NUMERIC (6)
REFERENCES zakazwik (zakazwik_svid),
tovar_name varchar(100)
constraint ft_zakaz_tovar_name foreign key (tovar_name)
references tovar (tovar_name),
);
alter table zakaz add z_sum numeric (6)


insert firm(firm_svid,firm_name)
values(111,'нпо');
Insert sklad (sklad_num,sklad_name)
Values(100,'лЕПЙСПХИ');
insert sklad(sklad_num,sklad_name)
values(101,'юМЦЮПoff');
insert zakazwik(zakazwik_svid,zakazwik_nam e)
values(111,'Tovaroff');
insert zakazwik(zakazwik_svid,zakazwik_nam e)
values(122,'щДЕКЭБЕИЯЯ');
insert tovar(tovar_num,tovar_name,tovar_pr ice,sklad_num)
values(1,'аПСЯ_',500.00,101);
insert tovar(tovar_num,tovar_name,tovar_pr ice,sklad_num)
values(2,'пЕКЭЯЮ_',900.00,101);
insert tovar(tovar_num,tovar_name,tovar_pr ice,sklad_num)
values(3,'ьОЮКШ_',700.00,101);
insert tovar(tovar_num,tovar_name,tovar_pr ice,sklad_num)
values(1,'аЮМЮМШ_',550.00,100);
insert tovar(tovar_num,tovar_name,tovar_pr ice,sklad_num)
values(2,'юОЕКЭЯХМШ_',850.00,100);
insert tovar(tovar_num,tovar_name,tovar_pr ice,sklad_num)
values(2,'юМЮМЮЯШ_',1050.00,100);
insert zakaz(tovar_name,zakazwik_svid,zaka z_pr,firm_svid)
values('аПСЯ_',122,0.1,111);
insert zakaz(tovar_name,zakazwik_svid,zaka z_pr,firm_svid)
values('пЕКЭЯЮ_',122,0.1,111);
insert zakaz(tovar_name,zakazwik_svid,zaka z_pr,firm_svid)
values('юМЮМЮЯШ_',122,0.1,111);
insert zakaz ( tovar_name, zakazwik_svid,zakaz_pr,firm_svid)
values('аЮМЮМШ_',111,0.2,111);
select firm_name, firm_svid from firm;
select zakazwik_name,zakazwik_svid from zakazwik;
select sklad_num, sklad_name from sklad where sklad_num<=sklad_num+1;
select tovar_name, tovar_price, sklad_num from tovar;
create View z_blank as
select zakaz_num,zakazwik_name,firm_name,z akaz_date,t.tovar_name,
t.tovar_price+t.tovar_price*z.zakaz _pr AS "symm"
from zakaz z ,zakazwik a,firm f, tovar t
where z.zakazwik_svid=a.zakazwik_svid and z.tovar_name=t.tovar_name
GO
select * from z_blank ;
select zakaz_num, zakazwik_name, tovar_name from z_blank where zakazwik_name='щДЕКЭБЕИЯЯ';

select zakaz_num from z_blank where zakaz_num in
(select zakaz_num from zakaz where zakaz_date between '10/10/2006' and '11/12/2006');
select zakaz_num, sum("symm") as zakaz_sum from z_blank where tovar_name='аЮМЮМШ_' group by zakaz_num;

------------------------------
create View sklad_w as
select s.sklad_num,s.sklad_name,t.tovar_na me,t.tovar_price AS "жЕМЮ"
from tovar t,sklad s
where t.sklad_num=s.sklad_num
GO
create View s_blank as
select zakaz_num,s.sklad_num,s.sklad_name, firm_name,zakaz_date,t.tovar_name,
t.tovar_price+t.tovar_price*z.zakaz _pr AS "жЕМЮ"
from zakaz z ,zakazwik a,firm f, tovar t,sklad s
where z.zakazwik_svid=a.zakazwik_svid and z.tovar_name=t.tovar_name
GO
create proc QAAAAAAA @zakaz_num numeric(3)-- varchar(100)
as
select z.zakaz_num, s.tovar_name
from zakaz z join tovar s on z.tovar_name=s.tovar_name
where zakaz_num=@zakaz_num
GO
create proc schet @schet_ varchar (9)
as
select zakaz_num from z_blank z
where z.tovar_name=@schet_

....... помогите !!!
zinnyrik вне форума Ответить с цитированием
Старый 14.05.2007, 12:44   #2
Shuraken
Форумчанин
 
Аватар для Shuraken
 
Регистрация: 16.04.2007
Сообщений: 298
По умолчанию

Ну, разобраться несложно. Итак...
Имеется 6 таблиц: firm, sklad, zakazchik, tovar, dogovor, zakaz. Первые три являются основными таблицами для работы, три последние работают с ними по ключевым полям. Таблица "Товар" ссылается на склад (в котором, как я понимаю и находится сам товар), таблица "Договор" ссылается на склад и фирму (между которыми, как подозреваю и заключается договор) и таблица "Заказ", которая ссылается на фирму, заказчика и на заказываемый товар. Это что касается всех Create Table. Дальше происходит заполнение всех таблиц, кроме таблицы "Договор" (insert ....). Дальше идет выборка из таблиц(select ....). После этого создается View (вьюшка) z_blank (бланк заказа), которая представляет собой отдельный запрос, хранящийся в базе. Вьюшка соединяет таблицы "Заказ", "Заказчик", "Фирма", "Товар" и выбирает из них соответствующие поля. И еще кстати, запрос в данной вьюшке некорректен

create View z_blank as
select zakaz_num,zakazwik_name,firm_name,zakaz_date,t.tov ar_name,
t.tovar_price+t.tovar_price*z.zakaz _pr AS "symm"
from zakaz z ,zakazwik a,firm f, tovar t
where
z.zakazwik_svid=a.zakazwik_svid
and z.tovar_name=t.tovar_name
--надо добавить
and z.firm_swid = f.firm_swid

Надо так. Поехали дальше.
Дальше по аналогии создаются еще две вьюшки (причем во второй такая же ошибка, что и в первой, одна таблица остается неподсоединенной). После этого создаются две хранимые процедуры (не совсем понятно, для чего они нужны, поскольку они фактически остаются "вещью в себе". Извне им передается параметр (в первом случае значение ключевого поля таблицы "Заказ" по которой и делается запрос, во втором случае наименование товара) и дальше по этому параметру делается запрос, который, по идее надо передать в виде курсора наружу и дальше уже работать с этим курсором, но этого нет. Пожалуй, это все, что касается того, что было написано. Теперь по поводу триггеров и курсоров...
Я работаю на Оракле, там другой синтаксис, не знаю, может в твоем случае потребуется написать как-то по другому:
create proc MyProg @id numeric(3), out l_list varchar as
CURSOR cur is
select f1, f2 from table1 where f3_id = @id;
begin
l_list := '';
for v in cur loop
l_list := l_list||v.f1||'; '||v.f2||', ';
end loop
l_list := substr(l_list, 1, Length(l_list) - 2;
end;

Такая процедура (откровенная импровизация) должна вернуть в качестве выходного параметра значения полей через запятую.
Триггер...
Для твоего случая триггер... ну пусть такой, который будет заполнять таблицу "Товар" при вставке новой записи в таблицу "Склад"
create or replace trigger sklad_on_insert
before insert
on sklad
REFERENCING OLD AS OLD NEW AS NEW FOR EACH ROW
begin
insert dogovor(price, sklad_swid)
values(300, :new.sklad_swid);
end;

Код проверить не могу, поэтому это все, что здесь можно написать.
Не надо ничего усложнять. Все достаточно тривиально.
Shuraken вне форума Ответить с цитированием
Старый 15.05.2007, 13:18   #3
zinnyrik
 
Регистрация: 14.05.2007
Сообщений: 8
Восклицание Спасиб........

спасиб!!! =) А есть людя которые реально на SQL шарят??? или есть готовые БДышки которые не жалко дать бедному очень бедному студенту........ =)
zinnyrik вне форума Ответить с цитированием
Старый 15.05.2007, 13:49   #4
Shuraken
Форумчанин
 
Аватар для Shuraken
 
Регистрация: 16.04.2007
Сообщений: 298
По умолчанию

Ну подставляй карман. БД на 300 таблиц, порядка 2000 хранимых процедур, функций, триггеров. Сумеешь разобраться?
Что непонятно, спрашивай, смогу - отвечу.
Не надо ничего усложнять. Все достаточно тривиально.
Shuraken вне форума Ответить с цитированием
Старый 15.05.2007, 14:47   #5
zinnyrik
 
Регистрация: 14.05.2007
Сообщений: 8
Лампочка а какой она мне....

я ж не админ БД мне курсовик надо писать где будет в приложении "моя" база........и я хочу чтоб вы помогли мне с этой проблемкой...хоть и не простой......для меня......
zinnyrik вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
РАЗДАЧА: антиотладка/недокументированные всякие штуки и разный глючный код :) JTG Безопасность, Шифрование 0 14.07.2008 16:15
тригеры sergei64_89 SQL, базы данных 1 06.05.2008 13:14
Курсоры Rusl92 Общие вопросы Delphi 1 14.04.2008 10:12
курсоры Лубышев Помощь студентам 4 22.01.2008 18:36
Иконы и курсоры 4e_ Общие вопросы Delphi 1 19.05.2007 14:04