![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Помогите решить задачу про запрос [D6, IB6.x]
kotbazilio © (2006-08-31 15:10:00)Существует 2 настроенных на подключения запроса типа TQuery
q_clients и q_accounts.
q_clients уже готов к выполнению (но не открыт)
и дает небольшое количество лицевых счетов (поле ID).
Проверка на нулевое количество абонентов не нужна.
Необходимо написать код генерации SQL запроса компонента q_accounts -
выбрать счета (таблица ACCOUNTS) абонентов (лицевые счета в поле CLIENT).
Запрос q_accounts может быть открытым и иметь старый текст запроса.
В построении SQL запроса использовать конструкцию "in"
Anton_ (2006-09-01 10:56:00) [1]
> ЗЫ. Какой дебил учит всех пользоваться CLEAR + ADD при заполнении
> текста запроса ?
Ну, учитывая, что метод ADD есть, значит, иногда и он полезен.
Раз есть - пользуются.
P.S.
Один раз столкнулся с тем, что, назначив элементу содержимое через текст, получил неправильное количество строк в следующем операторе. Причем, при отладке по шагам все тип топ, а при выполнении на лету глючило. Вставил задержку после присвоения в качестве эксперимента - помогло. Вот такие пироги...
Anton_ (2006-09-01 10:45:00) [2]Нажав добавить - не увидел результата и попробовал второй раз.
Удалите, пожалуйста, дубль
Anton_ (2006-09-01 10:41:00) [3]Запрос q_clients имеет сложный вид, скажем, с подзапросами и параметрами.
Т.к. текст его не дан - нельзя вставлять его подзапросом.
Думайте, kotbazilio.
Доопределение задачи в свою пользу нельзя назвать явной ошибкой,
но при реальной работе, к сожалению этого делать нельзя и надо исходить из худшего.
Цель задания - выяснить способность работать с результатом запроса.
Само задание простое, ориентированное на выполнение за минуту, не отходя от спрашивающего, как и остальные задания.
Прочитайте книгу по Delphi, наконец...
Найдите другой способ, не критичный к конкретному содержимому
q_clients.SQL
Anton_ (2006-09-01 10:41:00) [4]Запрос q_clients имеет сложный вид, скажем, с подзапросами и параметрами.
Т.к. текст его не дан - нельзя вставлять его подзапросом.
Думайте, kotbazilio.
Доопределение задачи в свою пользу нельзя назвать явной ошибкой,
но при реальной работе, к сожалению этого делать нельзя и надо исходить из худшего.
Цель задания - выяснить способность работать с результатом запроса.
Само задание простое, ориентированное на выполнение за минуту, не отходя от спрашивающего, как и остальные задания.
Прочитайте книгу по Delphi, наконец...
Найдите другой способ, не критичный к конкретному содержимому
q_clients.SQL
Sergey13 (2006-09-01 09:52:00) [5]> [18] kotbazilio (31.08.06 17:07)
> q_clients.Open;
В данном контексте лишнее.
ANB (2006-09-01 09:23:00) [6]
> kotbazilio (31.08.06 17:07) [18]
хотя если первый запрос имеет вид select ID from clients where . . ., то и твой вариант прокатит. Непонятно только, нафига догда q_clients то нужен ?
ANB (2006-09-01 09:21:00) [7]
> kotbazilio (31.08.06 17:07) [18]
1. Открыть первый запрос
2. Пройти по нему циклом и записать значения ID счетов в строку через запятые.
3. q_accounts.SQL.text := 'select * from accounts where client in ('+String_ID_List+’)’;
ЗЫ. Какой дебил учит всех пользоваться CLEAR + ADD при заполнении текста запроса ?
kotbazilio (2006-08-31 17:07:00) [8]Наверное совсем точно по условию будет сделать так:
q_account.Close;
q_accounts.SQL.Clear;
q_clients.Open;
q_accounts.SQL.Add := 'select * from accounts where client in ('+q_clients.SQL.text+’)’;
q_accounts.Open;
kotbazilio (2006-08-31 17:03:00) [9]он возвращает одно поле id по условию, они же лицевые счета
Sergey13 (2006-08-31 16:59:00) [10]> [15] kotbazilio (31.08.06 16:57)
> а что там должно быть?
Ты у меня спрашиваешь?
> По условию там некий запрос, который выдает лицевые счета
С "неким" запросом можно и ошибку поиметь, если он возвращает не одно поле.
kotbazilio (2006-08-31 16:57:00) [11]а что там должно быть? По условию там некий запрос, который выдает лицевые счета
Sergey13 (2006-08-31 16:50:00) [12]> [13] kotbazilio (31.08.06 16:48)
Смотря что в q_clients.SQL.text
kotbazilio (2006-08-31 16:48:00) [13]Ну если в итоге написать готовый код решения задачи, то наверное он будет выглядеть так:
q_accounts.SQL.Clear;
q_accounts.SQL.Add := 'select * from accounts where client in ('+q_clients.SQL.text+’)’;
Sergey13 (2006-08-31 16:33:00) [14]> [11] Sergey13 © (31.08.06 16:32)
Select * конечно all вроде не пройдет.
Sergey13 (2006-08-31 16:32:00) [15]> [10] kotbazilio (31.08.06 16:26)
А что у тебя в q_clients. SQL.text?
Вообще должно получится примерно такое
select all from accounts where client_id in (select id from clients where ....)
kotbazilio (2006-08-31 16:26:00) [16]q_accounts.text := 'select all from accounts where client in '+q_clients.text;
так?
Sergey13 (2006-08-31 16:22:00) [17]> [8] kotbazilio (31.08.06 16:18)
Что-бы что-то написать (рабочее), надо сначала что-то прочитать (толковое).
> q_accounts := 'select all from accounts where client in '+q_clients.open;
Твой сервер ничего не знает про твой q_clients и уж тем более не сможет его открыть.
Надо в текст запросаq_accounts вставить текст запроса q_clients в виде подзапроса.
kotbazilio (2006-08-31 16:18:00) [18]Т.е. ты думаешь, что надо просто написать что-то типа
q_accounts := 'select all from accounts where client in '+q_clients.open;
ANB (2006-08-31 15:48:00) [19]
> kotbazilio (31.08.06 15:22) [6]
За минуту никак не успеть : 2 минуты открывается делфи, минуты 4 набираю код (я печатаю медленно), потом еще прогнать для очистки совести . . .
> с открытием другого запроса
q_clients.open; - это бесплатно :)
kotbazilio (2006-08-31 15:22:00) [20]Да в том то и дело, что если генерить текст запроса то задача на минуту =) т.е. просто бутылка =) Я так понимаю, что надо именно представить как это будет выглядеть в делфи, с открытием другого запроса и проч. Я правильно размышляю?