Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 18.10.2010, 20:20
coolon coolon вне форума
Прохожий
 
Регистрация: 15.10.2010
Сообщения: 16
Репутация: 131
По умолчанию Объясните балбесу как это работает

Всем доброго времени суток. У меня конечно идиотский вопрос но задать надо. Я не могу понять как работать с компонентом Query после выполнения запроса. Непонятно где находятся данные. обясните дуралею. можно ли после выполнения 1го запроса обработать результат другим запросом. Или надо сохранить результат куда нибудь а только потом выполнять следующий. Вопрос возник потому при программировании программы надо несколько таких операций. Расскажите пожалуйста принцип работы. И еще чуть не забыл что быстрее выполняется несколько запросов или очень сложный один с вложенными подзапросами? заранее благодарен...
Ответить с цитированием
  #2  
Старый 18.10.2010, 20:41
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Для начала есть два вида запросов, исполняемые - ничего обычно не возвращают, но что-то мудрое делают с данными. И второй вид - это как раз то что вас интересует. Для получения результат запрос должен начинаться с волшебного слова Select.
Результат выполнения этого запроса можно увидеть воспользовавшись например готовым компонентом TDBGrid, достаточно добавить промежуточный компонентик TDataSource который надо связать с вашим Query и гридом. Можно так-же самому ручками обрабатывать результат, примерно так:
Код:
while not Query.Eof
do begin
    ShowMessage(Query.FieldByName('Field1').asString);
    Query.Next; 
    end;  
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #3  
Старый 18.10.2010, 20:59
coolon coolon вне форума
Прохожий
 
Регистрация: 15.10.2010
Сообщения: 16
Репутация: 131
По умолчанию

Перефразирую вопрос. Вобщем есть БД основных сущностей 3 и результат 4-й 1-я сущность это паспорт обекта состоит из 7 таблиц, 2-я сущность это неисправность этого обекта(это основные входные данные 1 таблица) 3 -я это нормы времени на устранение из 1таблицы. Задача посторить план работы на месяц. Условия выбора следующие у каждого замечания есть срок выполнения ,у каждого обекта есть группа рабочих, при построении плана нужно расчитать норму времени на каждое замечание если они повторяются то получить общее кол-во число работников не должно первышать к примеру 30 чел. на каждый день, исходя из полученного, разбросать работы на месяц не превышая срок устранения. Как я понимаю такой запрос в один не засунешь. По этому и спросил как работать с Query в таких случаях. Я пока как, использовать промежуточные таблицы способа не вижу. Но может есть другая технология для работы с промежуточными результатами?
Ответить с цитированием
  #4  
Старый 18.10.2010, 20:57
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,094
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

1. Данные находятся в памяти в виде рекордсета. Для доступа к данным текущей записи надо пользоваться Query1.Fields[Index].XXX, где Index - индекс поля, XXX - метод конвертации (AsInteger, AsString, AsTDateTime, etc). Еще можно обращаться по имени поля: Query1.FieldByName('FieldName').XXX.
2. Нет, дополнительно еще одним запросом обработать их нельзя, за исключением наложения разных фильтров, но это делается уже на киентской стороне.
3. Если тебе надо сложно обработать данные, то обычно для этого делается хранимая процедура на сервере. Или набор view.
4. Сравнительная скорость зависит от кол-ва передаваемой информации. На самом деле в большинстве случаев быстрее сложный запрос, если он правильно (оптимально) написан.
Ответить с цитированием
  #5  
Старый 18.10.2010, 21:01
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Скорость исполнения запроса еще во многом зависит от правильных индексов, но все это имеет смысл обычно когда количество перелопачиваемых данных исчисляется миллионами.
Вообще оптимизация запроса - это настолько большая тема, что парой фраз тут не ограничится.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #6  
Старый 18.10.2010, 21:05
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Если речь идет об SQL-сервере, то для таких сложных выборок используются хранимки, которые позволяют выполнить ряд запросов и результат выполнения подать на выход в виде одной или группы записей.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #7  
Старый 18.10.2010, 21:08
coolon coolon вне форума
Прохожий
 
Регистрация: 15.10.2010
Сообщения: 16
Репутация: 131
По умолчанию

А каккой принцип их работы все выборки делать в одной процедуре или передовать результат к следующей а потом к следующей?
Ответить с цитированием
  #8  
Старый 18.10.2010, 21:09
coolon coolon вне форума
Прохожий
 
Регистрация: 15.10.2010
Сообщения: 16
Репутация: 131
По умолчанию

Программа предназначена для локального использования то есть на обной машине и клиент и сервер.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 08:50.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025