powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / VFP9 вроде как баг с поиском/преобразованием
6 сообщений из 6, страница 1 из 1
VFP9 вроде как баг с поиском/преобразованием
    #32901983
BNick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Баг не совсем с поиском, скорее с преобразованием данных...
Короче, перевел приложение на VFP9 и пользователи стали жаловаться на то, что поиск "не всегда (!) ищет". Выяснилось вот что:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
CREATE CURSOR test (amnt y)
INDEX ON amnt TAG amnt
SET ORDER TO

INSERT INTO test VALUES( 1000 )
INSERT INTO test VALUES( 12345 . 67 )
INSERT INTO test VALUES( 5563 . 19 )

LOCATE FOR amnt =  1000 
?IIF(FOUND(),"Найдено","НЕ НАЙДЕНО")  && Найдено
LOCATE FOR amnt =  12345 . 67 
?IIF(FOUND(),"Найдено","НЕ НАЙДЕНО")  && Найдено
LOCATE FOR amnt =  5563 . 19 
?IIF(FOUND(),"Найдено","НЕ НАЙДЕНО")  && НЕ НАЙДЕНО (!!!)
LOCATE FOR amnt = $ 5563 . 19        && А так работает!
?IIF(FOUND(),"Найдено","НЕ НАЙДЕНО")  && Найдено
Под 8-кой все работает (скорее всего и под 7-кой, и под 6-кой - этой форме поиска много лет). Будьте бдительны, господа программисты, новая версия продукта MS! :)
...
Рейтинг: 0 / 0
VFP9 вроде как баг с поиском/преобразованием
    #32902112
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот не надо сравнивать разные типы данных .

В данном случае, ты сравниваешь тип данных Currency и тип данных Numeric. Последствия такого сравнения не всегда предсказуемые. Перед сравнение приводи данные к одному типу.

Т.е. тебе надо либо так:

LOCATE FOR amnt = NTOM(5563.19)

либо так:

LOCATE FOR ROUND(MTON(amnt),2) = 5563.19
...
Рейтинг: 0 / 0
VFP9 вроде как баг с поиском/преобразованием
    #32902130
Crip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2ВладимирМ
тут вы не совсем правы.

1. Без индекса все работает
2. В более младших версиях и с индексом все работает.

Во-первых почему вдруг неявное преобразование работать перестало и об этом никто не сообщил, во вторых почему без индекса работает, в третьих в таком случае надо ошибку "Data type mismatch" выдавать, а также записывать в Behavior Changes.
Баг на лицо!
...
Рейтинг: 0 / 0
VFP9 вроде как баг с поиском/преобразованием
    #32902206
leaf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да ладно брат просто нужно делать всё как положено а ?
и вообще тип currency не так хорош как кажеться
...
Рейтинг: 0 / 0
VFP9 вроде как баг с поиском/преобразованием
    #32902301
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В любой версии VFP вот такое сравнение

Код: plaintext
?NTOM( 268435456 . 4 ) =  268435456 . 4 

Вернет .F. И для большинства чисел после этой границы также стабильно будет возвращать .F.

Кстати, где-нибудь сказано, что можно явно сравнивать числа разных форматов? Преобразовывать - да. Но вот сравнивать?
...
Рейтинг: 0 / 0
VFP9 вроде как баг с поиском/преобразованием
    #32902695
BNick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 ВладимирМ
Я согласен, что сравнивать разные типы данных по меньшей мере "некрасиво", сам стараюсь этого избегать. Но, на мой взгляд "пострадавшей стороны" :), Crip также прав. Во всяком случае, укажи MS о таком изменении, ошибку я исправил бы гораздо быстрее.
И потом, при поиске должно использоваться неявное преобразование типов данных к одному типу, но нигде не описано (может, я просто не нашел?) по каким правилам выполняется такое преобразование. Вот для UNION эти правила отлично расписаны (См. Considerations for SQL SELECT Statements).
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / VFP9 вроде как баг с поиском/преобразованием
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]