КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Передача параметров через TDataSourceВ предыдущем Уроке Вы видели способ создания отношения однин-ко-многим между двумя таблицами. Теперь речь пойдет о выполнении того же самого действия с использованием объекта TQuery. Этот способ более гибок в том отношении, что он не требует индексации по полям связи. Объект TQuery имеет свойство DataSource, которое может использоваться для того, чтобы создать связь с другим DataSet. Не имеет значения, является ли другой DataSet объектом TTable, TQuery, или некоторый другим потомком TDataSet. Все что нужно для установления соединения - это удостовериться, что у того DataSet есть связанный с ним DataSource. Предположим, что Вы хотите создать связь между таблицами ORDERS и CUSTOMERS так, что каждый раз, когда Вы просматриваете конкретную запись о заказчике, будут видны только заказы, связанные с ним. Рассмотрите следующий параметризованный запрос: select * from Orders where CustNo =:CustNo В этом запросе:CustNo - связывающая переменная, которой должно быть присвоено значение из некоторого источника. Delphi позволяет использовать поле TQuery.DataSource чтобы указать другой DataSet, который предоставит эту информацию автоматически. Другими словами, вместо того, чтобы использовать свойство Params и “вручную” присваивать значения переменной, эти значения переменной могут быть просто взяты автоматически из другой таблицы. Кроме того, Delphi всегда сначала пытается выполнить параметризованный запрос используя свойство DataSource, и только потом (если не было найдено какое-то значение параметра) будет пытаться получить значение переменной из свойства Params. При получении данных из DataSource считается, что после двоеточия стоит имя поля из DataSource. При изменении текущей записи в главном DataSet запрос будет автоматически пересчитываться. Давайте переделаем пример из прошлого урока (LINKTBL - связывание двух таблиц). Создайте новый проект, положите на форму один набор TTable, TDataSource и TDBGrid. Привяжите его к таблице CUSTOMER. Положите на форму второй набор - TQuery, TDataSource и TDBGrid и свяжите объекты между собой. (см рис.4). В свойстве SQL наберите текст запроса: select * from Orders where CustNo =:CustNo В свойстве DatabaseName для Query1 укажите DBDEMOS. В свойстве DataSource для Query1 укажите DataSource1. Поставьте Active = True и запустите программу. Рис.4: Программа LINKQRY - связанные курсоры с помощью SQL Выполнение соединения нескольких таблиц. Вы видели что таблицы CUSTOMERS и ORDERS связаны в отношении один-ко-многим, основанному на поле CustNo. Таблицы ORDERS и ITEMS также связаны отношении один-ко-многим, только через поле OrderNo. Более конкретно, каждый заказ который существует в таблице ORDERS будет иметь несколько записей в таблице ITEMS, связанных с этим заказом. Записи из таблицы ITEMS определяют тип и количество изделий, связанных с этим заказом. Пример. Некто Иванов Ф.П. 1 мая 1995г. заказал следующее: 1. Гайка 4х-угольная - 50 штук 2. Вентиль - 1 штука 3. А некто Сидорчук Ю.Г. 8 декабря 1994г. заказал: 4. М/схема КР580 ИК80 - 10 штук 5. Транзистор КТ315 - 15 штук 6. Моток провода - 1 штука В ситуации подобной этой, иногда проще всего "соединить" данные из таблиц ORDERS и ITEMS так, чтобы результирующий DataSet содержал информацию из обеих таблиц: Иванов Ф.П. 1 мая 1995г Гайка 4х-угольная 50 штук Иванов Ф.П. 1 мая 1995г Вентиль 1 штука Сидорчук Ю.Г. 8 декабря 1994г М/схема КР580 ИК80 10 штук Сидорчук Ю.Г. 8 декабря 1994г Транзистор КТ315 15 штук Сидорчук Ю.Г. 8 декабря 1994г Моток провода 1 штука Слияние этих двух таблиц называется "соединение" и это одно из фундаментальных действий, которые Вы можете выполнить на наборе двух или больше таблиц. Взяв таблицы ORDERS и ITEMS из подкаталога DEMOSDATA, их можно соединить их таким путем, что поля CustNo, OrderNo и SaleDate из таблицы ORDERS будут “слиты” с полями PartNo и Qty из таблицы ITEMS и сформируют новый DataSet, содержащий все пять полей. Grid содержащий результирующий DataSet показан на рис.5 Имеется существенное различие между связанными курсорами и соединенными таблицами. Однако они имеют две общие черты: · И те, и другие используют две или более таблиц · Каждый таблица связана с другой по одному или более одинаковых полей. Соединение таблиц ORDERS и ITEMS может быть выполнено единственным SQL запросом, который выглядит так: Рис.5: Соединение таблиц ORDERS и ITEMS может быть сделано так, что формируется новый DataSet содержащий поля из каждой таблицы. select O.CustNo, O.OrderNo, O.SaleDate, I.PartNo, I.Qty from Orders O, Items I where O.OrderNo = I.OrderNo Этот запрос состоит из четырех различных частей:
Дата добавления: 2014-01-14; Просмотров: 291; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |