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

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
Взято из Советов по Delphi от Валентина Озерова
Сборник Kuliba

Отправить комментарий

Проверка
Антиспам проверка
Image CAPTCHA
...