![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проблема с Locate в ADO... [D5, ADO]
grusty © (2003-08-29 17:34:00)
Уважаемые, помогите разобраться!
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 18:53:00) [1]
Да, возможно, дело именно в Delphi. Если я правильно помню, оно поля типа Decimal(18,2) переводит в TFloatField...
Странно, что проблема при переходе, а раньше все работало нормально. Там ADO никаких преобразований полей не делает?
Тогда остается только свой Locate писать.
Я с ADO никогда не работал, через 5 минут иду домой, так что sorry, дальше уже без меня.
grusty (2003-08-29 18:13:00) [2]
Так ведь в базе все хранится так как надо. Поле менял на числовое с плавающей запятой - тот же результат.
У меня программа работает с базами Paradox - никаких проблем. Решил перевести на ADO (дабы избавиться от BDE) - пошли сплошные проблемы. Мало того, что работать программа стала в более чем 2 раза медленнее, так еще и эти проблемы...
Sandman25 (2003-08-29 18:01:00) [3]
>Так что мне делать?
Мне приходят на ум 3 варианта:
1. Изменить тип данных в БД. Если нужны точные данные (типа денег или количества), то и хранить нужно точные данные.
2. Написать свой поиск (или свой locate), в котором проверять Abs(FieldByName(...).AsFloat - V) < Epsilon
3. Использовать FindNearest. Но тут я ничем помочь не могу - никогда не использовал. Может это даже и не то, что нужно.
grusty (2003-08-29 17:48:00) [4]
Так что мне делать? Вот так работает:
procedure Forma.ButtonClick(Sender: TObject);
var
v: String;
begin
v:="10.10";
if ADODataSet.Locate("Val",v,[]) then ShowMessage("Запись найдена!");
end;
Помогите!
Sandman25 (2003-08-29 17:35:00) [5]
Поле Val в БД имеет тип Decimal (Numeric)? Или что-то типа Float?
Вещественные числа не всегда представляются точно. 10.10 как раз из числа "неточных"