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

Вниз

При вводе ключевого поля не отображаются некоторые лукапные поля   Найти похожие ветки 

 
alextov   (2003-12-29 15:28) [0]

Наблюдается такой интересный глючок.

Есть таблица с товарами (код товара, название товара) - TableTovari, таблица с заказами(код товара, количество, и тд) - TableZakazi. Поле "Название товара" в TableZakazi - лукапное и связывается с TableTovari по полю "Код товара".
То есть при новом заказе я вбиваю код товара в поле "Код товара" таблицы заказов и по Enter в лукапном поле появляется название товара. Ситуация то в общем стандартная.
Но на некоторые дробные коды (типа 69.1) название товара не подтягивается, как-будто такого товара вообще нет в таблице товаров. Причем записи в таблице товаров (те которые отображаются нормально и те которые не подхватываются) практически идентичны.

Никто не подскажет в чем может быть проблема ?


 
Stas ©   (2003-12-29 15:30) [1]

Возможно у тебя тип поля Float и получается вместо 69.1 69.099999999 или что-то в этом роде. Попробуй соединять округленные поля.


 
alextov   (2003-12-29 15:52) [2]

У меня действительно тип поля TFloat и коды товаров не всегда целые - соответственно задать тип поля как ftInteger я не могу. Но как окрулять поля до 1-го знака после запятой? Я так понимаю округлять значение можно на OnGetText и OnSetText, но этапе связывания таблиц данный метод неприемлим. :(((


 
Stas ©   (2003-12-29 15:54) [3]

А какая у тебя СУБД ?


 
Johnmen ©   (2003-12-29 15:55) [4]

>alextov

Для данного случая в обязательном порядке д.б. суррогатные целочисленные ключевые поля. Почитай про организацию ссылочной целостности...


 
alextov   (2003-12-29 16:01) [5]

Oracle8


 
Stas ©   (2003-12-29 16:05) [6]

У тебя в Oracle должна быть функция округления.
в MS SQL так Select Field1,...,ROUND (KEYFIELD,1) from ...
у тебя должно быть что-то похожее.
Я так делал и все работает 100%


 
alextov   (2003-12-29 16:12) [7]

Логично, я правда сейчас пользуюсь TTable, туда select не запишешь. Но перейти на TQuery не проблема. Спасибо ща попробую.


 
Stas ©   (2003-12-29 16:33) [8]

Для таких БД как ORACLE TTABLE лучше не использовать и BDE наверное тоже.


 
alextov   (2003-12-29 17:16) [9]

да я и не использую...
пользуюсь набором компонент прямого доступа ODAC, а писал TTable, чтоб проще для восприятия было


 
alextov   (2003-12-29 17:23) [10]

не хочет, собака !!!
Поменял oба TOraTable на TOraQuery написал в запросе
select round(id,1) from tovari
То есть уже должно выбирать в QueryTovari значение поля id округленное до 1 цифры после запятой...., ввожу тоже вроде 69.1 (а не 69.09999)....должно одно равняться другому , а не хочет , зараза


 
Sandman25 ©   (2003-12-29 17:39) [11]

[10] alextov (29.12.03 17:23)

Замените FLOAT на DECIMAL(10,1)


 
alextov   (2003-12-30 11:46) [12]

не совсем понял где заменить?
Если в базе то у меня там изначально тип поля был определен как
NUMBER(8,1), что по моему разумению где-то одинаково.


 
Anatoly Podgoretsky ©   (2003-12-30 11:53) [13]

alextov (30.12.03 11:46) [12]
Необязательно, зависит от СУБД, но как правило NUMBER это float(double), а DECIMAL BCD, но не обязательно, это авторы решают


 
alextov   (2003-12-30 12:08) [14]

Поменял тип поля на DECIMAL(8,2) но это не помогло.
Может еще и TOraQuery поменять тип поля на ftBCD&


 
Sandman25 ©   (2003-12-30 12:43) [15]

[14] alextov (30.12.03 12:08)

Естественно, надо поменять. Иначе Delphi перегоняет обратно во Float.


 
alextov   (2003-12-30 14:40) [16]

После того как поменял тип поля в Query на TBCDField
при открытии Query начала вылетать ошибка
Type mismatch for field "Field1" expecting BCD , actual Float


 
Sandman25 ©   (2003-12-30 16:22) [17]

В базе поменять на DEC не забыли?


 
alextov   (2003-12-30 16:29) [18]

поменял см [14]


 
Sandman25 ©   (2003-12-30 16:39) [19]

[18] alextov (30.12.03 16:29)

Значит, это проблема TOraQuery, который преобразует BCD в Float.
Я использовал такой подход с TQuery и с TSQLQuery и такого сообщения не было. Или Вы в select еще к полю что-то добавляете? Тогда попробуйте явно привести к BCD: что-то типа CAST(myfield AS DECIMAL(8,2))


 
alextov   (2003-12-30 16:51) [20]

к сожалению это не проблема TOraQuery - это моя ПРОБЛЕМА!! :)))


 
Sandman25 ©   (2003-12-30 16:53) [21]

[20] alextov (30.12.03 16:51)

Вот Вам совет. Сделайте новую табличку из одного поля типа DEC(8,2), новый проект с TORAQuery и посмотрите, сохраниться ли для него та же ругань. Если все будет работать, значит, действительно была Ваша проблема :)


 
alextov   (2003-12-30 17:57) [22]

Всем спасибо!!
Решать данную проблему буду уже в следующем году, так как новогодняя пьянка уже началась :))) И завтра тоже явно свежие творческие идеи в голову не придут :)))



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

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

Наверх




Память: 0.51 MB
Время: 0.017 c
3-93355
Sergey_Masloff
2003-12-30 21:10
2004.01.29
FIBPlus и выполнение скрипта


1-93433
moyavital
2004-01-16 15:49
2004.01.29
Иконки в TreeView


1-93563
dima_matrix
2004-01-17 13:48
2004.01.29
Закрытие и уничтожение форм


1-93568
Mazer
2004-01-16 14:40
2004.01.29
Корректное отображение формы, вызванной из dll...


3-93369
Marina_S
2004-01-02 16:19
2004.01.29
SQL вложенные запросы