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

Вниз

Как обработать поле где нет данных ? (BDE, dBase)   Найти похожие ветки 

 
Дмитрий Д.   (2003-07-01 08:37) [0]

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


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

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


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

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


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

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


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

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


 
Anatoly Podgoretsky ©   (2003-07-01 15:48) [5]

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


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

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

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


 
Anatoly Podgoretsky ©   (2003-07-01 16:15) [7]

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


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

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

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


 
ЮЮ ©   (2003-07-02 07:56) [9]

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


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

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


 
Johnmen ©   (2003-07-03 16:42) [11]

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


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

поле 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 те же операции провести, или просто как то анализировать (считывать) данные.


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

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


 
ЮЮ ©   (2003-07-04 09:24) [14]

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


 
ЮЮ ©   (2003-07-04 09:30) [15]

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


 
MsGuns ©   (2003-07-04 10:55) [16]

Если обработка идет не запросом и нежелательно заполнение исх.БД нулями по совету 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 будут нули. Иногда это может оказаться недопустимо.




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

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

Наверх




Память: 0.5 MB
Время: 0.019 c
7-91922
chuvak
2003-05-19 13:23
2003.07.28
Тут гдето проскакивала тема про замену Explorera на свою программ


1-91749
Silver_
2003-07-15 11:48
2003.07.28
Замучал Free report Error


6-91805
SergeyI
2003-05-21 09:04
2003.07.28
Написание


3-91663
zks
2003-07-01 04:10
2003.07.28
SQL запрос


4-91957
NoName
2003-05-23 18:48
2003.07.28
Как использовать SetFileTime?