Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2010.03.07;
Скачать: [xml.tar.bz2];

Вниз

Странная работа 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.005 c
15-1261271160
Игорь Шевченко
2009-12-20 04:06
2010.03.07
К вопросу о локализации среды


3-1235981052
Sergey2
2009-03-02 11:04
2010.03.07
Связать 2 таблицы


15-1260399563
wl
2009-12-10 01:59
2010.03.07
Линукс - зачем?


2-1262455962
antonn
2010-01-02 21:12
2010.03.07
из регулярной процедуры в экземпляр класса


2-1262773465
NewZ
2010-01-06 13:24
2010.03.07
Рабочий стол Windows.





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский