Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
2-1156832936
evgenij_
2006-08-29 10:28
2006.09.17
С какой табл.работает ADOQuery


15-1156777577
Kerk
2006-08-28 19:06
2006.09.17
Мир


2-1156405706
Дырчик
2006-08-24 11:48
2006.09.17
ADO и dbf


5-1139812620
parovoZZ
2006-02-13 09:37
2006.09.17
TTreeView: освобождение памяти


2-1156831892
Edu1982
2006-08-29 10:11
2006.09.17
Delphi & MySQL





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский