nsutextbook (1037554), страница 17

Файл №1037554 nsutextbook (Методические указания по выполнению лабораторной работы №1) 17 страницаnsutextbook (1037554) страница 172017-12-25СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 17)

Этот метод удаляет все экземпляры определенного класса,так же как и все экземпляры его подклассов.Например, для удаления всех объектов Person, включая подклассы используется следующий синтаксис:Do ##class(Person).%DeleteExtent()Метод %DeleteExtent будет выполнять любые методы %OnDelete, если они присутствуют для каждого удаляемого объекта.Можно также удалить все экземпляры класса и его подклассов, используя более быстрый, но более опасный метод %KillExtent:Do ##class(Classname).%KillExtent()Метод %KillExtent немедленно удаляет все данные, ассоциированные с экстентомкласса, никакой откат не выполняется, и никакие ссылки не проверяются. Его следует использовать при разработке систем, не содержащих реальных данных.6.13. Выполнение запросовCaché обеспечивает объекты класса %ResultSet для выполнения запросов и получения результатов.

Этот процесс состоит из следующих шагов:1. Подготовка запроса2. Выполнение запроса3. Получение результатов запроса4. Закрытие запроса6.13.1. Методы запросаДля использования запроса свяжите его с объектом класса %ResultSet. Методы объекта класса %ResultSet:• GetParamCount() – возвращает число аргументов запроса• GetParamName(n) – возвращает строку, имя n-ного аргумента запроса• GetColumnCount() – возвращает целое, число столбцов в запросе• GetColumnName(n) – возвращает строку, имя n-ного поля запроса• GetColumnHeading(n) – возвращает строку, имя n-поля запроса.73•••••••Prepare() – подготовить динамический запрос для выполнения, в качестве параметра методу передается строка, содержащая текст запроса.QueryIsValid() - проверяет допустим ли запрос, 1(true) – да, 0(false) – нет.Execute() – выполнить запрос, в качестве аргументов методу передаются значения параметров.Next() – переход к следующей строке запроса.Data(<имя поля>) – доступ к полям запроса по имениGetData(n) – доступ к полю запроса по номеру.Close() – закрыть запрос.6.13.2.

Подготовка запроса для выполненияДля подготовки запроса, начнем с создания экземпляра объекта класса %ResultSet спомощью метода класса %New():Set rset = ##class(%ResultSet).%New()Созданный объект класса %ResultSet свяжем с запросом в классе:Set rset.ClassName = classSet rset.QueryName = queryгде rset – ссылка OREF на объект типа %ResultSet, class это имя класса, содержащего запрос, и query – имя запроса для выполнения. Например:Set rset = ##class(%ResultSet).%New(”%DynamicQuery:SQL”)Set rset.ClassName = "Sample.Person"Set rset.QueryName = "ByName"Do rset.Execute()While (rset.Next()) {Write rset.Data("Name"),!}Можно также использовать объект класса %ResultSet для подготовки динамическогоSQL-запроса, используя метод Prepare:Set rset = ##class(%ResultSet).%New("%DynamicQuery:SQL")Do rset.Prepare("SELECT Name FROM Sample.Person WHERE Name%STARTSWITH 'A'")Do rset.Execute()While (rset.Next()) {Write rset.Data("Name"),!}6.13.3.

