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

Вниз

Странная работа ADOQuery   Найти похожие ветки 

 
pavel_guzhanov ©   (2010-01-06 22:35) [0]

делаю запрос к базе данных

       ADOQOPSMoney.Close;
       ADOQOpsMoney.SQL.Clear;
       ADOQOPSMoney.SQL.Add("select sum(tr_sum) as summa1 from npf_transaction where tr_doc_nnn in (");
       ADOQOPSMoney.SQL.Add("select doc_nnn from npf_document where");
       ADOQOPSMoney.SQL.Add("tr_acc_nnn=(");
       ADOQOPSMoney.SQL.Add("select acc_nnn from npf_account where acc_cli_nnn= (");
       ADOQOPSMoney.SQL.Add("select con_cli_nnn from npf_contract where con_number="""+sn+""")))");
       ADOQOPSMoney.SQL.Add("and tr_date<""01.01.2009""");
       ADOQOPSMoney.Open;

Перед тем, как сделать подобное, sn передавал как параметр, но результат тот же. Запрс возвращает 0, хотя, если я выполняю этот же запрос в SQLDeveloper, подставляя значение параметра тоже самое, которое вижу в Delphi при отладке, то запрос возвращает ненулевое значение. При просмотре свойства SQL.Text вижу правильный запрос.

От чего еще может быть такое, что результат получается нулевой?


 
pavel_guzhanov ©   (2010-01-06 22:39) [1]

При создании ветки поставил галку, что база данных - Oracle, но в заголовке вветки это почему-то не показано...


 
Anatoly Podgoretsky ©   (2010-01-06 23:20) [2]

Ну и какой текст?
Кроме того нельзя такой запрос назвать правильным, когда в нем используются литералы в виде дат.


 
Anatoly Podgoretsky ©   (2010-01-06 23:21) [3]

И что дает выполнение каждого из четырех запросов по отдельности?


 
Palladin ©   (2010-01-06 23:24) [4]

какого типа tr_sum и как ты его получаешь?


 
pavel_guzhanov ©   (2010-01-07 11:02) [5]

Запрос исправил следующим образом:
       ADOQOPSMoney.SQL.Add("select sum(tr_sum) as summa1 from npf_transaction where ");
       ADOQOPSMoney.SQL.Add("tr_acc_nnn=(");
       ADOQOPSMoney.SQL.Add("select acc_nnn from npf_account where acc_cli_nnn= (");
       ADOQOPSMoney.SQL.Add("select con_cli_nnn from npf_contract where con_number="""+sn+"""))");
       ADOQOPSMoney.SQL.Add("and tr_date<""01.01.2009""");


По частям:
select con_cli_nnn from npf_contract where con_number="""+sn+""" - возвращает ID клиента, связаного с договором  sn

select acc_nnn from npf_account where acc_cli_nnn= - возвращает ID счета выбранного клиента

select sum(tr_sum)  from npf_transaction where tr_acc_nnn= - возвращает сумму по всем транзакциям по данному счету. Дата в конце общего запроса ограничивает количество суммируемых транзакций

Тип поля  tr_sum - number

Это ответы на наводящие вопросы :о))

Теперь как решилась проблема:

ADOQOPSMoney.SQL.Add("select sum(tr_sum) as summa1 from npf_transaction where ");
   ADOQOPSMoney.SQL.Add("tr_acc_nnn=(");
   ADOQOPSMoney.SQL.Add("select acc_nnn from npf_account where acc_cli_nnn= (");
   ADOQOPSMoney.SQL.Add("select con_cli_nnn from npf_contract where con_number=:s))");
   ADOQOPSMoney.SQL.Add("and tr_date<:d");
   ADOQOPSMoney.Parameters[1].Value:=StrToDate("01.01.2009");


Вот так все работает!

Спасибо за помощь всем, особенно дяде Толе вот за эту фразу:


> нельзя такой запрос назвать правильным, когда в нем используются
> литералы в виде дат.



Страницы: 1 вся ветка

Текущий архив: 2010.03.07;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.012 c
11-1213110210
!Pharaon!
2008-06-10 19:03
2010.03.07
Следующий элемент в List Box


15-1261561398
vv_fran
2009-12-23 12:43
2010.03.07
Нагрузка на проц от Delphi 7 в Win2003 Server


15-1261465203
MonoLife
2009-12-22 10:00
2010.03.07
Кто-нибудь пользуется yahoo почтой?


15-1261517113
Petr V. Abramov
2009-12-23 00:25
2010.03.07
Книжка Шкловского


2-1262528631
Антон К.
2010-01-03 17:23
2010.03.07
Как заполнить поля в определенном фрейме?