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