Главная страница
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.011 c
2-1262820949
helluvaname
2010-01-07 02:35
2010.03.07
ошибка INSERT INTO


1-1238692057
SergN
2009-04-02 21:07
2010.03.07
Как узнать каким приложением занят файл


2-1261998166
citizen
2009-12-28 14:02
2010.03.07
Дескрипторы дочерних окон


11-1213003972
Kent
2008-06-09 13:32
2010.03.07
Как сохранить данные в dfm


2-1262182249
11223344
2009-12-30 17:10
2010.03.07
классы