|
Программирование >> Разработка пользовательского интерфейса
OLE придет нечто более совершенное, но главное, что это не будет шагом назад. OLE Automation - способ управлять и считывать информацию об объектах внешнего по отношению к вашему приложения. Впрочем, разговор об этом чуть ниже. Следующий способ имеет меньше ограничений. Мы говорим об ODBC (Open Database Connectivity), что можно перевести как Открытый Доступ к Базам Данных. Конечно, ваше приложение должно поддерживать эту технологию. Установив связь с исходной базой данных, далее вы используете набор SQL pass-through функций для выборки, обработки и модификации исходных данных. Наборы этих функций для разных продуктов неодинаковы, но в целом можно говорить о наборе различных реализаций SQL pass-through функций. Изучив их реализацию в одном языке, вы легко можете воспользоваться аналогичной в другом. Теперь вы очень близки к тому, что во внешней базе данных будут отражаться любые изменения, сделанные в таблицах при редактировании данных. Во всяком случае, необходимый инструмент у вас есть. Настоятельно рекомендуем попробовать. Далее мы обязательно обсудим эту технологию более подробно. Скажем прямо, она-то и является краеугольным камнем всей этой книги. В противном случае это была бы уже совсем другая книга. Теперь поговорим о реализации SQL языка в каждом приложении. Для общения с данными внешнего формата на его родном языке была изобретена технология ODBC. Впрочем, то же самое мы можем сказать и об OLE 2.0. Запутанно? Осталось только набраться терпения. А дальше мы будем говорить о SQL языке. В наше время только ленивый не пытается программировать. Тем более, что основные операторы любого из языков достаточно просты, что вполне логично. Быстренько набросали схему данных, загнали все в простую плоскую таблицу, запустили Мастер и пошли искать заказчиков. Дальше может быть хуже, а может быть лучше. Поток информации разрастается, одной таблицы мало (при этом кто-то должен подсказать, что данные из разных таблиц можно связывать), и, когда звучит простой вопрос вашего начальника А сколько африканского кофе мы продали в Тьмутараканскую область по цене между 6000 и 7000 рублей? , - вы берете листок бумаги, счеты (как наиболее надежное средство учета) и ручку. Правильно ли это? Каждая точка зрения имеет право на существование. В том числе и вашего начальника - в вас начинают сомневаться. Но не пугайтесь, у вас в руках наша книга. Почти 90% дела вы сделали, осталось только проявить чуточку усердия и терпеливо дочитать до конца. Вспомним, что, несмотря на наличие стандарта SQL, существуют различные реализации или диалекты этого языка, которые являются либо вспомогательными инструментами, либо основой различных систем управления базами данных. Есть и более сложные варианты, когда некоторые СУБД имеют специальные библиотеки для доступа к своим данным для таких языков, как C или Visual Basic с помощью SQL команд приложения. В большинстве случаев к данным любого приложения надо обращаться на его родном SQL диалекте. То есть, находясь в среде FoxPro, вам будет сложно сделать запрос SQL к таблице формата Paradox, не используя ODBC и SQL pass-through. Хотя есть приятные исключения, то есть приложения, которые незаметно для вас проводят всю тяжелую работу по представлению чужих данных в нужном для запроса формате. В самом простом варианте команда, которая выбирает все записи из одной таблицы, выглядит так: SELECT mytable.* FROM mytable Впрочем, можно еще короче: SELECT * FROM mytable Таким образом, выбраны все записи из таблицы Mytable. В зависимости от того, какое приложение вы выбрали для изучения SQL, вас ожидают совершенно разные пути ввода данной команды в память вашего компьютера. Рассмотрим более сложные варианты выбора нужных данных. Запросы выборки Начнем с Visual FoxPro. Здесь у нас есть целых три варианта выполнения команд SQL: 1. Набрать команду в окне Command. 2. Создать программу, в которую включить нужную команду. Этот способ более эффективен, так как у вас есть возможность сохранить возможно высшей степени изощренную команду для дальнейшего использования. 3. Способ, наиболее привлекательный для начинающих программистов, - использовать Relation Query By Example (RQBE) - Реляционный запрос по образцу. Для того чтобы использовать RQBE, вам достаточно выполнить команду New из меню File, а затем выбрать тип создаваемого файла - Query. RQBE - это интерактивная среда, в которой вы формируете запрос в основном с помощью мыши, перетаскивая нужные вам поля в определенные области диалогового окна. Результатом будет запрос, оформленный в виде файла с расширением QPR. При этом выполнить запрос вы сможете с помощью команды DO. Если вы изучаете SQL для использования в FoxPro, то пользуйтесь любым из вышеизложенных способов, но если вам нравится RQBE, то все равно заглядывайте в полученный код, потому что это поможет вам лучше понять язык. Разбирайте каждое слово в полученной команде, и успех в недалеком будущем вас будет ожидать всенепременно. В среде СУБД Microsoft Access нет командной строки в том понятии, в котором она существует в Visual FoxPro. Для того чтобы создать запрос, в контейнере БД выберите страницу Запросы, нажмите на кнопку Создать. На экране появится Конструктор запросов. При этом вы легко будете переходить из Конструктора запросов в окно редактирования SQL или к результатам выполнения запроса. Среди рассматриваемых средств разработки СУБД Microsoft Access имеет наиболее мощные средства визуального конструирования запросов. Здесь вы можете создать не только запрос на выборку, но и запросы обновления, удаления, создания таблиц, добавления. Об этих запросах мы поговорим ниже. Visual Basic использует для работы с данными процессор баз данных Microsoft Jet, такой же, как и Access. Но в связи с тем, что Visual Basic является универсальным средством разработки, здесь не присутствуют такие развитые средства визуального проектирования, как в Microsoft Access. В то же время, так как все объекты DAO - объекты по доступу к данных - доступны и из Visual Basic, то мы вполне можем добиться функциональности, которой добиваемся в Access. Другое дело, какой ценой мы этого достигнем. Напомним, что в Microsoft SQL Server для того, чтобы выполнить команду SQL, необходимо запустить приложение iSQLW. Вы можете набрать требуемую команду и запустить ее на выполнение. При этом на вкладке Query Results вы увидите полученный результат. Зная SQL, вы можете значительно увеличить ваши возможности при работе с электронными таблицами Microsoft Excel. Несмотря на то, что вы можете непосредственно читать некоторые форматы данных, иногда полезно немного сократить в объеме количество записей перед обработкой в Excel. В этом вам может помочь приложение Microsoft Query, которое можно использовать для построения запросов к данным внешнего и внутреннего формата Excel с целью уменьшения объема данных, необходимых для текущего сеанса работы. Итак, везде присутствует SQL. Где-то как основное средство работы, где-то как вспомогательное. Мы думаем, что теперь вы вполне готовы к разговору о более сложных запросах. Посмотрим еще раз на команду SQL, о которой мы уже говорили: SELECT * FROM mytable Заменим абстрактную таблицу Mytable таблицей из примера к этой книге. Одна из таблиц называется Model, в ней хранятся данные о всех моделях автомобилей, которые задействованы в реселлерской деятельности компании. К примеру, нам не нужны для дальнейшей обработки все поля из этой таблицы. Чтобы выбрать нужные, мы должны их просто перечислить: SELECT name model, swept volume, quantity drum FROM model Может случиться, что вам захочется иметь более наглядные заголовки вместо часто абстрактных наименований английскими буквами или даже на английском языке. Тогда мы используем ключевое слово AS после названия колонки. Перепишем наш запрос в другом виде: SELECT name model AS наименование, ; swept volume AS рабочий объем, ; quantity drum AS кол цилиндров ; FROM model Этот синтаксис верен для Visual FoxPro и Microsoft Access. При работе с Microsoft SQL Server подобная задача выполняется немного по-другому: SELECT наименование= name model, : рабочий объем= swept volume,; кол цилиндров= quantity drum ; FROM model Итоговый запрос может содержать дублирующие друг друга по всем полям записи. Если вам не нужна избыточная информация, то введите после SELECT ключевое слово DISTINCT: SELECT DISTINCT наименование= name model, : рабочий объем= swept volume,; кол цилиндров= quantity drum ; FROM model Противоположным по смыслу DISTINCT ключевым словом является ALL, как правило, оно является значением по умолчанию и его можно не приводить. Но это уже зависит от вашего стиля программирования. Иногда считается правильным указывать все значения и ключевые слова для лучшей читабельности кода. Порядок, в котором поля выводятся в итоге, зависит только от того, в какой последовательности вы перечислите их в своем запросе. Если необходимо во второй колонке вывести количество цилиндров, то следует изменить порядок указания полей в списке выводимых результатов: SELECT name model, quantity drum ,swept volume FROM model Теперь количество цилиндров будет указываться сразу после наименования модели автомобиля. Помимо полей из таблиц, в список выводимых колонок можно включать функции, переменные, константы и выражения. Например, если вы хотите особо отметить каждую третью запись, вы можете выполнить следующий запрос: SELECT IIF(MOD(RECNO(),3) = 0, Y , N ),RECNO(),cost; FROM automobile passenger car При этом в каждой третьей записи в результирующем курсоре в первой колонке появится буква Y . В запросе можно использовать пользовательскую функцию и выводить ее результаты в курсор. Правда, здесь накладывается некоторое ограничение: желательно, чтобы функция не перемещала указатель записи в таблице, из которой выбираются данные. До сих пор мы рассматривали организацию запросов к одной таблице. В реальной жизни это довольно редкий случай. Как правило, информацию нужно получать их двух и более таблиц. При этом нужно учитывать факт, что таблицы должны быть связаны между собой, при этом необязательно каждая с каждой, можно связать две таблицы через одного или нескольких посредников. Если вы хотите узнать, в какой стране находится штаб-квартира фирмы, автомобиль которой приобрел каждый покупатель, то нужно создать вот такой запрос: SELECT Customer.name customer, Country.country name, ; Model.name model,; Firm.name firm; FROM auto store!customer , auto store!account ,; auto store!automobile passenger car Automobile passenger car,; auto store!model , auto store!firm ,; auto store!country ; WHERE Customer.key customer = Account.key customer; AND Automobile passenger car.key auto = Account.key auto; AND Model.key model = ; Automobile passenger car.key model; AND Firm.key firm = Model.key firm; AND Country.key country = Firm.key country В итоге получится следующая выборка: NAME COUNTRY NAME NAME CUSTOMER MODEL FIRM Безумные медведи Италия 145 1.4 Alfa Romeo Общество нац. героев Италия 145 1.4 Alfa Romeo Пронырливые волки Италия 146 1.9 Alfa Romeo Угрюмые слоны Германия M3 3.0 BMW
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |