|
|
|
Serggggg |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 136 Регистрация: 12.12.2003 Где: Донецк, Украина Репутация: нет Всего: нет |
Очень прошу помочь.
В программе есть возможность выборки за определённое число. SQL.Text запроса в конечном итоге выглядит так: select * from t_jrn_pn_reestr where to_date(dcreated,'dd.mm.yyyy')= to_date('20.01.2004','dd.mm.yyyy') order by npn_num В SQL Navigator'e все работает. А запрос Delphi (он же TQuery) не возвращает в Grid ничего. В чем может быть проблема? Спасибо. С уважением, Serggggg. --------------------
C уважением, Serggggg. |
|||
|
||||
Paradox |
|
|||
Эксперт Профиль Группа: Участник Сообщений: 1135 Регистрация: 18.11.2002 Где: Россия Репутация: нет Всего: 1 |
Ты после присваивания query.sql.text вызываешь query.Open или нет ?
Это сообщение отредактировал(а) Paradox - 20.1.2004, 15:07 -------------------- --- |
|||
|
||||
Serggggg |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 136 Регистрация: 12.12.2003 Где: Донецк, Украина Репутация: нет Всего: нет |
Я работаю со свойством Active
Cначала присваиваю ему False, потом задаю SQL.Text, а потом Active:=True; --------------------
C уважением, Serggggg. |
|||
|
||||
x77 |
|
|||
Эксперт Профиль Группа: Участник Клуба Сообщений: 1255 Регистрация: 25.3.2002 Репутация: 1 Всего: 22 |
ну, если исключить чеченский саботаж и вмешательство инопланетян, а также не настроенные гриды/датасорсы, то возможно дело в синтаксисе, который бде обрабатывает не так, как сам оракл. попробуй, например, ставить двойные кавычки.
но хотелось бы, конечно, увидеть участок кода полностью. -------------------- Я никогда не сопротивлялся искушению, поскольку узнал: что мне не нравится, то меня не искушает. © Джордж Бернард Шоу (Ирландия) |
|||
|
||||
Serggggg |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 136 Регистрация: 12.12.2003 Где: Донецк, Украина Репутация: нет Всего: нет |
Немного поясню - выборка по дате делается компонентом DateTimePicker - назовём его Date1.
А теперь привожу код, срабатывающий по нажатию кнопки: JRPNQuery.Active:=False; JRPNQuery.SQL.Text:='SELECT * FROM T_JRN_PN_REESTR WHERE ' + 'TO_DATE(DCREATED,' + #39 + 'DD.MM.YYYY' + #39 + ')=' + 'TO_DATE(' + #39 + DateToStr(Date1.Date) + #39 + ',' + #39 + 'DD.MM.YYYY' + #39 + ') ORDER BY NPN_NUM'; JRPNQuery.Active:=True; В итоге при вводе сегодняшнего числа имеем SELECT * FROM T_JRN_PN_REESTR WHERE TO_DATE(DCREATED,'DD.MM.YYYY')= TO_DATE('20.01.2004','DD.MM.YYYY') ORDER BY NPN_NUM #39 - это символ одинарной кавычки, который используется при формировании SQL-строки. С DataSource проблем нет - при замене TO_Date на To_Char все работает! Проблема лишь в том, что при использовании TO_Char запрос сравнивает не дату, а стринговые переменные и не всегда выдаёт верный результат. Особенно при поиске за период. --------------------
C уважением, Serggggg. |
|||
|
||||
x77 |
|
|||
Эксперт Профиль Группа: Участник Клуба Сообщений: 1255 Регистрация: 25.3.2002 Репутация: 1 Всего: 22 |
а если сравнить DCREATED с параметром напрямую? без всяких приведений?
-------------------- Я никогда не сопротивлялся искушению, поскольку узнал: что мне не нравится, то меня не искушает. © Джордж Бернард Шоу (Ирландия) |
|||
|
||||
Serggggg |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 136 Регистрация: 12.12.2003 Где: Донецк, Украина Репутация: нет Всего: нет |
В смысле, если сделать типа ниже описанного?
'... WHERE DREATED=' + #39 + DateToStr(Date1.Date) + #39 Пробовал! Тоже ничего. В самой БД (Oracle) вроде бы ничего не менялось! В компе формат даты настроен на dd.mm.yyyy. --------------------
C уважением, Serggggg. |
|||
|
||||
x77 |
|
|||
Эксперт Профиль Группа: Участник Клуба Сообщений: 1255 Регистрация: 25.3.2002 Репутация: 1 Всего: 22 |
попробуй объявить параметр (...WHERE DCREATED = ) и присваивать его через ParamByName ('D').AsDateTime := Date1.Date.
-------------------- Я никогда не сопротивлялся искушению, поскольку узнал: что мне не нравится, то меня не искушает. © Джордж Бернард Шоу (Ирландия) |
|||
|
||||
Serggggg |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 136 Регистрация: 12.12.2003 Где: Донецк, Украина Репутация: нет Всего: нет |
Ответ найден!
Оказывается, для каждой сессии дефолтовый формат даты не срабатывает (который прописан в конфиге Oracle). Поэтому после коннекта следовало выполнить всего лишь строку запроса ALTER SESSION SET NLS_DATE_FORMAT='DD.MM.YYYY' После ExecSQL всё заработало - теперь данные выбираются при помощи условия, в котором используется To_date! Может я даун, но никогда бы не подумал. Спасибо. С уважением, Serggggg --------------------
C уважением, Serggggg. |
|||
|
||||
Правила форума "Delphi: Базы данных и репортинг" | |
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами Обязательно указание: 1. Базы данных (Paradox, Oracle и т.п.) 2. Способа доступа (ADO, BDE и т.д.)
FAQ раздела лежит здесь! Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |