Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Помогите решить задачу про запрос [D6, IB6.x]


Страницы:   1 2

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]

Да в том то и дело, что если генерить текст запроса то задача на минуту =) т.е. просто бутылка =) Я так понимаю, что надо именно представить как это будет выглядеть в делфи, с открытием другого запроса и проч. Я правильно размышляю?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо