Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.09.17;
Скачать: CL | DM;

Вниз

Помогите решить задачу про запрос   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.027 c
15-1156513630
Алхимик
2006-08-25 17:47
2006.09.17
Режим ввода T9 - приколы


3-1152568889
the_kola
2006-07-11 02:01
2006.09.17
Пустая БД Access


3-1152100600
leha
2006-07-05 15:56
2006.09.17
расшиоение "gtd"


2-1156694710
rentner
2006-08-27 20:05
2006.09.17
Двойная строка в DBGrid


3-1152249567
oji
2006-07-07 09:19
2006.09.17
Копия подчиненных записей