Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

Курс видеоуроков КРЭКЕРСТВО + ПРОГРАММИРОВАНИЕ 2017
(актуальность: апрель 2017)
Свежие инструменты, новые видеоуроки!

  • 400+ видеоуроков
  • 800 инструментов
  • 100+ свежих книг и статей

УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

БОЛЬШОЙ FAQ ПО DELPHI



Формат и размер dBase-поля

Автор: Eryk Bottomley

Во время выполнения программы мне необходимо получать размеры и десятичные порядки полей таблицы DBase.

Следующий код иллюстрирует необходимые вызовы BDE:


 procedure GetdBaseFieldTypes(t: TTable; var l: TStringList);
 var
   pF: pFLDDesc;
   cProps: CURProps;
   p: pFLDDesc;
   i: Byte;
   w: Word;
   s: string;
   oldmode: LongInt;
 begin
   Check(DbiGetCursorProps(t.Handle, cProps));
   Check(DbiGetProp(hDBIObj(t.Handle), curXLTMODE, oldmode, SizeOf(LongInt), w));
   Check(DbiSetProp(hDBIObj(t.Handle), curXLTMODE, LongInt(xltNONE)));
   try
     if MaxAvail < (cProps.iFields * SizeOf(FLDDesc)) then
       raise EOutofMemory.Create('Недостаточно памяти для процесса');
     GetMem(pF, (cProps.iFields * SizeOf(FLDDesc)));
     Check(DbiGetFieldDescs(t.Handle, pF));
     p := pF;
     for i := 1 to cProps.iFields do
     begin
       with p^ do
       begin
         s := IntToStr(iFldNum) + ' : ' + StrPas(szName) + ' : ';
         case iFldType of
           fldDBCHAR:
             begin { Char string, строка символов }
               s := s + 'CHARACTER(' + IntToStr(iUnits1) + ')';
             end;
           fldDBNUM:
             begin { Number, число }
               s := s + 'NUMBER(' + IntToStr(iUnits1) + ',' + InttoStr(iUnits2) +
                 ')';
             end;
           fldDBMEMO:
             begin { Memo (blob), МEMO-BLOB-поле }
               s := s + 'MEMO';
             end;
           fldDBBOOL:
             begin { Logical, лочическая величина }
               s := s + 'LOGICAL';
             end;
           fldDBDATE:
             begin { Date, поле даты }
               s := s + 'DATE';
             end;
           fldDBFLOAT:
             begin { Float, числа с плавающей точкой }
               s := s + 'FLOAT(' + IntToStr(iUnits1) + ',' + InttoStr(iUnits2) +
                 ')';
             end;
           fldDBLOCK:
             begin { Логический тип LOCKINFO }
               s := s + 'LOCKINFO';
             end;
           fldDBOLEBLOB:
             begin { OLE object (blob), OLE-объект, BLOB-поле }
               s := s + 'OLE';
             end;
           fldDBBINARY:
             begin { Binary data (blob), двоичные данные, BLOB-поле }
               s := s + 'BINARY';
             end;
         else
           s := s + 'НЕИЗВЕСТНО';
         end;
       end;
       l.Add(s);
       Inc(p);
     end;
   finally
     Check(DbiSetProp(hDBIObj(t.Handle), curXLTMODE, oldmode));
     FreeMem(pF, (cProps.iFields * SizeOf(FLDDesc)));
   end;
 end;
 




<< ВЕРНУТЬСЯ В ОГЛАВЛЕНИЕ



Материалы находятся на сайте https://exelab.ru/pro/



Оригинальный DVD-ROM: eXeL@B DVD !


Вы находитесь на EXELAB.rU
Проект ReactOS