Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.04.2013, 10:09   #1
netpolice
Форумчанин
 
Аватар для netpolice
 
Регистрация: 14.02.2013
Сообщений: 222
По умолчанию ADO и фильтрация вещественных чисел

Столкнулся с такой проблемой, ADOTable при фильтрации вещественных чисел абсолютность коряво фильтрует числа с запятой.

Если DecimalSeparator:='.'; то при фильтрации, но уже с точкой все ОК.

А, да ADO коннектим с MSSQL.

Сталкивался ли кто с этим, и есть ли корректное лечение?
netpolice вне форума Ответить с цитированием
Старый 03.04.2013, 10:18   #2
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

Цитата:
Сталкивался ли кто с этим, и есть ли корректное лечение?
никто не сталкивался, т.к. там все правильно фильтрует и вещественные и нет и черта лысого тоже правильно.
eval вне форума Ответить с цитированием
Старый 03.04.2013, 10:29   #3
netpolice
Форумчанин
 
Аватар для netpolice
 
Регистрация: 14.02.2013
Сообщений: 222
По умолчанию

А вот не надо меня поливать грязью, а возмите и проверьте, фильтрацию проведете через ADOTable1.Filter

Повторюсь данный феномен возникает при Если DecimalSeparator:=',';
т.е. по умолчанию.
netpolice вне форума Ответить с цитированием
Старый 03.04.2013, 11:09   #4
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

По какому умолчанию?
вы бы прочитали как инициализируется этот самый DecimalSeparator.
да и код показать не мешает, а то по звездам плохо гадается
eval вне форума Ответить с цитированием
Старый 03.04.2013, 11:25   #5
netpolice
Форумчанин
 
Аватар для netpolice
 
Регистрация: 14.02.2013
Сообщений: 222
По умолчанию

Какой код указывать, если нету вообще ничего, на форму накидано ADOConnection1, ADOTable1, DataSource1, DBGrid1 все соеденено и все отображается, но как только ADOTable1.Filter:='l_sqf = 2,8658' не выдает ни одного значения, хотя их 2, далее если так ADOTable1.Filter:='l_sqf = 2.8658' то все Ок, хотя это не совсем правильно. Ведь DecimalSeparator из системы берет запятую (проверено). Соответственно если значения фильтра целые или вообще относятся к др. не вещественным полям то все ОК. Могу картинки скинуть если надо..
netpolice вне форума Ответить с цитированием
Старый 03.04.2013, 11:41   #6
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

да при чем тут ваш сепаратор? сепаратор он для чего?
вы когда в коде пишите вещественное число вы на сепаратор смотрите? а почему ?
а почему тут смотрите?
eval вне форума Ответить с цитированием
Старый 03.04.2013, 11:56   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

согласен с eval - сепаратор нужен только для преобразования числа из внутреннего представления (двоичное, со знаком, порядком и мантиссой) во внешнее и обратно.
Т.е. например, когда используете StrToFloat или FloatToStr, или когда выводите поле в грид - вот тогда этот разделитель нужен.
видимо, при парсинге строчки в фильтре код написан так, что берётся всегда точка. (ну, точно так же, как поступает компилятор Delphi, когда Вы пишете x := 2.5; )
вот и всё, это и есть ответ на ваш вопрос...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 03.04.2013, 12:00   #8
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Добавлю ещё 3 копейки - фильтр на строгое равенство l_sqf = 2.8658 не обязательно отработает корректно из-за погрешностей преобразования в плавающий формат, даже если действительно такие данные есть в таблице.
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 03.04.2013, 12:17   #9
netpolice
Форумчанин
 
Аватар для netpolice
 
Регистрация: 14.02.2013
Сообщений: 222
По умолчанию

Да я понимаю, что сепаратор нужен только для удобочитаемости соответствующей рассы.

А по поводу точки все понятно, хотя и уныло.... Если использовать DBGridEh (из EhLib) с фильтрацией, то в этом случае нужно уже жестко привязывать сепаратор к точке, иначе уже EhLib начинает ругаться на точку
netpolice вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
фильтрация ADO SQL JennySchecter БД в Delphi 10 19.03.2012 23:03
Дана последовательность вещественных чисел. каждая пара чисел задает границы отрезка. Найти количество целых чисел на отрезках 'studentka' Помощь студентам 6 30.11.2011 18:35
Дано n вещественных чисел а1, а2,…,аn. Определите число соседств двух чисел разного знака (Паскаль) bambam Помощь студентам 1 29.11.2011 11:36
Фильтрация по дате в ADO AlexSol.BY Помощь студентам 5 07.12.2010 10:32
Фильтрация и ADO Derius БД в Delphi 33 22.05.2010 15:15