Выполнение запросовДля выполнения запроса используется следующий синтаксис:Do rset.Execute(arglist)где rset это ссылка OREF на объект класса %ResultSet, arglist это разделенный запятыми список параметров, передаваемых запросу.6.13.4. Получение результатов запросаДля навигации по результирующему набору данных можно использовать следующийсинтаксис:Do rset.Next()где rset – ссылка OREF на объект класса%ResultSet.Метод Next перемещает курсор на следующую строку данных запроса. Он возвращает 0, когда курсор достигает конца набора. Следующий код проверяет, имеет ли наборданные:If ('rset.Next()) {Quit74}Можно извлечь значение столбца текущей строки, используя свойство Data объекта%ResultSet.

Data это многомерное свойство. Доступ к значению столбца можно получитьпо его имени. Запрос не должен иметь двух столбцов с одинаковыми именами.Set code = rset.Data("Code")Доступ также можно получить по номеру столбца:Set data = rset.GetData(n)где data – содержит данные, сохраненные в поле запроса с номером n.Также можно читать данные определенного столбца по имени, используя методGetDataByName:Set data = rset.GetDataByName(fieldname)где data содержит данные столбца с именем fieldname. Это менее эффективно, чемиспользовать свойство Data.Когда все нужные данные будут извлечены из строки запроса, выполнение методаNext переводит указатель на следующую строку запроса.6.13.5. Закрытие запросаПосле извлечения нужных данных, закройте запрос:Do rset.Close()Set sc = rset.Close()sc это локальная переменная, в которой метод возвращает код выполнения.

МетодClose освобождает ресурсы, занятые объектом класса %ResultSet. Как только результатпредыдущего запроса закрыт, можно использовать объект класса %ResultSet для выполнения другого запроса, изменяя только значение свойств ClassName и QueryNameВызов метода Close не является обязательным. Когда объект класса %ResultSet выходит из поля видимости, в этом случае он автоматически закрывается.Пример использования запросаСледующий код демонстрирует использование объекта класса %ResultSet для выполнения запроса и получения результатов:// создать объект Result для запроса Sample.Person:ByNameSet rset =##class(%ResultSet).%New("Sample.Person:ByName")Set columns = rset.GetColumnCount()// Выполнить запросSet sc = rset.Execute("A")// Извлечение результатовWhile (rset.Next()) {Write "------------------------",!// цикл по столбцамFor col = 1:1:columns {Write rset.GetColumnName(col),": "Write rset.GetData(col),!}}Do rset.Close()Можно также использовать ActiveX и Java версии объекта класса %ResultSet для выполнения этих же операций из компонент ActiveX или Java-приложений.6.14.

Примеры работы с объектамиПример 1. Работа с хранимыми классамиСоздать два хранимых класса:1. Класс «Категории» (Category), содержит информацию о категориях, к которым могут относиться конкретные книги. Единственное свойство класса: CategoryName –название категории.752. Класс «Книги» (Books) – содержит информацию о книгах. Где Title – названиекниги, Authors – список авторов, CountPage – количество страниц, Category – категория, ссылка на хранимый класс «Категории», Decsription – описание книги.Задание: написать COS-программу, позволяющую в цикле вводить объекты классаCategory и для каждого объекта Category вводить несколько объектов класса Books.

Обеспечить выход из цикла.Решение:Определения классов:Class User.Category Extends %Persistent [ ClassType = persistent, ProcedureBlock]{Property CategoryName As %String;}Class User.Books Extends %Persistent [ ClassType = persistent, ProcedureBlock ]{Property Authors As %String [ Collection = list ];Property Title As %String;Property Category As User.Category;Property Cena As %Numeric;Property CountPage As %Integer;Property Decsription As %String(MAXLEN = 100);}Программа:for {read !, "Введите название категории:", catQuit:cat=""set ct=##class(User.Category).%New()set ct.CategoryName =catset xx=ct.%Save()for {read !, "Введите название книги ", titleQuit:title=""set bk=##class(User.Books).%New()set bk.Title = titleread !, "Введите автора: ",Authordo bk.Authors.Insert(Author)set bk.Category =ctread !, "Введите описание: ",descset bk.Decsription =descread !, "Введите кол-во страниц: ",kolset bk.CountPage =kolread !, "Введите цену: ",priceset bk.Cena =priceset xx=bk.%Save()}}76Пример 2.

Работа со свойствами спискамиДля класса Вооks из предыдущего примера написать COS-программу ввода спискаавторов для объекта с ID=58, учитывая, что свойство Authors – это список типа данных%String.Решение// открытие объекта с ID=58set bk=##class(Books).%OpenId(58)// очистить список авторовdo bk.Authors.Clear()set i=1// ввести список авторов объекта с Id=58for {read !,"Введите автора ",avtQuit:avt=""do bk.Authors.InsertAt(avt,i)set i=i+1}set xx=bk.%Save()// вывести названия книг и списки авторовSet r=##class(%ResultSet).%New(”%DynamicQuery:SQL”)Do r.Prepare("Select ID, Title from Books ")Do r.Execute()While(r.Next()){ write !write ?5,r.Get("ID")," ",r.Get("Title")set id=r.Get("ID")set bk=##class(User.Books).%OpenId(id)set kol=bk.Authors.Count()write !,"kol=",kolfor k=1:1:kol{ write !,?15,bk.Authors.GetAt(k)}}Пример 3.

Работа со встроенными классамиСоздать хранимый класс Person (данные о человеке) со свойствами:Fio – фамилия, имя, отчество человекаAdres – его адрес, это ссылка на встроенный класс AddressDataR – дата рождения.Встроенный класс Address имеет следующие свойства:Ind – индексCity – городStreet – улицаHouse – домFlat – квартира.Задание: написать COS-программу, позволяющую вводить объекты класса Person и объекты встроенного класса Address и выводить результаты на печать.77Решение:Определение класса Person имеет вид:Class User.Person Extends %Persistent [ ClassType = persistent, ProcedureBlock ]{Property Adres As Address;Property DataR As %Date;Property Fio As %String;}Определение класса Address имеет вид:Class User.Address Extends %SerialObject [ ClassType = serial, ProcedureBlock ]{Property Flat As %Integer;Property House As %String(MAXLEN = 5);Property Street As %String;Property City As %String(MAXLEN = 15);Property Ind As %String(MAXLEN = 6);}Программа позволяет создать объект класса Person, заполнить значения его свойств ивывести его на печать.

Обратите внимание: не требуется создание экземпляра встроенногокласса Address. Объекты класса Person хорошо видны в SQL-менеджере.// ввод объекта класса Personfor {read !,"Введите ФИО ",fioQuit:fio=""set pr=##class(Person).%New()// ввод данных Personset pr.Fio=fioread !,"Введите дату рождения ",dataRset pr.DataR=$ZdateH(dataR)write !,"Введите адрес: "read !,"Индекс ",indset pr.Adres.Ind=indread !,"Город ",cityset pr.Adres.City=cityread !,"Улицу ",streetset pr.Adres.Street=streetread !,"Номер дома ",houseset pr.Adres.House=houseread !,"Номер квартиры ",flatset pr.Adres.Flat=flatset yy=pr.%Save()}// распечатать объекты класса PersonPech Set r=##class(%ResultSet).%New(”%DynamicQuery:SQL”)Do r.Prepare("Select ID from Person")Do r.Execute()While(r.Next())78{ write !write ?5,"ID ",r.Get("ID")set id=r.Get("ID")set bk=##class(User.Person).%OpenId(id)write !,"FIO","DataR ","Ind","City","Street ","House ","Flat "write !set k=1write bk.Fioset k=k+10write ?k,$ZDate(bk.DataR)set k=k+10write ?k,bk.Adres.Indset k=k+10write ?k,bk.Adres.Cityset k=k+10write ?k,bk.Adres.Streetset k=k+10write ?k,bk.Adres.Houseset k=k+10write ?k,bk.Adres.Flat}Пример 4.

Характеристики

Тип файла
PDF-файл
Размер
2,42 Mb
Тип материала
Высшее учебное заведение

Список файлов книги

Свежие статьи
Популярно сейчас
Почему делать на заказ в разы дороже, чем купить готовую учебную работу на СтудИзбе? Наши учебные работы продаются каждый год, тогда как большинство заказов выполняются с нуля. Найдите подходящий учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6384
Авторов
на СтудИзбе
308
Средний доход
с одного платного файла
Обучение Подробнее