![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
![]() Всем доброго времени суток. У меня конечно идиотский вопрос но задать надо. Я не могу понять как работать с компонентом Query после выполнения запроса. Непонятно где находятся данные. обясните дуралею. можно ли после выполнения 1го запроса обработать результат другим запросом. Или надо сохранить результат куда нибудь а только потом выполнять следующий. Вопрос возник потому при программировании программы надо несколько таких операций. Расскажите пожалуйста принцип работы. И еще чуть не забыл что быстрее выполняется несколько запросов или очень сложный один с вложенными подзапросами? заранее благодарен...
|
#2
|
||||
|
||||
![]() Для начала есть два вида запросов, исполняемые - ничего обычно не возвращают, но что-то мудрое делают с данными. И второй вид - это как раз то что вас интересует. Для получения результат запрос должен начинаться с волшебного слова Select.
Результат выполнения этого запроса можно увидеть воспользовавшись например готовым компонентом TDBGrid, достаточно добавить промежуточный компонентик TDataSource который надо связать с вашим Query и гридом. Можно так-же самому ручками обрабатывать результат, примерно так: Код:
while not Query.Eof do begin ShowMessage(Query.FieldByName('Field1').asString); Query.Next; end; Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#3
|
|||
|
|||
![]() Перефразирую вопрос. Вобщем есть БД основных сущностей 3 и результат 4-й 1-я сущность это паспорт обекта состоит из 7 таблиц, 2-я сущность это неисправность этого обекта(это основные входные данные 1 таблица) 3 -я это нормы времени на устранение из 1таблицы. Задача посторить план работы на месяц. Условия выбора следующие у каждого замечания есть срок выполнения ,у каждого обекта есть группа рабочих, при построении плана нужно расчитать норму времени на каждое замечание если они повторяются то получить общее кол-во число работников не должно первышать к примеру 30 чел. на каждый день, исходя из полученного, разбросать работы на месяц не превышая срок устранения. Как я понимаю такой запрос в один не засунешь. По этому и спросил как работать с Query в таких случаях. Я пока как, использовать промежуточные таблицы способа не вижу. Но может есть другая технология для работы с промежуточными результатами?
|
#4
|
|||
|
|||
![]() 1. Данные находятся в памяти в виде рекордсета. Для доступа к данным текущей записи надо пользоваться Query1.Fields[Index].XXX, где Index - индекс поля, XXX - метод конвертации (AsInteger, AsString, AsTDateTime, etc). Еще можно обращаться по имени поля: Query1.FieldByName('FieldName').XXX.
2. Нет, дополнительно еще одним запросом обработать их нельзя, за исключением наложения разных фильтров, но это делается уже на киентской стороне. 3. Если тебе надо сложно обработать данные, то обычно для этого делается хранимая процедура на сервере. Или набор view. 4. Сравнительная скорость зависит от кол-ва передаваемой информации. На самом деле в большинстве случаев быстрее сложный запрос, если он правильно (оптимально) написан. |
#5
|
||||
|
||||
![]() Скорость исполнения запроса еще во многом зависит от правильных индексов, но все это имеет смысл обычно когда количество перелопачиваемых данных исчисляется миллионами.
Вообще оптимизация запроса - это настолько большая тема, что парой фраз тут не ограничится. Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#6
|
||||
|
||||
![]() Если речь идет об SQL-сервере, то для таких сложных выборок используются хранимки, которые позволяют выполнить ряд запросов и результат выполнения подать на выход в виде одной или группы записей.
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#7
|
|||
|
|||
![]() А каккой принцип их работы все выборки делать в одной процедуре или передовать результат к следующей а потом к следующей?
|
#8
|
|||
|
|||
![]() Программа предназначена для локального использования то есть на обной машине и клиент и сервер.
|