Как узнать тип поля, в таблице версии dBASE 4, используя компонент (TDbf/Dbf)
Узнать тип нужно обязательно.
Имя поля получаю так MyDbf.Fields[i].FieldName
Модератор: Модераторы
smith7 писал(а):Имя поля получаю так MyDbf.Fields[i].FieldName
MyDbf.Fields[i].DataType
if MyDbf.Fields[i].DataType = ftDate then
begin
if trim(MyDbf.FieldByName(MyDbf.Fields[i].FieldName).AsString) <> '' then
str_data := FormatDateTime('YYYY-MM-DD hh:mm:ss',
MyDbf.FieldByName(MyDbf.Fields[i].FieldName).AsDateTime)
else
str_data := '0000-00-00 00:00:00';
end
else
str_data := cp866toUTF8(MyDbf.FieldByName(
MyDbf.Fields[i].FieldName).AsString);
smith7 писал(а):При компиляции я получаю ошибку
unit2.pas(176,49) Error: Identifier not found "ftDate"
smith7 писал(а):DataSize возвращает тип int, как узнать знаки после запятой?
procedure Tfrmmainfind.ErrorFinUrZB(FileFinUrZB : string; fileStr : string; NameZB : string; HelpZB : string; K : string);
var zz, z, kolpZB, razmZB, dodZB, dodZBB : integer;
NameFinFF, TypeNeed, ErrorType, TipPolja, ErrorTypeR, TipPoljaR, ErrorTypeRR, TipPoljaRR, NamePolia : string;
begin
if FileExistsUTF8(ExtractFileDir(FileFinUrZB) + DirectorySeparator + 'f' + NameZB + K) then begin
With DM.DbfOrigin do begin
Close;
TableName := dm.winux(ExtractFileDir(FileFinUrZB) + DirectorySeparator + 'f' + NameZB + K);
Open;
end;
With frmfind.RichView1 do begin
AddBreak;
AddFromNewLine('Перевірка структури файлу ', 3);
Add(HelpZB, 3);
Add(' зобов`язання...', 3);
AddFromNewLine('', 3);
Format;
Refresh;
end;
if not FileExistsUTF8('tmp' + DirectorySeparator + 'strfinzb.dbf') then begin
With frmfind.RichView1 do begin
AddFromNewLine('Відсутній файл структури ', 1);
Add(HelpZB, 1);
Add(' зобов`язання.', 1);
Add(' Перевірка не можлива.', 2);
Format;
Refresh;
end;
DM.DbfOrigin.Close;
dm.Dbf1.close;
Exit;
end;
With dm.Dbf1 do begin
Close;
FilePath := 'tmp' + DirectorySeparator;
TableName := fileStr;
Open;
First;
end;
if DM.DbfOrigin.FieldCount <> dm.Dbf1.RecordCount then begin
With frmfind.RichView1 do begin
AddFromNewLine('Перевірка ', 0);
Add(HelpZB, 1);
Add(' зобов`язання не можлива.', 0);
Add(' Не відповідна кількість полів.', 2);
Format;
Refresh;
end;
DM.DbfOrigin.Close;
dm.Dbf1.close;
Exit;
end;
kolpZB := 0;
for zz := 0 to DM.DbfOrigin.DbfFieldDefs.Count - 1 do begin
razmZB := 0;
dodZB := 0;
dodZBB := 0;
if dm.Dbf1.Locate('NAZVA', DM.DbfOrigin.DbfFieldDefs.Items[zz].FieldName, []) then begin
if DM.DbfOrigin.DbfFieldDefs.Items[zz].Size <> dm.Dbf1.FieldByName('SIZE').AsInteger then begin
NamePolia := DM.DbfOrigin.DbfFieldDefs.Items[zz].FieldName;
ErrorTypeR := inttostr(DM.DbfOrigin.DbfFieldDefs.Items[zz].Size);
TipPoljaR := inttostr(dm.Dbf1.FieldByName('SIZE').AsInteger);
razmZB := razmZB + 1;
kolpZB := kolpZB + 1;
end;
if DM.DbfOrigin.DbfFieldDefs.Items[zz].Precision <> dm.Dbf1.FieldByName('PRECISION').AsInteger then begin
dodZB := dodZB + 1;
TipPoljaRR := inttostr(dm.Dbf1.FieldByName('PRECISION').AsInteger);
ErrorTypeRR := inttostr(DM.DbfOrigin.DbfFieldDefs.Items[zz].Precision);
NamePolia := DM.DbfOrigin.DbfFieldDefs.Items[zz].FieldName;
kolpZB := kolpZB + 1;
end;
///////////////////////
case DM.DbfOrigin.DbfFieldDefs.Items[zz].FieldType of
ftString : TipPolja := 'String';
ftSmallint : TipPolja := 'Smallint';
ftInteger : TipPolja := 'Integer';
ftWord : TipPolja := 'Word';
ftBoolean : TipPolja := 'Boolean';
ftFloat : TipPolja := 'Float';
ftCurrency : TipPolja := 'Currency';
ftBCD : TipPolja := 'BCD';
ftDate : TipPolja := 'Date';
ftTime : TipPolja := 'Time';
ftDateTime : TipPolja := 'DateTime';
ftBytes : TipPolja := 'Bytes';
ftAutoInc : TipPolja := 'AutoInc';
ftBlob : TipPolja := 'Blob';
ftMemo : TipPolja := 'Memo';
ftGraphic : TipPolja := 'Graphic';
ftFmtMemo : TipPolja := 'FmtMemo';
ftDBaseOle : TipPolja := 'DBaseOle';
ftTypedBinary : TipPolja := 'TypedBinary';
end;
if AnsiPos(TipPolja, dm.Dbf1.FieldByName('TYPE').AsString) = 0 then begin
dodZBB := dodZBB +1;
ErrorType := TipPolja;
TypeNeed := dm.Dbf1.FieldByName('TYPE').AsString;
NamePolia := DM.DbfOrigin.DbfFieldDefs.Items[zz].FieldName;
kolpZB := kolpZB + 1;
end;
///////////////////////
//////////////////////////// При не коректному типі поля добавити в "повідомлення" і далі шукати
if dodZBB > 0 then begin
With frmfind.RichView1 do begin
AddFromNewLine('Не кoрректний ', 0);
Add('тип ', 2);
Add('поля ', 0);
Add(HelpZB, 1);
Add(' зобов`язання.', 0);
Add('В полі "',0);
Add(NamePolia, 1);
Add('" потрібно - ', 0);
Add(TypeNeed, 1);
Add(', а у файлі - ', 0);
Add(ErrorType, 2);
Add('.', 0);
Format;
Refresh;
end;
// dm.Dbf1.close;
// Exit;
end;
//////////////////////////// При не коректному розміру поля...
if razmZB > 0 then begin
With frmfind.RichView1 do begin
AddFromNewLine('Не корректний ', 0);
Add('розмір ', 2);
Add('поля ', 0);
Add(HelpZB, 1);
Add(' зобов`язання.', 0);
Add('В полі "',0);
Add(NamePolia, 1);
Add('" потрібно - ', 0);
Add(TipPoljaR, 1);
Add(', а у файлі - ', 0);
Add(ErrorTypeR, 2);
Add('.', 0);
Format;
Refresh;
end;
// dm.Dbf1.close;
// Exit;
end;
////////////////////////////
if dodZB > 0 then begin
With frmfind.RichView1 do begin
AddFromNewLine('Не корректний ', 0);
Add('розмір ', 2);
Add('поля ', 0);
Add(HelpZB, 1);
Add(' зобов`язання.', 0);
Add('В полі "',0);
Add(NamePolia, 1);
Add('" потрібно - ', 0);
Add(TipPoljaRR, 1);
Add(', а у файлі - ', 0);
Add(ErrorTypeRR, 2);
Add('.', 0);
Format;
Refresh;
end;
end;
///////////////////////////
kolpZB := kolpZB + 0;
end else begin
kolpZB := kolpZB + 1;
end;
end;
//////////////////////////
if kolpZB > 0 then begin
With frmfind.RichView1 do begin
AddFromNewLine('Не корректні поля ', 1);
Add(HelpZB, 1);
Add(' зобов`язання.', 1);
Add(' Файл не робочий...', 2);
Format;
Refresh;
end;
DM.DbfOrigin.Close;
dm.Dbf1.close;
Exit;
end;
//////////////////////////
if (kolpZB=0) and (razmZB=0) and (dodZB=0) and (dodZBB=0) then begin
With frmfind.RichView1 do begin
AddFromNewLine('Структура файлу ', 0);
Add(HelpZB, 0);
Add(' зобов`язання ', 0);
Add('без помилок...', 3);
Format;
Refresh;
end;
end else begin
With frmfind.RichView1 do begin
AddFromNewLine(' Файл не робочий...', 2);
Format;
Refresh;
end;
end;
///////////////////////перевірка рахунку на індивідуальність
NameFinFF := CP866ToUTF8(DM.DbfOrigin.FieldByName('RRAX').AsString);
DM.DbfOrigin.First;
for z := 0 to DM.DbfOrigin.RecordCount - 1 do begin
if AnsiPos(NameFinFF, CP866ToUTF8(DM.DbfOrigin.FieldByName('RRAX').AsString)) = 0 then begin
With frmfind.RichView1 do begin
AddFromNewLine('Увага:', 2);
Add(' різні рахунки в полі "RRAX" ', 1);
Add(HelpZB, 1);
Add(' зобов`язання.', 1);
Add('Перевірка не можлива.',2);
Format;
Refresh;
end;
DM.DbfOrigin.Close;
exit;
end;
DM.DbfOrigin.Next;
end;
///////////////////////
end else begin
With frmfind.RichView1 do begin
//AddBreak;
AddFromNewLine('Файл ', 1);
Add(HelpZB, 1);
Add(' зобов`язання відсутній.', 1);
Format;
Refresh;
end;
end;
if FileExistsUTF8(ExtractFileDir(FileFinUrZB) + DirectorySeparator + 'f' + NameZB + K) then begin
z := 0;
With DM.Dbf1 do begin
Close;
TableName := dm.winux(ExtractFileDir(FileFinUrZB) + DirectorySeparator + 'f' + NameZB + K);
Open;
EnableControls;
First;
for zz := 0 to RecordCount -1 do begin
if IsDeleted then z := z +1;
Next;
end;
DisableControls;
if z > 0 then begin
With frmfind.RichView1 do begin
AddFromNewLine('Увага:', 2);
Add(' в данному файлі існують записи до видалення - ', 1);
Add(inttostr(z), 2);
Add(' шт. Перевірка не можлива.',1);
Format;
Refresh;
end;
DM.DbfOrigin.Close;
dm.Dbf1.close;
Exit;
end else begin
With frmfind.RichView1 do begin
AddFromNewLine('В файлі видалених записів ', 1);
Add('немає', 3);
Add('.',1);
Format;
Refresh;
end;
end;
end;
end;
end;
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 233