Форум OlegON > Компьютеры и Программное обеспечение > Операционные системы и программное обеспечение > Программирование

Delphi 7 Неправильно выполняется скрипт ADOQuery : Программирование

29.03.2024 0:39


05.08.2014 13:13
Ринат
 
День добрый, пытаюсь выполнить простенький SQL скрипт в коде:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  dt1, dt2 : TDateTime;
begin
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add ('select SMCardSecurityLog.username as Оператор, Count(DISTINCT SMCardSecurityLog.article)AS Количество from SMCardSecurityLog where actioncode= :docstate and (eventtime between :date1 AND :date2) group by username');
dt1 := Trunc(DateTimePicker1.Date);
dt2 := Trunc(DateTimePicker2.Date);
ADOQuery1.Parameters.ParamByName('date1').Value:= dt1;
ADOQuery1.Parameters.ParamByName('date2').Value:= dt2;
ADOQuery1.Parameters.ParamByName('docstate').Value:=3;
ADOQuery1.Open;
end;

end.
В результате столбец "Количество" пустой, если делать запрос:
Код:
select * from SMCardSecurityLog
т.е без использования агрегатных функций SQL, запрос отрабатывает на отлично, но не так как надо
05.08.2014 13:16
OlegON
 
Как минимум - неявное приведение типов с датой. Любимая ошибка начинающих программеров.
05.08.2014 13:50
Ринат
 
Если исключить Distinct, count, SUM и тд запрос выдает верные данные - согласно фильтрации и параметрам, мне правда они не нужны....
05.08.2014 14:07
OlegON
 
Я сейчас не доберусь попробовать, а в SQL Plus полный запрос выдает требуемое?
05.08.2014 14:15
Ринат
 
Да сам запрос отлично работает уже пару месяцев, нашел проблему - не знаю только как решить))
В общем код и запрос рабочие, данные они возвращают, вот только чтобы посмотреть их надо 2 раза шелкнуть на строке в столбце количество, и так для каждой строки, одновременно показывает только одну строку. При том никаких настроек в Delphi я не трогал, только поставил и попробовал этот код...
05.08.2014 15:10
OlegON
 
Ну так заменить ADO на что-то нормальное, родное оракловое...
05.08.2014 15:17
Ринат
 
Ура, случайно наткнулся, поменял строку подключения, и все заработало как надо...
05.08.2014 18:31
OlegON
 
А строка подключения-то тут при чем? Что именно поправил?
На самом деле рекомендую еще раз присмотреться к тому, что написал ранее. ADO сильно медленнее работает, чем "родные" способы подключения.
И приведение типов где-нибудь рано или поздно вылезет.
05.08.2014 19:14
Ринат
 
Подключался через Родное подключение, создавал системный DSN (изначально для других целей) и через него подключался, когда сменил, и подключился через Microsoft OLE DB ORACLE все заработало нормально. Ну, мне для начала и так сойдет, учусь ток, все же сисадмин а не программер)))
05.08.2014 19:26
OlegON
 
Вот, как сисадмину рекомендую, не пользуйся ADO. Это еще верхушка айсберга глюков.
Часовой пояс GMT +3, время: 00:39.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.