Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Загадки Delphi [D7]


Страницы:   1 2 3

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]

С чего бы это Дельфи должна это понимать, это литерал и он должен соответсвовать синтаксису по литералам и региональным настройкам.


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо