Главная страница
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-98643
DellAx
2003-10-17 12:26
2003.10.30
Как сделать чтоб TPanel имела другую форму типа многоугольника???


1-98698
Маратей_И
2003-10-21 10:49
2003.10.30
Как получить наименование каталога Windows, версию Windows


3-98455
Oleg Barsky
2003-10-10 11:26
2003.10.30
Query


1-98597
kopcap
2003-10-19 16:11
2003.10.30
размер exe


11-98533
Kladov
2003-02-12 16:57
2003.10.30
Просьба посмотреть на DoubleBuffered/Transparent