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

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

Проблема запроса с таблицы Paradox с помощью BDE LocalSQL [D6, Paradox]


Vovan69 ©   (2006-11-02 19:09:00) 

Есть таблица Paradox с полями D2, D1 типа TDate.

Следующий запрос работает неправильно:
SELECT * FROM Tablica
WHERE (D2-D1+1) = 5

т.е. выдаются записи, для которых D2-D1+1 = 7,6,8,...

Как добиться правильного вычитания между датами в запросе?


Asail   (2006-11-03 23:59:00) [1]


> ASoft   (03.11.06 16:01) [19]

Ага, я тоже проверил - работает. Что-то афтор не договаривает ...


ASoft   (2006-11-03 16:01:00) [2]

млин, специально проверил, все работает...и 4 и 5, запрос выбрал то что надо. Чудеса...
мож я в сабж не врубился?


Anatoly Podgoretsky   (2006-11-03 13:40:00) [3]

Теперь с 4 не работает.


Desdechado   (2006-11-03 13:35:00) [4]

WHERE D2-D1 = 4
зачем сбивать с толку преобразование типов добавлением левых чисел, если можно без них обойтись?


Anatoly Podgoretsky   (2006-11-03 13:26:00) [5]

> ЮЮ  (03.11.2006 10:46:14)  [14]

Конечно, они не причем, только как авторы данной бухгалтерии.


ASoft   (2006-11-03 10:58:00) [6]

WHERE (D2-D1)+1 = 5


ЮЮ   (2006-11-03 10:46:00) [7]

это только у евреев 39005.0 - 39000.0 = 5 ?


Anatoly Podgoretsky   (2006-11-03 10:42:00) [8]

> ASoft  (03.11.2006 10:38:11)  [11]

Да какая разница trunc или нет, он же утверждает, что запрос возвращает
записи не равные точно пяти. Или дурдом или тайная бухгалтерия.


Anatoly Podgoretsky   (2006-11-03 10:40:00) [9]

> ЮЮ  (03.11.2006 10:37:10)  [10]

> b.Data - o.Data = 5
> в SQL Explorer вернул только с Days = 5

Это насколько надо отвратительно написать интерпритатор, что фундаментальное
правило математики работало по еврейским правилам. Не верю я в это.


ASoft   (2006-11-03 10:38:00) [10]

WHERE (trunc(D2)-(trunc(D1)+1) = 5


ЮЮ   (2006-11-03 10:37:00) [11]

SELECT
 b.Data - o.Data Days, o.*, b.*
FROM
 Bills b
 JOIN Orders o ON b.OrderId = o.Id
WHERE
 b.Data - o.Data = 5

в SQL Explorer вернул только с Days = 5


ЮЮ   (2006-11-03 10:33:00) [12]

Выполни запрос в SQL Explorer.
Ибо в программе ты можешь наблюдать результаты далеко не того запроса :)


Anatoly Podgoretsky   (2006-11-03 10:31:00) [13]

> ЮЮ  (03.11.2006 10:26:07)  [7]

Истинно для любых значений не равных 5
Может и не люблю, но автор одназначно вешает нам не шею мучные изделия.


ЮЮ   (2006-11-03 10:26:00) [14]

Anatoly Podgoretsky ©   (03.11.06 10:19) [5]

Типа, для парадокса (D2-D1+1) = 5 истинно для любых значений D2 и D1
Все, конечно, знают о твоей нелюбви к Парадоксу, но не до такой же степени :)


Vovan69   (2006-11-03 10:24:00) [15]

Anatoly Podgoretsky ©   (03.11.06 10:19) [5]

:))
Других идей нет?


Anatoly Podgoretsky   (2006-11-03 10:19:00) [16]

> Vovan69  (03.11.2006 10:11:04)  [4]

Сменить СУБД на ту, в которой правильно работает оператор сравнения


Vovan69   (2006-11-03 10:11:00) [17]

Desdechado ©   (02.11.06 20:19) [3]

Вот весь код:

SELECT * FROM Tablica
WHERE (D2-D1+1) = 5

выдаются записи, для которых D2-D1+1 = 5 и D2-D1+1 <>5

P.S.: Выход конечно есть:) Например, добавить в таблицу поле Days (Integer), заполнить его значением D2-D1+1 и делать запросы по полю Days на здоровье. Но если нельзя добавлять поля в таблицу, что тогда делать с простыми арифметическими операциями над полями типа даты в тексте запроса??


Desdechado   (2006-11-02 20:19:00) [18]

> WHERE (D2-D1+1) = 5
> т.е. выдаются записи, для которых D2-D1+1 = 7,6,8,...
я че-то не понял, идет проверка на равенство пяти, а выдаются больше пяти?
код давай


Vovan69   (2006-11-02 19:27:00) [19]

Anatoly Podgoretsky ©   (02.11.06 19:22) [1]

Хорошо - Date.
Как добиться правильной работы запроса?


Anatoly Podgoretsky   (2006-11-02 19:22:00) [20]

> Vovan69  (02.11.2006 19:09:00)  [0]

В Парадоксе нет полей типа TDate


Наверх

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