Sql запросы в delphi


Содержание

Использование языка SQL в Delphi

Представляю краткую справочную информацию по использованию языка SQL в среде программирования Delphi.

Для использования в программе команд языка SQL необходимо поместить на форму объект TQuery. Назовем его MyQuery. А поместив на форму объекты TDBGrid и TDataSource и связав все три объекта между собой, получим возможность видеть в объекте TDBGrid результаты SQL запросов.

Создание таблицы с помощью SQL запроса

Перед выполнением запроса должны быть определены следующие переменные строкового типа:
tbl — файл таблицы, например: ‘c:\programs\delphi\sql\first.dbf’;
fld1, fld2 — название создаваемых полей;
tp1, tp2 — типы создаваемых полей таблицы.
Приведенный ниже запрос создает таблицу состоящую из двух полей указанного типа:

Добавление записи в таблицу

Добавление записи в таблицу посредством SQL запроса выполняется следующим способом:

SQL запрос на выборку

Для выполнения простого SQL запроса на выборку всех записей из указанной таблицы достаточно следующего кода:

Запрос SQL на выборку с условием

Переменная fld содержит название поля таблицы, а переменная val — значение этого поля. Результатом выполнения нижеследующего запроса являются все записи таблицы со значением val в поле fld.

А если воспользоваться приведенным ниже кодом, то в результате получим все строки таблицы, содержимое поля fld которых содержит значение val.

Запрос SQL для нахождения максимума или минимума

Программный код запроса:

Используя команду MyQuery.FieldByName(‘M’).asInteger; можно получить значение максимума целого типа. Для нахождения минимума необходимо в запросе воспользоваться строкой SQL.Add(‘SELECT Min(‘+Fld+’) as M’);

Запрос SQL для удаления записей из таблицы

Для удаления записей из таблицы tbl значения поля fld которых равны val используется следующий код:

Запрос SQL для изменения записей в таблице

Принцип работы запроса аналогичен запросу на удаление, необходимо лишь указать updFld — обновляемое поле и updVal — новое значение для этого поля.

Запросы на выборку из БД в Delphi с использованием компонента ADOQuery

В этой статье рассмотрим задачу выборки записей из БД, применив компонент ADOQuery. Подключение и взаимодействие с базой данных уже рассмотрено в одной из предыдущих статей. Поэтому здесь на этом останавливаться не будем.

Для работы с запросами в Delphi по технологии ADO используется компонент ADOQuery. Что касается подключения компонента, работа с ним подобна работе с ADOTable. Ему так же необходимо указать ADOConnection, подключенный к БД (можно так же настроить свойство подключения к БД ConnectionString). Для отображения на форме данных ему так же нужен компонент DataSource, подключаемый к компонентам отображения и управления данными из закладки палитры Data Controls (DBGrid, DBEdit и другие).

В отличие от ADOTable, запрос не содержит свойств для выбора таблицы, которую он будет отображать. Вместо этого он имеет поле SQL, которое должно содержать текст SQL-запроса к БД для выбора необходимых данных.

Статический запрос

Для получения содержимого таблицы следует указать следующие поля ADOQuery:

Connection – выбрать из списка настроенное подключение к БД.

SQL – ввести текст любого SQL-запроса, например: «SELECT * FROM mytable».

Active – присвоить значение True.

Если при присвоении свойству Active, сведений об ошибках не было выведено, значит все выполнено правильно и далее можно пользоваться ADOQuery, как обычной таблицей для вывода его данных (вывод осуществляется аналогично таблице через компонент DataSourcе, например, в DBGrid).

Плюс запроса в том, что в нем можно сформировать нужную выборку сразу из нескольких таблиц. Здесь можно так же применить сортировку и группировку данных.

Динамическое изменение запроса во время исполнения программы

Если в процессе работы программы, текст SQL-запроса нужно переписывать, как, например, при указании условия выборки, то можно просто программно управлять режимом исполнения запроса и содержимым его поля SQL.

Для этого применяется следующий код:

MyADOQuery.Active := false; // отключаем запрос, если он был включен
MyADOQuery.SQL.Clear; // удаление предыдущего текста запроса

// новый запрос – код подставляется из поля Edit
mySQL := ‘SELECT * FROM myTable WHERE > + myEdit.text;

MyADOQuery.SQL.Add(mySQL); // добавление нового текста запроса
MyADOQuery.Active := True; // включение запроса

Программная работа с результатами запроса

Если результат запроса нужно не просто вывести, а выполнять с ним какую-то работу непосредственно в коде, то обратится к ним через свойство Fields. Например, код:

выведет во всплывающем окне содержимое первого поля текущей записи.

Fields[номер поля] – указывает номер столбца в сформированной запросом таблице. Самое первое будет нулевое.

AsString – указывает, что тип возвращаемого значение будет строковый. Аналогично можно указать AsInteger, чтобы получить числовое значение.

Перемещение по записям выполняется аналогично программному переходу в таблицах:

BestProg

Разработка приложения формирования SQL-запросов к таблице базы данных

Описывается процесс создания приложения, которое используется для исследования SQL -запросов к базе данных.

Условие задачи

Задана база данных «01_02_00_011_mydb.mdb«, содержащая три таблицы: Students , Marks , Groups .

Структура таблиц следующая.

Таблицы связаны между собою по такой схеме (рис. 1):

Рис. 1. Схема связей между таблицами

Разработать приложение, которое будет формировать SQL -запросы к базе данных.

Выполнение

Сохранить проект в произвольной папке. Рекомендуется скопировать файл базы данных «01_02_00_011_mydb.mdb» в папку, в которой размещаются рабочие файлы нашего проекта.

2. Построение формы.

Сначала нужно увеличить размер формы с помощью «мышки».

Следующим шагом размещаем на форме такие компоненты:

– из вкладки dbGo компонент TADOConnection (рис. 2);

– из вкладки dbGo компонент TADOQuery (рис. 2);

– из вкладки Standard компоненты типа TButton и TMemo (рис. 3);

– из вкладки Data Controls компонент типа TDBGrid (рис. 4);

– из вкладки Data Access компонент типа TDataSource (рис. 5).

Рис. 2. Компоненты TADOConnection и TADOQuery

Рис. 3. Компонент типа TMemo на форме приложения

Рис. 4. Компонент типа TDBGrid

Рис. 5. Компонент типа TDataSource

В результате выполненных действий автоматически будут созданы объекты-переменные с такими именами: ADOConnection1 , ADOQuery1 , Memo1 , DBGrid1 , DataSource1 .

  1. Подключение базы данных к приложению.

Чтобы подключить базу данных к приложению нужно вызвать команду « Edit ConnectionString » из контекстного меню, что вызывается кликом правой кнопкой мышки на компоненте ADOConnection1 (рис. 6). Процесс подключения к базе данных состоит из нескольких шагов, представлен в виде мастера и подробно описан здесь.

Рис. 6. Вызов мастера подключения к базе данных

После подключения базы данных к приложению нужно настроить свойства других компонент, чтобы получить отображение базы данных

  1. Настройка свойств компонент.

С помощью Object Inspector устанавливаем такие свойства компонент:

– в компоненте ADOConnection1 свойство « LoginPrompt » установить в значение false (это необходимо во избежание запросов введения пароля во время доступа к базе данных);

– в компоненте Button1 свойство Caption установить в значение « Execute query » (выполнить запрос);

– в компоненте ADOQuery1 свойство Connection установить в значение ADOConnection1 ;

– в компоненте DataSource1 свойство DataSet установить в значение ADOQuery1 ;

– в компоненте DBGrid1 свойство DataSource установить в значение DataSource1 .

После настройки свойств компонент главная форма приложения будет иметь вид как показано на рисунке 7.

Рис. 7. Главная форма приложения после настройки компонент

Теперь база данных подключена к приложению и можно создавать программный код активизации формы и клика на кнопке « Execute query «.

  1. Настройка свойства SQL компонента ADOQuery1 .

Для ввода текста SQL -запроса сначала нужно вызвать редактор кода на языке SQL компонента ADOQuery1 (рис. 8).

Рис. 8. Свойство SQL компонента ADOQuery1

В результате откроется окно редактора кода (рис. 9). В этом окне нужно набрать следующий текст:

Рис. 9. Окно редактора кода на языке SQL

  1. Программирование события активизации основной формы OnActivate .

Программируем событие активизации формы приложения. Это событие генерируется одним из первых, поэтому здесь нужно вписать код, который делает начальную инициализацию компонент. Процесс программирования события в Delphi подробно описан здесь.

Выделяем главную форму приложения и вызываем событие OnActivate из вкладки Events в Object Inspector (рис. 8).

Рис. 10. Вызов события OnActivate

Листинг процедуры обработки события следующий.

  1. Программирование события закрытия формы OnClose .

Событие OnClose формы вызовется в момент ее закрытия. Поэтому, здесь нужно вписать код закрытия соединения с базой данных.

В событие закрытия формы вносим следующий текст.

В этом коде делается проверка на наличие открытия набора данных, и если этот набор открытый, то он закрывается методом Close в компоненте ADOQuery1 .

  1. Программирование события OnClick компонента Button1 .

Чтобы дать команду на выполнение SQL -запроса с Memo1 , нужно запрограммировать событие OnClick компонента Button1 .

Листинг процедуры обработки события следующий.

  1. Запуск приложения.

После выполненных действий, приложение можно запустить на выполнение. Результат работы приложения изображен на рисунке 11. Как видно из рисунка 11, отображаются все поля из таблицы Student (рис. 11).

Текст SQL -запроса формируется в компоненте Memo1 , а результат его выполнения отображается в компоненте DBGrid1 .

Рис. 11. Результат выполнения приложения

Создадим другой SQL -запрос, который выводит студентов, которые имеют оценку 4 по математике.

Результат выполнения приложения приведен на рисунке 12.

Delphi.FireDAC. Выполнение SQL команд

Данная статья о выполнении SQL команд в FireDAC. Основа для статьи – официальная документация.

Далее мы рассмотрим как отправлять команды через различные компоненты FireDAC.

TFDConnection

TFDConnection предлагает несколько перегруженных ExecSQL методов. Они просты для использования и полезны, когда

-Не нужно возвращать никаких результатов

-Когда SQL команда выполняется только однажды и не требуется, чтобы она находилась в подготовленном состоянии

-Нет необходимости для расширенной настройки параметров

-Нет необходимости для работы с SQL в дизайн режиме


Далее, в документации приводится такой пример

Для параметризованного запроса достаточно выполнить

Также TFDConnection предлагает методы ExecSQLScalar, отличные от ExecSQL. Как написано в документации ExecSQLScalar возвращает значение первой колонки в первом ряду первого result set

TFDQuery

FDQuery это более универсальный компонент для работы с SQL запросами. Он может и выполнять команды, не возвращающие множеств и наоборот, выполнять команды, возвращающие множества.

FDQuery можно использовать как в Runtime так и в Design режимах. В документации приводится пример как можно пользоваться компонентом в Design режиме

FDQuery в дизайн режиме

Чтобы воспользоваться FDQuery в дизайн режиме, нужно бросить его на форму. Свойство TFDQuery.Connection ,будет автоматически установлено, если на форме присутствует FDConnection. Двойной клик по компоненту и мы получим Query Editor

В этом окне можно задавать SQL команды, определять параметры и макросы, а также настраивать опции.

При нажатии на Execute выполнится запрос. Если команда возвращает множество, оно будет отображено во вкладке RecordSet, а структура множества будет отражена во вкладке Structure. Если DBMS возвращает сообщения об ошибках или предупреждения, они будут отражены во вкладке Messages.

Кнопка NextRecordSet позволяет пройтись по всем множествам, возвращаемым командой.

При тестировании DML команд, таких как UPDATE/INSERT/DELETE, если не подразумевается изменение множества из данного окна, то лучше поставить галочку AutoRollBack.

Кнопка OK для сохранения изменений в TFDQuery.

Использование параметров

Параметры в запросах это один из лучших приемов при разработке приложений БД. Главные достоинства это:

-Мы строим только одну SQL команду и используем её несколько раз с разными значениями параметров. DBMS, в свою, очередь будет строить план выполнения команды только один раз. Это снижает загрузку DBMS.

-В следующий раз, когда вы дадите команду на исполнение, только значения параметров будут передаваться в DBMS. Это снижает нагрузку на сеть.

-Не придется заботиться о формате SQL констант, например константа даты в Access SQL.

Чтобы добавить параметр в SQL запрос, достаточно использовать следующий синтакс :

То есть, в SQL запросе просто пишем двоеточие и имя константы. После этого ассоциируем соответствующие значения, используя коллекцию параметров. Далее в документации приводится такой пример

Илон Маск рекомендует:  Что такое код linkinfo

Для студентов, обучающихся по направлению

(специальности

080801 – “Прикладная информатика (в экономике)”),

дневной формы обучения

Создание запросов в Delphi к базе данных, созданной в Access [Текст] : метод. указания к практическим занятиям по курсам “Информационные технологии”, “Объектно-ориентированные системы программирования” / Воронеж. гос. технол. акад.; сост. И. О. Павлов, К. Н. Матусов, О. А. Гордиенко, И. С. Кутявин. – Воронеж : ВГТА, 2009. – 20 с.

Методические указания разработаны в соответствии с требованиями ГОС ВПО подготовки инженеров по направлению 230200 – “Информационные системы” (специальности 230201 – “Информационные системы и технологии”, 080801 – “Прикладная информатика (в экономике)” ). Они предназначены для закрепления теоретических знаний дисциплин цикла ООС и содержат сведения о создании в Delphi запросов на языке SQL к базам данных, созданным в Access .

Библиогр.: 5 назв.

Составители: доцент И. О. ПАВЛОВ, ст. преподаватель

К. Н. МАТУСОВ, ассистенты О. А. ГОРДИЕНКО, И. С. КУТЯВИН

Научный редактор профессор Г. В. АБРАМОВ

Рецензент профессор Ю. С. СЕРБУЛОВ

(Воронежского института высоких технологий)

Печатается по решению

Воронежской государственной технологической академии

Ó Павлов И. О., Матусов К. Н.,

Гордиенко О. А., Кутявин И. С., 2009

Ó ГОУВПО “Воронежская государственная

технологическая академия”, 2009

Оригинал-макет данного издания является собственностью Воронежской государственной технологической академии, его репродуцирование (воспроизведение) любым способом без согласия академии запрещается.

1. СОЗДАНИЕ ТАБЛИЦ В ACCESS

1.1. Создание базы данных в Access

После загрузки программы и вызова команды Создать пункта меню Файл на экране появляется окно начала работы c базой данных (рис. 1).

Рис. 1. Окно начала работы с базой данных

Для создания новой базы данных достаточно щелкнуть строку Новая база данных и в окне создания базы данных (рис. 2) ввести имя базы данных, и щелкнуть кнопку Создать.

Рис. 2. Окно создания баз данных

1.2. Создание таблиц

В окне базы данных (рис. 3)

Рис. 3. Окно базы данных

рекомендуется выбрать ссылку Создание таблицы в режиме конструктора и в окне создания таблицы (рис. 4) ввести имена, типы, описания и свойства полей.

Рис. 4. Окно создания таблицы

Типы данных Microsoft Access указаны в табл. 1.

Текст или комбинация текста и чисел, например, адрес, а также числа, не требующие вычислений, например, номера телефонов, номенклатурные номера или почтовый индекс

До 255 символов. Хранятся только введенные в поле символы, позиции, не использованные в текстовом поле, не хранятся. Для управления максимальным числом вводимых символов определяется свойство Размер поля (FieldSize).

Длинный текст или числа, например, пометки или описание

До 64 000 символов

Числовые данные, используемые для математических вычислений. Для определения числового типа определите свойство Размер поля (FieldSize)

1, 2, 4 или 8 байт

Значения валют. Денежный тип используется для предотвращения округлений во время вычислений. Предполагает до 15 символов в целой части числа и 4 — в дробной

Автоматическая вставка последовательных (отличающихся на 1) или случайных чисел при добавлении записи

Поля, содержащие только одно или два значения, таких как “Да/Нет”, “Истина/Ложь”, “Включено/Выключено”

Объекты (например, документы Microsoft Word, электронные таблицы Microsoft Excel, рисунки, звуки и другие данные), созданные в других программах

До 1 гигабайта (ограничено объемом диска)

После ввода всех полей окно создания таблицы нужно закрыть, сохранив таблицу под определенным именем (рис. 5).

Рис. 5. Окно сохранения имени таблицы

1.3. Создание связи между таблицами

Если в базе данных есть несколько таблиц между ними необходимо организовать связь по одноименным полям. Для организации связи достаточно щелкнуть кнопку схема данных в панели инструментов. В открывшееся окно (рис. 6) добавить таблицы, и перетащить курсор мыши со связываемого поля одной таблицы на связываемое поле другой таблицы, подтвердив создание связи.

Рис. 6. Окно схемы данных

После создания связи окно схемы данных нужно закрыть с сохранением созданной связи.

2. РАБОТА С БАЗОЙ ДАННЫХ,

СОЗДАННОЙ В ACCESS В DELPHI

2.1. Подключение базы данных к Delphi

1) На вкладке ADO палитры компонент Delphi (рис. 7) щелкнуть компоненту ADO С onnection и щелкнуть форму.

Рис. 7. Вкладка ADO

2) В Object Inspector в свойстве Connection String щелкнуть …, в открывшемся окне (рис. 8) щелкнуть кнопку Build

Рис. 8. Окно Connection String

3) В окне Свойства связи с данными (рис. 9) выбрать поставщика данных “ Microsoft Jet 4.0 OLE DB Provider ” и щелкнуть кнопку Далее.

(Аналогичным образом к Delphi подключаются другие базы данных. Например, для подключения базы данных SQL – сервера используется поставщик данных “ Microsoft OLE DB Provider for SQL server ”);

Рис. 9. Окно свойств связи с данными

4) В следующем окне (рис. 10) найти файл базы данных, в поле Выберите или введите имя базы данных, убрать путь к файлу и щелкнуть кнопку Проверить подключение.

Рис. 10. Окно выбора базы данных

При состоявшемся подключении появится окно подтверждения подключения (рис. 11).

Рис.11. Подтверждение подключения базы данных

2.2. Подключение таблиц базы данных к приложению Delphi

Для каждой таблицы базы данных необходимо выполнить следующие действия.

1) Щелкнуть компоненту ADOTable и щелкнуть форму;

в Object Inspector присвоить значения свойствам:

Connection:= ADO С onnection1;

Table Name:= Имя таблицы >;

2) На вкладке Data Access (рис. 12) щелкнуть компоненту DataSource и щелкнуть форму;

в Object Inspector присвоить значение свойству:

Рис. 12. Вкладка Data Access

3) На вкладке Data Controls (рис. 13) щелкнуть компоненту DBGrid и щелкнуть форму;

в Object Inspector присвоить значение свойству:

DataSource := DataSource 1(2,3…);

Рис. 13. Вкладка Data Controls

4) Щелкнуть компоненту DBNavigator и щелкнуть форму;

в Object Inspector присвоить значение свойству:

2.3. Создание запросов

1) На вкладке ADO щелкнуть компоненту ADOQuery и щелкнуть форму;

в Object Inspector присвоить значение свойству:

Connection := ADO С onnection 1.

2) На вкладке Data Access щелкнуть компоненту DataSource и щелкнуть форму;

в Object Inspector присвоить значение свойству:

DataSet := ADOQuery 1.

3) На вкладке Data Controls щелкнуть компоненту DBGrid и щелкнуть форму;

в Object Inspector присвоить значение свойству:

4) Создать в приложении кнопку Запрос, в которую поместить обработчик события с SQL запросом, используя операторы:

form1.ADOQuery1.SQL.Text:=’ Текст SQL запроса >’;

form1.ADOQuery1.SQL.Add(’ Текст SQL запроса >’);

form 1. ADOQuery 1. Open ;

2.4. Основные сведения о SQL запросах

Любой SQL -оператор состоит из следующих трех элементов:

§ Объявления параметров – необязательные параметры, которые программа передает оператору SQL .

§ Команда – сообщает процессору запросов СУБД тип выполняемой операции, например, SELECT или DELETE .

§ Объявления опций – указывает на условия фильтрации, порядок группировки или сортировки обрабатываемых данных. В их число входят предложения WHERE , GROUP BY и ORDER .

Синтаксис оператора следующий:

[Объявление параметров] Команда [Опции]

С помощью этих двух элементов оператора (объявление параметров и опции) можно создавать запросы для выполнения самых разнообразных задач. Команды перечислены в табл. 2.

Команда


Назначение

Удаляет записи из таблицы

Добавляет в таблицу группу записей

Выбирает группу записей и помещает их в динамический набор или таблицу

Задает значения полям таблицы

Хотя тип операции определяет команда, объявления опций указывают на то, какие поля и записи следует обрабатывать.

Для связи между таблицами используется инструкция INNER JOIN .

Условие фильтрации в SQL -команде задается при помощи инструкции WHERE , общий синтаксис которого следующий:

WHERE логическое_выражение

Существуют четыре типа логических операторов, описывающих условие (табл. 3).

Оператор

Действие

Сравнивает поле с заданным значением

Сравнивает поле с шаблоном

Сравнивает поле со списком возможных значений

Сравнивает поле с диапазоном значений

3. ПРИМЕРЫ ВЫПОЛНЕНИЯ ЗАДАНИЙ

1) Создать в Access базу данных « student », содержащую таблицы «каталог студентов» (рис.14) и «1 сессия» (рис.15).

Рис. 14. Таблица «каталог студентов»

Рис. 15. Таблица «1 сессия»

2) Организовать связь между таблицами по полю ‘код’.

3) Создать приложение в Delphi (рис.16) с простыми SQL запросами из базы данных «stude nt ».

Рис. 16. Окно приложения с простыми SQL запросами

Обработчик события для кнопки Отличники

procedure TForm1.Button1Click(Sender: TObject);

‘ SELECT [каталог студентов].фамилия, ‘+

‘ [1 сессия].математика, [1 сессия].информатика, ‘+

‘ [1 сессия].история FROM [1 сессия] ‘+

‘ INNER JOIN [каталог студентов] ON [1 сессия].код=’ +

‘ WHERE (([1 сессия].математика=5) AND’+

‘ ([1 сессия].информатика=5) AND ([1 сессия].история=5));’;

Обработчик события для кнопки Военкомат

procedure TForm1.Button2Click(Sender: TObject);

‘ SELECT [каталог студентов].фамилия, ‘ +

‘ [каталог студентов].[год рождения] FROM ‘+

‘ [каталог студентов] WHERE ‘ +

