Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2003.09.22;
Скачать: [xml.tar.bz2];

Вниз

Проблема с 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.01 c
7-71975
Шустрый
2003-07-05 13:24
2003.09.22
Надо выключить компьютер


1-71610
mfender
2003-09-09 04:05
2003.09.22
TIME_ZONE, или как определить сторону света.


14-71909
gn
2003-09-02 18:02
2003.09.22
КрИзИс


14-71887
uw
2003-08-29 11:19
2003.09.22
---|Ветка была без названия|---


9-71459
[Baradoo]
2003-03-20 22:48
2003.09.22
Налет хакеров на сервера от hotbox и mail





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский