![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Загадки Delphi [D7]
MaXie © (2006-12-17 16:44:00)Добрый день!
Окажите, плз, содействие в поиске ответа на следующий вопрос:
Есть компонент ADO_Query, в котором прописан следующий select:
select count(*) as flCount from some_table where flDateTime >= TO_DATE('16.12.2006 12:00:00', 'dd.mm.rrrr hh24:mi:ss')
Из текста запроса видно, что компонент взаимодействует с Оракловой таблицей. Все что необходимо получить, в ходе выполнения этого запроса - так это просто кол-во строк начиная с определенного момента времени. Все очень просто! :)
Выставляю свойство Active данного компонента в True, запускаю компиляцию - все проходит на ура! :)
Теперь меняю текст запроса на следующий:
select count(*) as flCount from some_table where flDateTime >= TO_DATE(:pmDateTime, 'dd.mm.rrrr hh24:mi:ss')
, т.е. заменяю постоянное выражение '16.12.2006 12:00:00' параметром pmDateTime. Далее для этого параметра выставляю дефолтовое значение(Value) 16.12.2006 12:00:00 - по-идее, ничего не изменилось! ;)
Опять выставляю свойство Active данного компонента в True, запускаю компиляцию - и на выходе получаю:
'ORA-00937: not a single-group group function'
Можете объяснить в чем "фокус" Delphi? ;)
sniknik (2006-12-17 22:14:00) [1]MaXie (17.12.06 20:43) [40]
...
> Результат: ORA-00937...
чудо, не иначе...
проверь еще в программе, по ссылке в sniknik © (17.12.06 18:09) [21], и все, окончательно уверую...
запрос/параметр(значение) задай там аналогично, только имя параметру покороче, там 9 символов на имя ограничение. там ошибка есть?
провайдера попробуй сменить, их обычно 2 бывает, мелкософта и "родной" (который устанавливается, и без которого и мелкософтский не работает)
MaXie (2006-12-17 20:58:00) [2]К сожалению, сегодня уже не смогу продожить данную ветвь общения. Буду благодарен за все последующие предложения, которые поступят.
Спасибо всем кто откликнулся...
MaXie (2006-12-17 20:43:00) [3]Создал форму. Кинул на нее два компонента ADOConnection и ADOQuery. Плюс кнопка. Для кнопки прописал событие:
procedure TForm3.Button1Click(Sender: TObject);
begin
try
TADODataSet(quGetCount_ADO).CommandText:= 'select count(*) as flCount from cpa_cdr where strt >= :pmDateTime';
quGetCount_ADO.Parameters.ParamByName('pmDateTime').Value := StrToDateTime('12.12.2006 12:00:00');
quGetCount_ADO.Open;
except
ShowMessage('Не проходит!');
end;
end;
Результат: ORA-00937...
sniknik (2006-12-17 20:02:00) [4]блин, FindParam замени на ParamByName, а то будет ошибка и даже не узнаеш о ней.
sniknik (2006-12-17 20:00:00) [5]> Что еще необходимо для более точного описания проблемы/ситуации?
достаточно, а тепер без извратов, создай приложение в нем пустую форму с единственной кнопкой, датамодуль (или просто на форму кинь) с TADOConnection и (да черт сним) с TADOQuery БЕЗ ВСЯКИХ ПЕРЕКРЫТИЙ в событии по кнопке пропиши свои показанные действия (можно даже запрос присваивать тут же, перед внесением параметра)...
procedure TForm1.onButton1Click(sender: TComponent);
begin
TADODataSet(quGetCount_ADO).CommandText:= 'select count(*) as flCount from some_table where flDateTime>=:pmDateTime';
quGetCount_ADO.Parameters.FindParam('pmDateTime').Value := StrToDateTime('12.12.2006 12:00:00');
quGetCount_ADO.Open;
end;
ошибка есть?
MaXie (2006-12-17 19:40:00) [6]type
TDM_Oracle = class(TDataModule)
oraConnection_ADO: TADOConnection;
quGetCount_ADO: TADOQuery;
...
constructor Create(AOwner: TComponent); override;
ну и т.д.
Новичек (2006-12-17 19:36:00) [7]Вопрос снят. Думаю дальше.
MaXie (2006-12-17 19:34:00) [8]To Desdechado
Сразу оговорюсь - все ниже сказанное относится к действиям в Object Inspector.
К сожалению, в списке доступных типов поля DateType параметра pmDateTime нет указанного тобой типа ftSQLTimeStamp. Есть ftORATimeStamp(догадываюсь, что это связано с выбором типа Provider'а). Пробую указать данный тип. Получаю ошибку:
Arguments are of the wrong type, are out of acceptable range, or are in conflict with one another.
Новичек (2006-12-17 19:28:00) [9]Тогда, наверное, в этом модуле лежит TADOQuery. А где он создается?
MaXie (2006-12-17 19:24:00) [10]To Desdechado
Согласен, но сейчас уже "не суть вопроса" - лишь бы заработало.
Сейчас попробую поменять тип параметра.
To Новичек
Да, верно. Это класс потомок от класса TDataModule.
Новичек (2006-12-17 19:21:00) [11]Что-то не догоняю: TDM_Oracle - это DataModule?
Desdechado (2006-12-17 19:21:00) [12]зачем конструктор перегружать, не проще ли событие создания отработать?
может, стоит попробовать не ftDateTime, а ftSQLTimeStamp?
твой вариант преобразования строки в дату может вызвать ошибку на других локалях...
MaXie (2006-12-17 19:09:00) [13]Копирую значение поля SQL объекта TADOQuery из Object Inspector:
select count(*) as flCount from cpa_cdr where strt >= :pmDateTime
В том же самом Object Inspector для параметра pmDateTime выставляю значение поля DateType в ftDateTime.
Далее, перегружаю конструктор модуля:
constructor TDM_Oracle.Create(AOwner: TComponent);
begin
Inherited Create(AOwner);
quGetCount_ADO.Parameters.FindParam('pmDateTime').Value := StrToDateTime('12.12.2006 12:00:00');
quGetCount_ADO.Active := True;
end;
Запускаю на компиляцию и получаю Debugger Exception Notification уже всем известную ошибку.
Что еще необходимо для более точного описания проблемы/ситуации?
sniknik (2006-12-17 18:55:00) [14]> А есть возможность привести фрагмент кода?
я б не стал... после того как ты усиленно скрывал свой, у меня начались подозрения что это незаконно, код приводить, еще неприятности будут...
;)
да и попросту из любопытства.... т.к. как только тебе дадут "готовый рецепт" ты "смоешься" и мы не узнаем в чем же там тебя "глючило".
Новичек © (17.12.06 18:50) [28]
это ты описательные часть сравниваешь? ;о)) они никогда не отличаются и всегда все все делают правильно, но вот только у когото не работает... и естественно виноват другой, дельфи например, только не автор.
Новичек (2006-12-17 18:50:00) [15]Если это вопрос ко мне, то мой код ничем не отличается от Вашего, за исключением имен переменных.
Desdechado (2006-12-17 18:47:00) [16]MaXie (17.12.06 18:44) [26]
> А есть возможность привести фрагмент кода?
тебе уже 20 постов об этом говорят
MaXie (2006-12-17 18:44:00) [17]А есть возможность привести фрагмент кода?
Новичек (2006-12-17 18:40:00) [18]Странно, у меня все работает... Что-то у Вас, сударь, не то с ADO...
MaXie (2006-12-17 18:20:00) [19]To Anatoly Podgoretsky
Проверил - региональным настройкам ОС введенные мной через пробел дата и время соответствуют.
Anatoly Podgoretsky (2006-12-17 18:12:00) [20]> MaXie (17.12.2006 18:00:19) [19]
С чего бы это Дельфи должна это понимать, это литерал и он должен соответсвовать синтаксису по литералам и региональным настройкам.