‘(([каталог студентов].пол=»м») AND ‘ +

‘ ([каталог студентов].[год рождения]

Используя базу данных « student » создать приложение в Delphi (рис. 17) с запросом произвольной выборки данных по введенным параметрам.

Рис. 17. Окно приложения с запросом произвольной

выборки данных по введенным параметрам

Обработчик события для кнопки Запрос

procedure TForm1.Button1Click(Sender: TObject);

‘[каталог студентов].адрес, [каталог студентов].пол,’+

‘[1 сессия].математика, [1 сессия].информатика,’+

‘[1 сессия].история FROM [1 сессия] ‘+

‘INNER JOIN [каталог студентов] ON ‘+

‘[1 сессия].код = [каталог студентов].код ‘+

‘WHERE (([каталог студентов].код)

If form1.Edit1.Text<>» then form1.ADOQuery1.SQL.Add(

‘AND [каталог студентов].адрес=»‘+form1.Edit1.Text+'»‘);

If (form1.Edit2.Text<>») AND (form1.Edit3.Text<>») then

‘AND (([каталог студентов].[год рождения])>=’+

‘AND ([каталог студентов].[год рождения])

If form1.Edit4.Text<>» then form1.ADOQuery1.SQL.Add(

‘AND [ каталог студентов ]. пол =»‘+form1.Edit4.Text+'»‘);

If (form1.Edit5.Text<>») And (form1.Edit6.Text<>») then

‘ AND (([1 сессия ]. математика )>=’+form1.Edit5.Text+

‘ AND ([1 сессия ]. математика )

‘ AND (([1 сессия ]. информатика )>=’+form1.Edit5.Text+

‘ AND ([1 сессия ]. информатика )

‘ AND (([1 сессия ]. история )>=’+form1.Edit5.Text+

‘ AND ([1 сессия ]. история )

4. ЗАДАНИЯ

1) Создать в ACCESS базу данных, содержащую не менее двух таблиц. Предметную область базы данных выбрать из табл. 4 по номеру варианта.

Название книги, автор, издательство, год издания, кол. Страниц, раздел библиотеки

Расписание, номер рейса, маршрут, пункты промежуточной посадки, Количество свободных мест на каждом рей­ се

Н аименование товара, единица измерения, цена, количество, дата последнего завоза

Фамилия И.О., пас­ портные данные, образование, специальность, подраз­деление, должность, оклад и т. д.

Наимено вание товара, единица измерения, цена, количество, дата последнего завоза, регистрация поступления това­ ра и отгрузки

Номеров комнаты, класс, число мест. Список гостей: паспортные данные, даты приезда и отъезда

Название группы или исполнителя, база песен; база дисков с перечнем песен, год издания диска

Дата, время и протяженность мероприятия, место проведения. Просмотр дел на завтра, послезавтра и так далее

База определений какой-либо науки: вводимый термин, его толкование (определение), ссылки на ис пользуемые термины

Название болезни, симп томы, процедуры, перечень рекомендуемых лекарств с указанием требуемого количества

База медикаментов на складе

Название, количество, взаимозаменяемость, про верка наличия лекарств, корректировка запасов

Фамилия вкладчика, номер лице вого счета, категория вклада, паспортные данные, теку­щая сумма вклада, дата последней операции

Наименование товара, анкетные данные клиента, оценоч ная стоимость; сумма, выданная под залог, дата сдачи, срок хранения

Фамилия И.О. студента, пас­ портные данные, номер зачетной книжки, факультет, группа, оценки в сессию и т. д.

Название театра, адрес, телефон, фамилия директора, репертуар, состав артистов

Состав команды, тренер, проведенные и предстоящие игры, результат игры

Фамилия И.О., возраст, домашний адрес, телефон, пас­ портные данные, образование, специальность, льготы

Название картины, реквизитный номер, автор, год создания, страна, тип картины (масло, рисунок…)

Фамилия И.О. ребенка, возраст, домашний адрес, родители, профессия родителей, дом. телефон, увлечения ребенка

Ассортимент, наименование, фирма-производитель, стоимость, магазин, возрастные категории

2) Создать приложение в Delphi с двумя простыми запросами к созданной базе данных.

3) Создать приложение в Delphi с запросом произвольной выборки данных по введенным параметрам.

5. КОНТРОЛЬНЫЕ ВОПРОСЫ

1. Как создать новую базу данных в ACCESS ?

2. Каким образом создаются таблицы?

3. Как организуется связь между таблицами?

4. На какой вкладке палитры компонент Delphi находятся компоненты для подключения базы данных, созданной в Access к Delphi ?

5. Какой поставщик данных используется для подключения базы данных, созданной в Access к Delphi ?

6. Какая компонента используется для подключения таблицы?

7. На какой вкладке палитры компонент Delphi находится компонента DataSource ?

8. На какой вкладке палитры компонент Delphi находятся компоненты DBGrid и DBNavigator ?

9. Какая компонента используется для создания запросов?

10. Какие основные операторы используются в Delphi для создания простого запроса?

11. Какие элементы включает SQL запрос?

12. Какие команды используются в SQL запросе?

13. Какая инструкция используется в SQL запросе для связи между таблицами?

Илон Маск рекомендует:  Глава 10 сопоставление с образцом

14. Какое назначение инструкции WHERE ?

15. Какие логических операторы используются в условиях?

ТРЕБОВАНИЯ К ОТЧЕТУ

Отчет должен содержать задание, описание порядка выполнения работы на ЭВМ, результат работы в виде созданной на ЭВМ базы данных c выводом содержания таблиц; двух приложений, созданных в Delphi . В отчет необходимо поместить окна приложений, окна с результатами нескольких запросов, обработчики событий для первого и второго приложений.

Захаров, Л . Официальный учебный курс Microsoft: Microsoft Office Access 2003. Русская версия [Текст] / Л. Захарова. – М. : Эком, 2007. – 432 с.

Культин, Н. Б. Delphi в примерах и задачах [Текст] / Н. Б. Культин. – СПб. : BHV, 2008. – 288 с.

Маркин, А. В. Построение запросов и программирование на SQL. [Текст] / А. В. Маркин. – М. : Диалог-МИФИ , 2008. – 320 с.

Фаронов, В. В. Delphi. Программирование на языке высокого уровня [Текст] / В. В. Фаронов. – СПб. : Питер, 2009. – 640 c.

Фленов, М. Е. Библия Delphi [Текст] / М. Е. Фленов – СПб. : BHV, 2009. – 800 c.

СОЗДАНИЕ ЗАПРОСОВ В DELPHI К БАЗЕ ДАННЫХ,

СОЗДАННОЙ В ACCESS

Методические указания к практическим занятиям

по курсам “Информационные технологии”,

“Объектно-ориентированные системы программирования”

Для студентов, обучающихся по направлению

230200 – “Информационные системы”


(специальности

230201 – “Информационные системы и технологии”,

080801 – “Прикладная информатика (в экономике)”)

дневной формы обучения

Составители: ПАВЛОВ Игорь Олегович

МАТУСОВ Константин Николаевич

ГОРДИЕНКО Ольга Андреевна

КУТЯВИН Игорь Степанович

Подписано в печать . .2009. Формат 60х84 1/16

Усл. печ. л. 1,1. Тираж 75 экз. Заказ С-

ГОУВПО “Воронежская государственная технологическая академия” (ГОУВПО “ВГТА”)

Sql запросы в delphi

Компоненты Delphi для работы с базами данных были созданы в расчете на работу с SQL и архитектурой клиент/сервер. При работе с ними вы можете воспользоваться характеристиками расширенной поддержки удаленных серверов. Delphi осуществляет эту поддержку двумя способами.

Во-первых, непосредственные команды из Delphi позволяют разработчику управлять таблицами, устанавливать пределы, удалять, вставлять и редактировать существующие записи.

Второй способ заключается в использовании запросов на языке SQL, где строка запроса передается на сервер для ее разбора, оптимизации, выполнения и передачи обратно результатов.

Данный документ делает акцент на втором методе доступа к базам данных, на основе запросов SQL (pass-through). Авторы не стремились создать курсы по изучению синтаксиса языка SQL и его применения, они ставили перед собой цель дать несколько примеров использования компонентов TQuery и TStoredProc. Но чтобы сделать это, необходимо понимать концепцию SQL и знать как работают selects, inserts, updates, views, joins и хранимые процедуры (stored procedures). Документ также вскользь касается вопросов управления транзакциями и соединения с базой данных, но не акцентирует на этом внимание. Итак, приступая к теме, создайте простой запрос типа SELECT и отобразите результаты.

2. Компонент TQuery

Если в ваших приложениях вы собираетесь использовать SQL, то вам непременно придется познакомиться с компонентом TQuery. Компоненты TQuery и TTable наследуются от TDataset. TDataset обеспечивает необходимую функциональность для получения доступа к базам данных. Как таковые, компоненты TQuery и TTable имеют много общих признаков. Для подготовки данных для показа в визуальных компонентах используется все тот же TDatasource. Также, для определения к какому серверу и базе данных необходимо получить доступ, необходимо задать имя псевдонима. Это должно выполняться установкой свойства aliasName объекта TQuery.

Все же TQuery имеет некоторую уникальную функциональность. Например, у TQuery имеется свойство с именем SQL. Свойство SQL используется для хранения SQL-запроса. Ниже приведены основные шаги для составления запроса, где все служащие имеют зарплату свыше $50,000.

Создайте объект TQuery

Задайте псевдоним свойству DatabaseName. (Данный пример использует псевдоним IBLOCAL, связанный с демонстрационной базой данных employee.gdb).

Выберите свойство SQL и щелкните на кнопке с текстом — ‘. ‘ (три точки, Инспектор Объектов — В.О.). Должен появиться диалог редактора списка строк (String List Editor).

Выберите в Инспекторе Объектов свойство Active и установите его в TRUE.

Разместите на форме объект TDatasource.

Установите свойство Dataset у TDatasource в Query1.

Разместите на форме TDBGrid.

Установите его свойство Datasource в Datasource1.

Свойство SQL имеет тип TStrings. Объект TStrings представляет собой список строк, и чем-то похож на массив. Тип данных TStrings имеет в своем арсенале команды добавления строк, их загрузки из текстового файла и обмена данными с другим объектом TStrings. Другой компонент, использующий TStrings — TMemo. В демонстрационном проекте ENTRSQL.DPR (по идее, он должен находится на отдельной дискетте, но к «Советам по Delphi» она не прилагается — В.О.), пользователь должен ввести SQL-запрос и нажать кнопку «Do It» («сделать это»). Результаты запроса отображаются в табличной сетке. В Листинге 1 полностью приведен код обработчика кнопки «Do It».

Этого должно быть достаточно для пользователя, знающего SQL. Тем не менее, большинство пользователей не знает этого языка. Итак, ваша работа как разработчика заключается в предоставлении интерфейса и создании SQL-запроса. В Delphi, для создания SQL-запроса на лету можно использовать динамические запросы. Динамические запросы допускают использование параметров. Для определения параметра в запросе используется двоеточие (:), за которым следует имя параметра. Ниже приведе пример SQL-запроса с использованием динамического параметра:

Если вам нужно протестировать, или установить для параметра значение по умолчанию, выберите свойство Params объекта Query1. Щелкните на кнопке ‘. ‘. Должен появиться диалог настройки параметров. Выберите параметр Dept_no. Затем в выпадающем списке типов данных выберите Integer. Для того, чтобы задать значение по умолчанию, введите нужное значение в поле редактирования «Value».

Для изменения SQL-запроса во время выполнения приложения, параметры необходимо связать (bind). Параметры могут изменяться, запрос выполняться повторно, а данные обновляться. Для непосредственного редактирования значения параметра используется свойство Params или метод ParamByName. Свойство Params представляет из себя массив TParams. Поэтому для получения доступа к параметру, необходимо указать его индекс. Для примера,

Свойство asInteger читает данные как тип Integer (название говорит само за себя). Это не обязательно должно указывать но то, что поле имеет тип Integer. Например, если тип поля VARCHAR(10), Delphi осуществит преобразование данных. Так, приведенный выше пример мог бы быть записан таким образом:

Если вместо номера индекса вы хотели бы использовать имя параметра, то воспользуйтесь методом ParamByName. Данный метод возвращает объект TParam с заданным именем. Например:

В листинге 2 приведен полный код примера.

Обратите внимание на процедуру, первым делом подготовливающую запрос. При вызове метода prepare, Delphi посылает SQL запрос на удаленный сервер. Сервер выполняет грамматический разбор и оптимизацию запроса. Преимущество такой подготовки запроса состоит в его предварительном разборе и оптимизации. Альтернативой здесь может служить подготовка сервером запроса при каждом его выполнении. Как только запрос подготовлен, подставляются необходимые новые параметры, и запрос выполняется.

Sql запросы в delphi

Примечание: Данный документ представляет собой коллективный труд нескольких авторов, которые индивидуально несут ответственность за качество предоставленной здесь информации. Borland не предоставлял, и не может предоставить никакой гарантии относительно содержимого данного документа.

Компоненты Delphi для работы с базами данных были созданы в расчете на работу с SQL и архитектурой клиент/сервер. При работе с ними вы можете воспользоваться характеристиками расширенной поддержки удаленных серверов. Delphi осуществляет эту поддержку двумя способами. Во-первых, непосредственные команды из Delphi позволяют разработчику управлять таблицами, устанавливать пределы, удалять, вставлять и редактировать существующие записи. Второй способ заключается в использовании запросов на языке SQL, где строка запроса передается на сервер для ее разбора, оптимизации, выполнения и передачи обратно результатов.

Данный документ делает акцент на втором методе доступа к базам данных, на основе запросов SQL (pass-through). Авторы не стремились создать курсы по изучению синтаксиса языка SQL и его применения, они ставили перед собой цель дать несколько примеров использования компонентов TQuery и TStoredProc. Но чтобы сделать это, необходимо понимать концепцию SQL и знать как работают selects, inserts, updates, views, joins и хранимые процедуры (stored procedures). Документ также вскользь касается вопросов управления транзакциями и соединения с базой данных, но не акцентирует на этом внимание. Итак, приступая к теме, создайте простой запрос типа SELECT и отобразите результаты.

Если в ваших приложениях вы собираетесь использовать SQL, то вам непременно придется познакомиться с компонентом TQuery. Компоненты TQuery и TTable наследуются от TDataset. TDataset обеспечивает необходимую функциональность для получения доступа к базам данных. Как таковые, компоненты TQuery и TTable имеют много общих признаков. Для подготовки данных для показа в визуальных компонентах используется все тот же TDatasource. Также, для определения к какому серверу и базе данных необходимо получить доступ, необходимо задать имя псевдонима. Это должно выполняться установкой свойства aliasName объекта TQuery.

Все же TQuery имеет некоторую уникальную функциональность. Например, у TQuery имеется свойство с именем SQL. Свойство SQL используется для хранения SQL-запроса. Ниже приведены основные шаги для составления запроса, где все служащие имеют зарплату свыше $50,000.

1. Создайте объект TQuery

2. Задайте псевдоним свойству DatabaseName. (Данный пример использует псевдоним IBLOCAL, связанный с демонстрационной базой данных employee.gdb).

3. Выберите свойство SQL и щелкните на кнопке с текстом — ‘…’ (три точки, Инспектор Объектов — В.О.). Должен появиться диалог редактора списка строк (String List Editor).

4. Введите: Select * from EMPLOYEE where SALARY>50000. Нажмите OK.

5. Выберите в Инспекторе Объектов свойство Active и установите его в TRUE.

6. Разместите на форме объект TDatasource.

7. Установите свойство Dataset у TDatasource в Query1.

8. Разместите на форме TDBGrid.

9. Установите его свойство Datasource в Datasource1.

Свойство SQL имеет тип TStrings. Объект TStrings представляет собой список строк, и чем-то похож на массив. Тип данных TStrings имеет в своем арсенале команды добавления строк, их загрузки из текстового файла и обмена данными с другим объектом TStrings. Другой компонент, использующий TStrings — TMemo. В демонстрационном проекте ENTRSQL.DPR (по идее, он должен находится на отдельной дискетте, но к «Советам по Delphi» она не прилагается — В.О.), пользователь должен ввести SQL-запрос и нажать кнопку «Do It» («сделать это»). Результаты запроса отображаются в табличной сетке. В Листинге 1 полностью приведен код обработчика кнопки «Do It».

procedure TForm1.BitBtn1Click(Sender: TObject);

Конструкция LIKE в запросе. Делаем удобный поиск

Всем привет, сегодня мы рассмотрим урок, связанный с Базами данных, а в частности мы рассмотрим, как сделать подсказку пользователю, который вводит данные, например, для поиска. Данную функцию можно наблюдать во многих программах, а также на многих сайтах, например, Вконтакте, когда происходит поиск человека, появляется выпадающий список, в котором можно найти похожие совпадения, что облегчает ввод данных пользователю, данную функцию мы опробуем и на Delphi на примере Базы данных MS Access, только немного в простом варианте. Но это подходит и к другим БД, которые можно использовать в Delphi. Мы уже много рассматривали примеров, для поиска данных, в этом случае мы будем использовать SQL-конструкцию LIKE, которую раньше мы также рассматривали и использовали. Пример данной конструкции описан ниже:

Как видно выше, конструкция LIKE проста для поиска данных по шаблону, для нее необходимо указать один входной параметр.

А теперь приступим к нашему примеру и задачи. Для начала давайте создадим некоторую Базу данных в MS Access, не будем слишком усложнять пример, это Вы сможете сделать и сами, а просто сделаем одну табличку, назовем ее Goroda, в ней я создал следующие поля:

  • Id – счетчик
  • Gorod – Текстовый

Теперь нам необходимо немного заполнить нашу табличку, совсем не много, я добавил туда всего-навсего 5 записей:

Саму структуру таблицы, вы можете увидеть на рисунке:

Идем дальше, для примера, создадим проект в Delphi, на форме разместим следующие компоненты:

В свойстве Caption компонента TLabel напишем – «Город». Далее выделяем компонент TAdoConnection, в его свойстве ConnectionString указываем Поставщика данных – в нашем случае это Microsoft Jet 4.0 OLE DB Provider. Переходим к следующему пункту подключения (вкладке), в которой указываем путь к нашей Базе данных (можно указать полный путь к Базе данных, но если она находится в текущей папке с проектом, то просто указываем полное имя нашей Базы данных с расширением, в нашем случае *.mdb). Нажимаем OK и переходим к свойству Mode, в котором выбираем из выпадающего списка cmShareDenyNone, хотя можно просто выбрать чтение cmShareDenyRead. Ну и свойство LoginPromt ставим в False (запрещаем выводить окно, для запроса ввода имени и пароля, который позволяет получить доступ к нашей Базе данных), если конечно в Вашей Базе данных не установлен пароль, в противном случае Вам придется вводить логин и пароль, можно это забить в нашем подключении, чтобы постоянно не вводить одни и теже данные. Я пароль на Базу данных не ставил, поэтому устанавливаем в False. Ну и наконец нам необходимо активировать подключение к нашей Базе данных, для этого свойство Connected устанавливаем в False.

Илон Маск рекомендует:  HTML-формы

Теперь переходим к настройке нашего компонента TADOQuery. Выделяем наш компонент TADOQuery и в свойстве Connection указываем имя компонента TADOConnection, в моем случае это AdoConnection1. Далее нам понадобиться еще одно свойство компонента TADOQuery – это Parameters. Открываем его и добавляем новый параметр (его название), я его назвал – gorods, указываем ему тип данных (DataType) – ftString и все закрываем наше окно. Сразу активировать наш запрос не надо, так как в нем мы не прописали никакой SQL-конструкции, да и Вам собственно это не удастся. Общий вид моего окна проекта получился следующим:

Теперь переходим к написанию кода программы.

Выделяем наш компонент TEdit и переходим в список его событий, находим там событие OnKeyUp и нажимаем двойным щелчком, для открытия окна кода программы для этого события. Почему именно данное событие, потому что оно нам само больше подходит, оно возникает, генерируется после того, как пользователь ввел очередной символ город и уже отпускает кнопку, также в данном событии имеется аргумент Key, который хранит числовой код нажатой клавиши.

Теперь переходим к написание кода, открываем еще раз наше событие и пишем туда следующий код:

Теперь давайте детально разберем наш код. Переменная pos, нам необходима для запоминания текущей позиции ввода. Дальше в условии мы отсеиваем все коды клавиш которые меньше 47.

С помощью ClearSelection мы снимаем выделение в компоненте TEdit. Дальше мы пишем наш SQL-запрос, в котором и присутствует конструкция LIKE, а в ней мы указываем в условии наш параметр gorods. Уже нижней строчкой мы задаем нашему параметру значения из TEdit, для начала удалив все пробелы, которые могут быть впереди, а также вконец нашей записи добавляем символ %, который дает понять запросу, что после введенного пользователем слова могут идти совершенно любые символы.

В конце все просто, мы присваиваем в TEdit, то что нашли в Базе данных (если нашли конечно), и выделяем в слове те символы, которые возможно пользователь и ищет, если ничего не нашли, то издаем просто звуковой сигнал. Вот, что у меня примерно получилось:

Что касается этой темы, то ее можно развить и дальше. Так как в данном примере показывается только результат первой найденной записи в таблице, а схожих может быть и не сколько, поэтому тут можно сделать в виде выпадающего списка, как я упоминал раньше реализовано в известной социальной сети Вконтакте. Поэтому данный пример, мы рассмотрим уже в следующих статьях по Базам данных.

А что касается данного примера, то основные его достоинства состоят в том, что он не только находит название города, который соответствует шаблону LIKE, но и также помогает пользователю закончить ввод, подставляя наиболее подходящее название города.

Поэтому используется в своих разработках именно данную конструкцию поиска, чтобы облегчить пользователю работать в Вашей программе. Также я выкладываю исходники статьи, которые можно скачать тут. Исходник проверялся в IDE – Delphi 7.

Ставим одинарные кавычки в SQL запросе в Delphi

Тот, кто впервые пытается реализовать SQL запрос к базе данных из программы на Delphi, как правило, сталкивается с некоторыми сложностями, даже если синтаксис SQL запросов ему давно знаком. Очень часто первым затруднением бывает проставление одинарных кавычек в запросе.

Дело в том, что все значения текстовых полей в SQL должны быть обрамлены в одинарные кавычки. Но как это сделать, если и сам запрос представляет из себя строку, а строки в Delphi так же обрамляются в кавычки?

Рассмотрим следующий пример:

В таком виде выборка не будет осуществлена, возникнет ошибка — «Синтаксис SQL запроса неверен. Проблема в отсутствии одинарных кавычек у значения текстового поля First_Name». Есть несколько решений данной проблемы:

1. Использовать функцию QuotedStr(const S:string):string;
Функция добавляет символ одиночной кавычки в начало и конец строки. Пример использования:

2. Использовать два раза повторяющийся символ одиночной кавычки.

3. Использовать код символа кавычки — #39 . Пример использования:

Sql запросы в delphi

Можно ли сделать SQL запрос внутри Дельфи к результатам запроса выполненного на сервере?
:-) Дело в том что когда я делаю обыкновенный запрос к SQL Server , то иногда мне нужно эти результаты обработать более детально, а бегать в цикле по полям ADOQuery1.Fields[i] неудобно — ведь результат запроса — таблица и к ней логичнее применить SQL запрос ! Заранее спасибо!

Можно.
А в чем собственно проблема? select * from (select * from mytab). Кстати все запросы делаются на сервере.


> 2 Max Zyuzin:

Вид в каком это предлагаешь ты, приведет к многократному выполнению вложенного запроса на сервере. Если этот запрос велик, то опаньки. Выполнить же запрос к уже сформированному запросу можно только создавая временную таблицу, и помещая туда результаты первоначального запроса.

Обычно это делается через временную таблицу, хранимую на сервере, которая в конце обработки удаляется

AngeL B. : А как создавать временную таблицу и главное как указать ее имя в slq запросе ? SELECT Field1 FROM .

Пересмотреть логику «запроса из запроса» и сконструировать один единственный запрос !

Пусть ADOQuery1 — первоначальный запрос к SQL Server»у
теперь DataSource1.DataSet:=ADOQuery1;
Пробовал например пользоваться компонентом TQuery :
Query1.DataSource:=DataSource1;
Но что писать в тексте SQL запроса ?
Незнаю что делать дальше — а то что делал раньше — просто интуитивный поиск решения моей проблемы :-)

Johnmen © : Меня интересует именно проблема запроса из запроса! :-) Если кто знает — подскажите, пожалуйста!

boogier © : В том то и дело что я не хочу обращаться на сервак после первого запроса и хочу все остальные запросы( к результатам первого запроса) проводить на клиенте! :-)

Тогда у тебя один выход — фильтрация !

Johnmen © : А подробнее, если можно ? Просто я новичок в программировании баз данных и для меня слово фильтрация мало что значит,sorry! :-) Заранее спасибо!

>AngeL B. (14.10.02 09:13)
Что то я не понял в каком месте будет многократное выполнение запроса. к тому же на сервере все делается (должно) по определению быстрее, а в третих, не сичтаю менее трудоемким процесс перекачки сначала кучи данных на клиента, с последуещей их закачкой в память и обработкой. я думаю «опаньки» раньше произойдет с клиентом.
SQL Сервер на то и сервер, что бы передавать только необходимую информацию клиенту. а ваш подход превращает его в файл сервер.
>theEnter
А вообще лучше воспользоваться советом Johnmen © (14.10.02 09:23)

create temp table
создается временная таблица
потом обзіваешь ее как хочешь, заполняешь
и обращаешься в SELECT-е так, как ты ее обозвал.
знаю не по-наслышке, сама использовала

По поводу фильтрации набора данных см. свойства Filter, Filtered, метод OnFilterRecord.
А еще лучше — почитай умную книжку. )))

Что бы не заполнять временную таблицу данными, удобнее создавать не ее, а просмотр

В ADOQuery есть свойство Recordset — к нему можно применить фильтр: ADOQuery.Recordset.Filter = «Field like «»%ля-ля%»» and . «. Убрать фильтр: ADOQuery.Recordset.Filter = «»
Это не поможет (писал по памяти, остальное есть в справке)

Если даже допустить, что .
> . результат запроса — таблица и к ней логичнее применить SQL запрос .
То у тебя на компьютере по крайней мере должен быть сервер, который этот запрос обработает.

А вообще для начала хотя-бы сообщи с каким сервером ты работаешь — Oracle, IB. (а может вообще с локальными таблицами . ), где запущен сервер (на локальной машине или выделенной, как часто будет выполняться такой запрос)

Если отбросить вероятность того, что данную операцию «Ы» нельзя выполнить в рамках одного запроса (а скорее всего все-таки можно), то мне больше нравится предложение Reindeer Moss Eater с применением View, если конечно используемый сервер дает такую возможность.
То есть вместо Select»a создаешь View, а потом к нему обращаешься как к таблице. View , кстати, можно и не удалять, если данная операция («Ы») :-) будет часто выполняться.

>22606 © (14.10.02 11:10)
Внимаетельнее читай вопрос, там указан сервер MSSQL. Предложение со View разумно, но возможно все можно офрмить одним запросом.

