Форум: "Базы";
Текущий архив: 2003.07.28;
Скачать: [xml.tar.bz2];
ВнизКак обработать поле где нет данных ? (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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.006 c