Главная страница
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.014 c
15-1261522440
Германн
2009-12-23 01:54
2010.03.07
Static IP. Чем он(о) опасен?


15-1261517422
Юрий
2009-12-23 00:30
2010.03.07
С днем рождения ! 23 декабря 2009 среда


15-1261061893
Kerk
2009-12-17 17:58
2010.03.07
Wasserman Daily


1-1239276932
HandBrake
2009-04-09 15:35
2010.03.07
Enter вместо Tab / Delphi 2007


2-1261733510
2expres
2009-12-25 12:31
2010.03.07
Mediaplayer