Сорри, не заметил, что в вопросе ты указал сервер — MSSQL.
Тогда нет никаких препятствий — создавай View.
Хотя, повторюсь, возможно можно и в рамках одного запроса все сделать.

Да, спасибо, Max Zyuzin © , я уже после своего ответа это увидел, но и Вы внимательнее читайте ответ :-) — оба раза я предположил, что скорее всего все можно оформить в один запрос.
Но очень часто бывает, что и первичный запрос очень навороченный и быстрее сделать два, чем втолковать серверу в одном запросе чего от него хотят.

22606 © (14.10.02 11:26)> Разбиение запросов на просмотры нужно не столько серверу сколько пользователю/программисту для облегчения его понимания/написания, многократного использования и предоставления защищенных данных пользователям (правильное применение запросов уменьшает вероятность несанкционированного доступа к данным).

22606 © :
>Тогда нет никаких препятствий — создавай View
Вы имеете в виду создать View на сервере? Исли так тогда — Чем это лучше простого обращения к Серверу обычным запросом ? Если не понял — извините, но всетаки проблема осталась: как мне указать что источником для запроса Query является другой запрос ADOQuery ?

theEnter (14.10.02 11:39)> Тебе все равно не сделать то, что ты хочешь — запрос выполняется на сервере и над данными расположенными в БД. Выполнить запрос на результат — это фантастика :-).
Тебе же народ предлагает конструкцию:
SELECT T1.*
FROM (SELECT Q1.
FROM TABLE1 AS Q1) AS T1(FIELD1. FIELD_N)
Вложенный запрос наз-ся.

Если вопрос стоит именно так, то никак.
Здесь Вы, скорее всего, представляете, что первый запрос выполнился и выполнять его вторично нет смысла, то это не совсем так, так как результаты первого запроса все-равно хранятся на сервере до того момента, пока Вы не вытяните его на клиента, а как кто-то здесь уже отвечал (кстати тот-же Max Zyuzin ©), это может быть более долгим и ресурсоемким, чем выполнить все на сервере — то-ли одним запросом то-ли с помощью View.

passm ©: Что такое вложеный запрос я знаю, но зачем тогда в TQuery поле DataSource ?

Для организации связи Master-Detail. Разве в Helpe об этом не написано.

theEnter (14.10.02 11:54)> Для автоматической установки типа/значений параметров в запросе. Т. е. если в запросе Query1 имеется параметр «PARAM1» и указан DataSource, то перед открытием/исполнением если в источнике DataSource будет найдено поле PARAM1, то фактически выполнится Query1.ParamByName(«PARAM1»).AssignField(FieldByName(DataSource.DataSet.FieldByName(«PARAM1»)))

Рассмотри следующее предложение:
В текущем Connecte (это обязательно) создаешь временную таблицу
SELECT Field1,Field2.
INTO #TempTableName
FROM MyTable
WHERE

Для данного Connect»а будет создана временная таблица. Для этого Connect»а ее имя будет #TempTableName, на самом деле ее имя будет #TempTableName___________XXXXX. Далее можешь работать с этой временной таблицей:
SELECT Field1,Field2.
FROM #TempTableName
WHERE

После закрытия Connect»а таблица #TempTableName будет автоматически уничтожена. Эта таблица видна только в данном Connect»е для тебя. Если хочешь чтобы временная таблица была видна другим пользователям — назови ее ##TempTableName.
Насчет уничтожения такой таблицы ничего сказать не могу — не проверял. Читай Help по MS SQL.

есть компоненты, которые делают запросы из любого датасета. (правда я ими не пользовался)

perov © : Интересно а что это за компоненты ? Если нестандартные, то где их можно взять ?

отправил на мыло.

проще TClientDataset там есть BeforeGetRecord —OwnerData
можешь передавать на сервер любые данные
я делаю так с дополнительными WHERE условиями.

А нельзя ли поподробнее про компоненты, которые делают запросы из датасета? Где скачать можно?

2 mtihonov
это не совсем то, что требуется.
т.к. таблица все-равно будет создана на сервере :)

Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL