Форум: "Начинающим";
Текущий архив: 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.46 MB
Время: 0.005 c