Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как обработать поле где нет данных ? (BDE, dBase) [D5, dBase, FoxPro, Paradox]


Дмитрий Д. ©   (2003-07-01 08:37:00) 

Суть проблемы:
досталось в наследство куча dBase таблиц, которые видимо напрямую обрабатывались,
в итоге например в числовых полях (при просмотре вьювером, или в фоксе) вместо нулей ничего нет. Либо данные в тех же числовых полях как-бы смещены (во вьювере и в фоксе значения стоят слева, а не справа)
В итоге когда я пытаюсь обрабатывать такие значения в Delphi посредством BDE вылязят ошибки.
Как можно определить такие "неправильные" значения в записях?
И как их можно обрабатывать ?
И самое главное может существует способ сразу привести нормальному виду всю таблицу ?


MsGuns   (2003-07-04 10:55:00) [1]

Если обработка идет не запросом и нежелательно заполнение исх.БД нулями по совету Johnmen © (01.07.03 09:16), то вполне годится код типа

with DataMod1.Table1 do
begin
s := 0;
if FieldByName("Summa1").AsString>"" then
s := FieldByName("Summa1").AsFloat;
end;


Можно также использовать событие OnGetText (см.ЮЮ © (04.07.03 09:24), но в этом случае и отображаться данные будут "искаженно", т.е. вместо реальных NULL будут нули. Иногда это может оказаться недопустимо.


ЮЮ   (2003-07-04 09:30:00) [2]

точнее, не если Text = "", а Текст содержит 2 точки или не конвертируется без ошибок в число и т.п.


ЮЮ   (2003-07-04 09:24:00) [3]

Можно попробовать в обработчике TField.OnGetText, в том случае, если Text = "", провести доп.проверку содержимого буфера см. TField.GetData и, если необходимо, откорректировать поле


Дмитрий Д.   (2003-07-04 06:56:00) [4]

Блин почемуто отформатировалось не так как писал.
что бы посмотреть как я написал просто скопируйте текст в окно "написать ответ"


Дмитрий Д.   (2003-07-04 06:47:00) [5]

поле K__08_A: Numeric 16 2
если смотреть посредством фокса:

K__08_A
----------------
0.00

0.00
5250.00
204902.07
0.00

постредством cdbf (вьювер):
K__08_A
----------------
0.00

0.00
5250.0.
204902.07
0.00

при перезаписи в фоксе типа
replace K__08_A with K__08_A all
имеем:
K__08_A
----------------
0.00
0.00
0.00
5250.00
204902.07
0.00

и можно нормально работать через BDE
вот и вопрос у меня был, можно ли из Delphi те же операции провести, или просто как то анализировать (считывать) данные.


Johnmen   (2003-07-03 16:42:00) [6]

Просто приведи здесь структуру табл. с примером неверного заполнения....


Дмитрий Д.   (2003-07-03 16:33:00) [7]

в принципе я могу заслать кусок таблицы, чтобы было понятнее :)


ЮЮ   (2003-07-02 07:56:00) [8]

Что значит "смещение" ? Текстовое поле, что ли? Тогда какой смысл в твоей "перезаписи"? Нужно другое поле другого типа


Дмитрий Д.   (2003-07-02 06:50:00) [9]

при просмотре например в гриде поле просто пустое, хотя реально там цифровое значение. В Делфи при перезаписи
например
t1.fieldbyname("field").value:=t1.fieldbyname("field").value
получаю пустое значение (не 0),
t1.fieldbyname("field").value:=t1.fieldbyname("field").asfloat
получаю 0

А в фоксе в броусе значение видно (смещенное), и при перезаписи значение приводится к "правильному" типу.
по идее можно было бы в фоксе написать прогу, но я силен в нем...


Anatoly Podgoretsky   (2003-07-01 16:15:00) [10]

Лезет ли у тебя ошибка при просмотре полей. Проблема с порчей их некоторыми программами известна.


Дмитрий Д.   (2003-07-01 16:11:00) [11]

to Serginio
спасибо за ссылки, почитаю информацию (она как извесно никогда не бывает лишней),
но я как бы не собираюсь сам писать и читать напрямую :)

to Anatoly Podgoretsky
дело в том, что у меня ошибка лезет когда я пытаюсь перетащить данные в другую таблицу...
так что переписать не подходит... по крайней мере через БДЕ...


Anatoly Podgoretsky   (2003-07-01 15:48:00) [12]

Дмитрий Д. (01.07.03 15:13)
Я попробовал бы в цикле переписать все записи


Serginio   (2003-07-01 15:39:00) [13]

http://alyunov.narod.ru/files/dBase.htm
http://www.e-bachmann.dk/docs/xbase.htm
http://www.codenet.ru/progr/formt/intro.php
http://articlesd.h1.ru/docum/dbfall.php


DenK_vrtz   (2003-07-01 15:25:00) [14]

Если действительно нужны данные в виде цифр, то, как вариант, пересоздать таблицу, а нужное поле сделать не символьным, а цифровым.


Дмитрий Д.   (2003-07-01 15:13:00) [15]

Спазибо за ответ.Попробую.
А Как быть когда значение не пустое, а есть цифры , но записанные не правильно (смещены влево) ?


Johnmen   (2003-07-01 09:16:00) [16]

UPDATE Table SET Field=0 WHERE Field IS NULL - убираем неопределенные значения...


Наверх

Титульная страница Поиск, карта сайта Написать письмо