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

Вниз

размер numeric поля в dbf   Найти похожие ветки 

 
td   (2003-10-09 18:06) [0]

Как программно определить размер нумерик поля в таблице FoxPro?

Например, реально размер 15.2
А Table1.Fields[0].Size показывает 0
А Table1.Fields[0].DataSize показывает 8

а мне нужно именно целую и дробную часть


 
Brahman ©   (2003-10-09 18:16) [1]

Если через BDE то так можно

uses DBIProcs;
..
var
fc: word;
fd,cf: PFLDDesc;
fidx: integer; // индекс поля, c 0
..
fd := AllocMem(fc*sizeof(FLDDesc));
Check(DBIGetFieldDescs(Table1.Handle,fd));
cf := PFLDDesc(integer(fd) + fidx*sizeof(FLDDesc));

ShowMessage(IntToStr(cf.iUnits2)); // число дес.зн после запятой

if fd <> nil then FreeMem(fd,fc*sizeof(FLDDesc));


 
Sandman25 ©   (2003-10-09 18:47) [2]

Precision?


 
td   (2003-10-09 20:39) [3]


> Brahman


я вставил

fd := AllocMem(fc*sizeof(FLDDesc));
Check(DBIGetFieldDescs(Table1.Handle,fd));
cf := PFLDDesc(integer(fd) + fidx*sizeof(FLDDesc));

смотрю пошагово, почему-то 3-я строчка перескакивается.
Тут что-то надо дописать еще?


 
sniknik ©   (2003-10-09 21:18) [4]

> смотрю пошагово, почему-то 3-я строчка перескакивается.
она у тебя выкинутая оптимизатором, т.к. переменная нигде не используется. или используй или оптимизатор отключи.


 
td   (2003-10-09 23:07) [5]

а почему тогда на ShowMessage(IntToStr(cf.iUnits2)); у меня уже ошибки?


 
sniknik ©   (2003-10-09 23:35) [6]

> а почему тогда на ShowMessage(IntToStr(cf.iUnits2)); у меня уже ошибки?
ну наверное потому что там есть ошибка,

просто этот же код можно представить без переменной (что и было сделано)
...
cf := PFLDDesc(integer(fd) + fidx*sizeof(FLDDesc));
ShowMessage(IntToStr(cf.iUnits2));

меняется на
ShowMessage(IntToStr(PFLDDesc(integer(fd) + fidx*sizeof(FLDDesc)).iUnits2));

используй ее (пременную) непосредственно, ну примерно так
cf := PFLDDesc(integer(fd) + fidx*sizeof(FLDDesc));

if cf.iUnits2 > 100 then ShowMessage("Большое значение : "+IntToStr(cf.iUnits2))
else ShowMessage("Маленькое значение : "+IntToStr(cf.iUnits2));

и теперь посмотри будет 3ю строчку отладчик проскакивать (ошибка скорее всего переместится на условие).


 
td   (2003-10-10 00:16) [7]

а на это у меня показываются нули

ShowMessage(IntToStr(PFLDDesc(integer(fd) + fidx*sizeof(FLDDesc)).iUnits2));

Это же десятичная часть должна показываться? Или воообще что?
(поле при этом 15.2)



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

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

Наверх




Память: 0.48 MB
Время: 0.016 c
1-98609
kukuikar
2003-10-14 18:08
2003.10.30
Как WinAmp


1-98667
Ilg
2003-10-20 18:40
2003.10.30
Вкладки TPageControl


3-98470
Dim!S
2003-10-10 08:06
2003.10.30
Колонка в DBGrid


1-98632
SPIRIT
2003-10-16 03:36
2003.10.30
TDriveCombobox или другие способы определения жестких дисков!!!


1-98678
Raduga
2003-10-21 13:25
2003.10.30
Свойство ссылающееся на элемент коллекции