Теория и практика построения баз данных (1088289), страница 128
Текст из файла (страница 128)
Эта версия Оепега(ТаЫе обрабатывает базу данных Жг!ечч В!с(яе для 5О) Яегчег, Имена суррогатных ключей в ЯЯ) Зегчег представлены в виде Агс!а110, а не АВТ15Т10. Поскольку сравнения строк в ч!ВБсг1рг чувствительны к регистру букв, нам нужно убедиться, что переменная чагКеуйаве содержит имя суррогатного ключа в требуемом формате. Пользователь мог ввести АЙТ15Т, аг(1ай Аг(!а( или, скажем, ай11эТ, поэтому мы не можем просто присоединить буквы 10 к введенному имсни таблицы.
Три оператора, начннаюшиеся с чагКеуйавеЕ1гас, используют функции ОСаае и ЕСаае для придания правильного формата значению чагКеуйаве. Оставшаяся часть этой страницы имеет тот же вид, что и на странице Сл1огпег. аар, показанной в листинге 15.2. Снова обратите внимание, что в переменную чагКеуйаве будет записано имя суррогатного ключа Аг(!аб10, значения которого мы не хотим выводить. Пример 4 — обновление таблицы Во всех трех предыдущих примерах рассматривается чтение данных. Следующий пример демонстрирует обновление данных в таблице средствами А1)О путем вставки новой строки. На рис.
15,12, а показана форма, в которую вводится имя и национальность художника. Эта страница аналогична Ч(е»чй!ОйеТаЫеюаар, только в ней имеется два поля ввода вместо одного. Когда пользователь нажимает кнопку 5аче йе»ч Аг(111 (Зарегистрировать нового художника), запись о художнике добавляется в базу данных, и если результат является успешным, выводится страница, представленная на рис.
15.12, 6, Ссылка 5ее Че»ч Е(эб (Просмотр обновленного списка) вызывает страницу Аг()з(.аар, которая выводит содержимое таблицы АМТ15Т с новой строкой, как показано на рис. 15.13. Примеры использования АОО 593 Рио. 5.13. Вид таблицы АЯТГВТ ГОИМ МЕТНОО-"роз!" АСТ!ОИ-"АООАгс Ь.А5Р- лродолх<ониеФ 592 Глава 15. ООВС, ОЕЕ ОВ, АОО и АЯР б Рис.
15.12. Добавление данных в таблицу АИТ18Т: в — форма для ввода данных; б — страница сообщения об успешной вставке Тексты соответствующих АЯР-страниц приведены в листингах 15.5 и 15.6. Первая страница представляет собой форму для ввода данных с двумя полями, в одно из которых вводится имя художника (поле Иап1е), а в другое — его национальность (поле ИаВоп). Когда пользователь нажимает кнопку 5цЬщ!Ь (Подтвердить), эти данные посылаются обратно ПЯ, которая, в свою очередь, передает их вместе со страницей АбдАг(!1(.азр А5Р-обработчику. Листинг 15.5.
Вставка данных с помощью МешЯ/11щ.азр <НТМЕ> <НЕАО> <МЕТА НТТР-ЕОО1Ч-"Соптепе-Туре" СОИТЕИТе "Ьех(/ЬТв1;сйагзее~<1пбона-1252"> <Т!ТСЕ>Иев АИТ15Т Ептгу Гога</Т!ТЕЕ> </НЕАО> <ВОВУ> <Р 5ТВОИВ ГОНТ со)о =р р)е Тасе="" в! е=5>АпЬзр;КпЬзр; Иен Агт1зт Оаеа Гога</ГОИ1></5ТИОИБ> <Р></Р> <Р>$позр;</Р> ГОНТ тсу)е-"ВАСКВИООИО-СОСОИ. 1)ТТГГТГ" ГОНТ со)о =Гогез1дгееп Тасе="" 11у1е="ВАСКБИООИО-СОСОИ: (/ГТГТГГ>Аг11зс Иаве:</ГОИТ>ЕпЬзр:Апозр:$пЬзр;5позр:АпЬзр.
<!ИРОТ !с=бек! 1 паве=иаае 11у1е="НЕ!СНТ 22рх; И1ОТН: 164рх"></ГОНТ></Р> <Р><ГОИТ со!ог=гогезтдгееп Гасе="" 51у1е="ВАСКОИООИО-СОСОК: ФТГТТГТ ">Иа11опа111у Гптазр, Ъпоар: КпЬзр: КпЬзр, ВпЬзр; КпЬзр; Впозр, !ИРОТ 1с-Ьех(2 паве=Мат!оп агу)е=-НЕ1ВНТ: 22рх; и!ОТН: 15/рх- /ГОНТ /Р 594 Глава 15.
ОВВС, ОСЕ РВ, АОО и АВР Примеры использования АОО 595 Листинг 1 В.В (продолжение) Р Впь р;./Р <Р><ГОНТ зту1е "ВАСКВВООИО-СОСОй; ()ТГ(ТГГ'> <1ИРОТ зб=звЬвз11 паве=звЬи(С1 Суре звбвзС ча1ве="5аче Иен Агетз(">аноар;Йпбзр:Впозр; <1ИРОТ зб=гезеС1 паве=гевет) туре-гезеС ча1ве="йезет уа1вез"></ГОИТ>«/Р> </ГОВМ> </ВООУ> </НТМ!> Листинг 16.6. Вставка данных с помощью Аббдгйьч,аэр <НТМС> <НЕАО> МЕТЯ НТТР-ЕОО)Ч=-Соптепт-туре" СОИТЕИТ--Сехе/Птв);сбагзеб=итпбоив-1252" <Т1ТСЕ>Ябб АВТ15Т Ехая)р1е</Т1ТСЕ> </НЕАО> <ВООК> <!--()1пс1вбе ч1гтва1="Ч1еий160еЕхавр1е/абочбз.тпс"--> <$ О!в оЬОСопп.
оЬбйесогб5ет. оЬОГ1е16 01в чагнвя)Со)з. чаг1, чаг5о! 5ет оЬОСопп = 5егчег,СгеатеОЬбесС ("АОООВ.саппесС(оп") оЬОСопп.орел Гузеийзбде55", "за" ' открнваеи как пользователь за оЬОСопп,1зо)а11опСече1 = абХастйеабСоия1ССеб ' избегаем «грязного» чтения чаг5О1 = "5ЕСЕСТ * РВОМ (Яйт15Т]" 5еь оЬбйесагб5ет - 5егчег.СгеаьеОЬ)есь ("ЯОООВ.йесогбзеь" ) ' В спедующек операторе обратите внинание на использование типов курсора и бпокировок оЬ)йесогб5еС.Орел чаг5о1. оЬОСопп, аббрепОупав1с, абСосХОртти1зьзс оЬбйесогб5еС,АббИеи оЬЗйесагб5еС ("Агт(зтйаязе") - йеавезС.Гоги ("Иаве") аЬ)йесогб5ет ("Иа(топа11ту") = йее(везС.Гогяз ("Иат(оп") обзйесогб5ее.Орбате Оп Еггог йезвязе Мехе чагЕггогСовпь - аЬЗСопп.Еггогз.СоопС 1Т чагЕггогСовпе > О ТПеп Гог чаг1 = О Со чагЕггогСовпе — 1 йевропзе.Иг1Се "<Вй><1>" $ оЬ)Сопп.Еггогз (чаг1).0езсг1рт(оп В "</!><Вй>" Иехт Епб 1Г оЬбйесогб5еС.С1оз оЬОСопп,С1озе йезропзе.Иг1те "<Вй>0аеа Паз Ьееп аббеб.
Тпапк уов!<Вй>" йевропзе. Иг)Се "<А НВЕГ="$ """" $"агь1з( -азр" $ """"В ">5ее Иеи Стет</А>" х> «Вй><ВВ> </ВООУ> </НТМС> Страница А66Агс(зе.авр (показана в листинге 15.6) создает объекты Соппесбоп и йесогбзе(. При этом не делается попыток сохранить указатели на эти объекты в сеансовых переменных.
(Предполагается, что за один сеанс будет добавлен только один художник, поэтому сохранение не потребуется.) Если указатели все-таки нужно сохранить, это можно сделать по аналогии с предыдущими примерами. Основная отличительная особенность данной страницы заключается в следующих операторах: оЬЗйесогб5ет. Аббйеи оозйесогб5ет("Иаве")=йеаиезС.Гопв("Иаязе") обзйесагб5еС("Иаетопа11ту")=йецвезС.Гог)я("Иаь1оп") обзйесогб5еС.Врбате Первый оператор создает новую строку в объекте оЬ) йесог65еб Затеы в нее записываются значения полей Маше и Иае(опайу, считанные из формы. Обратите внимание, что имена столбцов не обязаны совпадать с именалти полей формы.
Здесь второй столбец называется Иае(опайу, а значение поля формы — Иаеоп. Вызов функции оЬ)йесог65ес.Орбасе производит обновление базы данных. Обратите внимание на код обработки ошибок, который выводит сообщения об ошибках с помотцью оператора йевропве ))/пее (этот метод принадлежит встроенному АЗР-объекту йезропзе). Завершается страница двумя вызовами этого же метода, первый из которых отправляет пользователю подтверждающее сообщение, а второй создает ссылку на страницу Агс(зцавр, перейдя по которой, пользователь может увидеть таблицу с новыми данными. Пример 5 — вызов хранимой процедуры Мы создали две версии хранимой процедуры Святоше( 1пзепз одну для Огас!е, другую для 5Д(.
Зегчет (в главах 12 и 13 соответственно). В обоих случаях хранимая процедура принимает в качестве параметров имя нового клиента, код региона, местный номер телефона и национальность художников, рабатами которых интересуется данный клиент. Процедура создает новую запись в таблице С05ТОМЕй и добавляет соответствующие строки в таблицу пересечений.
Чтобы вызвать хранимую процедуру из А5Р-страницы, мы создадим тче!» форму (рис. 15.16), в которую будут вводиться данные клиента. Когда пользователь нажмет кнопку Абб Сввсошег (Добавить клиента), будет вызвана АЗР-страница, которая, в свою очередь, вызовет хранимую процедуру, передав ей данные из формы. Чтобы пользователь мог убедиться, что данные были добавлены корректно, АЗР-страница затем запросит представление, соединяющее имена клиентов с именами и национальностями художников. Результат представлен на рис. 15.15. Примеры использования АОО 597 596 Глава 15.
ООВС, ОСЕ ОВ, АОО и АВР Рис. 15.14. Форма для ввода данных о хпиенте Рис. 15.16. Вид соединения таблиц СПЗТОМЕЯ и АЯТ1ВТ В листинге 15.7 показан код формы для ввода данных. Полям ввода даны имена 1ех11-Тех!4. Когда пользователь нажимает кнопку Абб Сиаьогпег, данные из формы передаются указанной в операторе ЕОйМ МЕТНОО АВР-странице Сиатогпег1пзегтОгас!е (листинг 15.8). Листинг 15.7.
Вызов хранимой процедуры с помощью НеттСив1оптегОгас!е,азр <НТМС> <НЕАО> сМЕТА НТТР-Е001Ч "СоптепС-Туре" СОМТЕМТ-"техт/Ьтв1 ;соагзет м)пбонз- 1252"> <Т!ТЕЕ>Таь)е Отзр1ау Рога</Т1ТЕЕ> </НЕАО> <ВООЧ> <РООМ МЕТНОО-"Роет" АСТ!ОИ="Сиатовег1пзегтОгас1е.А5Р"> <Р><51хОМО><ЕОНТ со1ог=ригр1е Тасе="" з1ге-5>бпьар;бпьзр: Ч1ен й1бде Оа11егу</ЕОМТ></5ТРОМО> <Р>бпазр, бзпьзр; бпьзр,<зтгопд <Топь со1ог="ригр1е" Гасе в~ ее="5"> Мен Сизтовег Рогат</Топс /асгогд><Р /опт зту1е-"ЬасКдгоипб-со1ог: //ТХТТТЕ" со1ог="Тогеасдгееп" Тасе>бпьар.
Кпьар; бпьзр; Мане: бпозр; бобер: .//опт .РОЮТ асу)е="ВАСКОЕООМО-СОСОРс //ТТТТТТ">Епьар, бпьар: бпьар; бпьар; бпьзр, бпьзр, бпьар; бпьзр, бпьар; бльзр; бпьзр: бпьз р; бпьзр; бпьзр: бпьзр; бпьар; бпьзр: бпьар; бпьар; бпьар: бпьзр: апЬ р: бпазр; </ЕОМТ><1МРОТ 1бесехт! паае=техт1></Р> <Р>$пьзр;<Топь зту1е="Ьасхдгоипб-со1ог //1ттТТГ' со1ог="/огезтдгееп" Тасе>бпьар; бпьзр; бпьар;Агеасобе<топт зту1е="ЬасКдгоипб-со1ог: //ТТТТТ/-..бпЬ р; бпЬзр; бпозр ,</Топт бпЬар; бпоар; бпозр; апЬар: апЬ р; бпозр; бпьзр ,$пбзр; бпьар; бпьзр: бпьар; бпьзр; ьпьар: бпьзр; бпьзр: бпьзр: бпьзр: <//опт><1МРОТ 1б=сехг2 паве=тех12 атее="б" /Р> <Р><ТопС асу1е="Ьасхдгаипб-со1ог //ТТТТТТ" со1ог-"Тогеатдгееп" Тасе>бпьар: бпьзр; бпбзр.
Рлопе: бпьар; бпьар, бпьзр; аноар; бпьар, бпьзр: бпьзр; бпЬар: бпьзр; бпьзр: Впьзр: бпазр;бпьар; бпьар; бпьар: бпьар: бпьар: бпьар. 5пьзр: бпьар: бпьзр; бпьзр; бпьзр; бпьар; бобер;бпьзр; <//опт><!МРОТ тб-ТехЬЗ паве=тех13 зтге-"20">ьпьар; бпЬзр, ьпьар; бпьзр; $пьар; бпьар; апозр бпьзр; </Р> <Р>бпьзр: бпьзр; бпьар; <Топь зсу1е="ЬасКдгоипб-со)ог: //Т!ТТТГ' са1аг="!огез1дгееп" Тасе>иа1топа111у оТ Агт зтз: бпЬар; бпЬзр: </Топс бобер; апЬар; .!МРОТ тбееехьа ентехта зтге="1/"></р> продолжевяеФ 598 Глава 15.