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

Previous  Top  Next

    
 

 

 

Code:

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;

 

 

 

-Eryk Bottomley

©Drkb::02701

Взято из Советов по Delphi от Валентина Озерова

Сборник Kuliba