Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.09.22;
Скачать: CL | DM;

Вниз

Проблема с Locate в ADO...   Найти похожие ветки 

 
grusty   (2003-08-29 17:34) [0]

Уважаемые, помогите разобраться!

procedure Forma.ButtonClick(Sender: TObject);
var
v: Currency;
begin
v:=10.10;
if ADODataSet.Locate("Val",v,[]) then ShowMessage("Запись найдена!");
end;

В базе ADODataSet поле Val – денежное.
Ну не хочет работать – хоть убей. Тоже самое с базами Paradox работает без проблем.
Что делать?


 
Sandman25   (2003-08-29 17:35) [1]

Поле Val в БД имеет тип Decimal (Numeric)? Или что-то типа Float?

Вещественные числа не всегда представляются точно. 10.10 как раз из числа "неточных"


 
grusty   (2003-08-29 17:48) [2]

Так что мне делать? Вот так работает:

procedure Forma.ButtonClick(Sender: TObject);
var
v: String;
begin
v:="10.10";
if ADODataSet.Locate("Val",v,[]) then ShowMessage("Запись найдена!");
end;

Помогите!


 
Sandman25   (2003-08-29 18:01) [3]

>Так что мне делать?

Мне приходят на ум 3 варианта:
1. Изменить тип данных в БД. Если нужны точные данные (типа денег или количества), то и хранить нужно точные данные.
2. Написать свой поиск (или свой locate), в котором проверять Abs(FieldByName(...).AsFloat - V) < Epsilon
3. Использовать FindNearest. Но тут я ничем помочь не могу - никогда не использовал. Может это даже и не то, что нужно.


 
grusty   (2003-08-29 18:13) [4]

Так ведь в базе все хранится так как надо. Поле менял на числовое с плавающей запятой - тот же результат.

У меня программа работает с базами Paradox - никаких проблем. Решил перевести на ADO (дабы избавиться от BDE) - пошли сплошные проблемы. Мало того, что работать программа стала в более чем 2 раза медленнее, так еще и эти проблемы...


 
Sandman25   (2003-08-29 18:53) [5]

Да, возможно, дело именно в Delphi. Если я правильно помню, оно поля типа Decimal(18,2) переводит в TFloatField...
Странно, что проблема при переходе, а раньше все работало нормально. Там ADO никаких преобразований полей не делает?
Тогда остается только свой Locate писать.
Я с ADO никогда не работал, через 5 минут иду домой, так что sorry, дальше уже без меня.



Страницы: 1 вся ветка

Текущий архив: 2003.09.22;
Скачать: CL | DM;

Наверх




Память: 0.45 MB
Время: 0.01 c
14-71896
DiamondShark
2003-09-04 17:53
2003.09.22
The Assignment


14-71904
unlx
2003-09-03 13:13
2003.09.22
Простая система офисной почты для локальной сети


4-72005
-Shurik-
2003-07-18 13:17
2003.09.22
Перехват оконных сообщений


1-71606
AndreyAs
2003-09-11 15:16
2003.09.22
некорректная работа PopupMenu в трее


3-71499
Russko
2003-09-01 09:38
2003.09.22
На конце 0





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский