Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
1-91760
Keith Flint
2003-07-15 18:11
2003.07.28
Загрузка bmp в TSlider


3-91621
Step[B.M.]
2003-07-04 08:51
2003.07.28
Как организовать цикл по записям в процедуре InterBase


8-91773
Intell
2003-04-05 12:48
2003.07.28
Как создать новый (пустой FileName) в TMediaPlayer?


8-91771
Irinka-pm
2003-04-07 09:33
2003.07.28
Графика


1-91727
Vovanx
2003-07-15 04:27
2003.07.28
TFileStream и String





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский