|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
03.04.2013, 10:09 | #1 |
Форумчанин
Регистрация: 14.02.2013
Сообщений: 222
|
ADO и фильтрация вещественных чисел
Столкнулся с такой проблемой, ADOTable при фильтрации вещественных чисел абсолютность коряво фильтрует числа с запятой.
Если DecimalSeparator:='.'; то при фильтрации, но уже с точкой все ОК. А, да ADO коннектим с MSSQL. Сталкивался ли кто с этим, и есть ли корректное лечение? |
03.04.2013, 10:18 | #2 | |
Подтвердите свой е-майл
Регистрация: 29.08.2012
Сообщений: 4,011
|
Цитата:
|
|
03.04.2013, 10:29 | #3 |
Форумчанин
Регистрация: 14.02.2013
Сообщений: 222
|
А вот не надо меня поливать грязью, а возмите и проверьте, фильтрацию проведете через ADOTable1.Filter
Повторюсь данный феномен возникает при Если DecimalSeparator:=','; т.е. по умолчанию. |
03.04.2013, 11:09 | #4 |
Подтвердите свой е-майл
Регистрация: 29.08.2012
Сообщений: 4,011
|
По какому умолчанию?
вы бы прочитали как инициализируется этот самый DecimalSeparator. да и код показать не мешает, а то по звездам плохо гадается |
03.04.2013, 11:25 | #5 |
Форумчанин
Регистрация: 14.02.2013
Сообщений: 222
|
Какой код указывать, если нету вообще ничего, на форму накидано ADOConnection1, ADOTable1, DataSource1, DBGrid1 все соеденено и все отображается, но как только ADOTable1.Filter:='l_sqf = 2,8658' не выдает ни одного значения, хотя их 2, далее если так ADOTable1.Filter:='l_sqf = 2.8658' то все Ок, хотя это не совсем правильно. Ведь DecimalSeparator из системы берет запятую (проверено). Соответственно если значения фильтра целые или вообще относятся к др. не вещественным полям то все ОК. Могу картинки скинуть если надо..
|
03.04.2013, 11:41 | #6 |
Подтвердите свой е-майл
Регистрация: 29.08.2012
Сообщений: 4,011
|
да при чем тут ваш сепаратор? сепаратор он для чего?
вы когда в коде пишите вещественное число вы на сепаратор смотрите? а почему ? а почему тут смотрите? |
03.04.2013, 11:56 | #7 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
согласен с eval - сепаратор нужен только для преобразования числа из внутреннего представления (двоичное, со знаком, порядком и мантиссой) во внешнее и обратно.
Т.е. например, когда используете StrToFloat или FloatToStr, или когда выводите поле в грид - вот тогда этот разделитель нужен. видимо, при парсинге строчки в фильтре код написан так, что берётся всегда точка. (ну, точно так же, как поступает компилятор Delphi, когда Вы пишете x := 2.5; ) вот и всё, это и есть ответ на ваш вопрос... |
03.04.2013, 12:00 | #8 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
Добавлю ещё 3 копейки - фильтр на строгое равенство l_sqf = 2.8658 не обязательно отработает корректно из-за погрешностей преобразования в плавающий формат, даже если действительно такие данные есть в таблице.
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
03.04.2013, 12:17 | #9 |
Форумчанин
Регистрация: 14.02.2013
Сообщений: 222
|
Да я понимаю, что сепаратор нужен только для удобочитаемости соответствующей рассы.
А по поводу точки все понятно, хотя и уныло.... Если использовать DBGridEh (из EhLib) с фильтрацией, то в этом случае нужно уже жестко привязывать сепаратор к точке, иначе уже EhLib начинает ругаться на точку |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
фильтрация 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 |