Главная страница
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.015 c
2-1262284745
Zimmin
2009-12-31 21:39
2010.03.07
Как упростить ввод повторяющихся записей? ADO+Access


2-1262610112
Sunktor
2010-01-04 16:01
2010.03.07
Нужно разделить главное окно на несколько функциональных частей


2-1262083308
citizen
2009-12-29 13:41
2010.03.07
Непрерывная слежка за событием


15-1261471578
StriderMan
2009-12-22 11:46
2010.03.07
if Value = True then


2-1262706738
Zalm
2010-01-05 18:52
2010.03.07
Работа с IStorage