![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как обработать поле где нет данных ? (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 - убираем неопределенные значения...