Форум: "Базы";
Текущий архив: 2003.10.30;
Скачать: [xml.tar.bz2];
Внизразмер 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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.011 c