📄 ezshpimport.pas
字号:
{$ENDIF}
Constructor TEzSHPDbfTable.Create( Gis: TEzBaseGis; Const fname: String;
ReadWrite, Shared: boolean );
Begin
Inherited Create( Gis, fname, Readwrite, Shared );
{$IFDEF USENATIVEDLL}
LoadDLL;
FDBFHandle := ezInitDBFTable( pchar( ChangeFileExt(fname,'.dbf') ), '', ReadWrite, Shared );
{$ELSE}
FDbf := TDbf.Create( Nil );
With FDbf Do
Begin
TableName := ChangeFileExt(fname,'.dbf');
ReadOnly := Not ReadWrite;
Open;
End;
{$ENDIF}
End;
Destructor TEzSHPDbfTable.Destroy;
Begin
{$IFDEF USENATIVEDLL}
ezReleaseDBFTable( FDBFHandle );
If FDLLLoaded Then
FreeLibrary( FDLLHandle );
{$ELSE}
FDbf.Free;
{$ENDIF}
Inherited Destroy;
End;
Function TEzSHPDbfTable.GetActive: boolean;
Begin
{$IFDEF USENATIVEDLL}
result := ezGetActive( FDBFHandle );
{$ELSE}
result := FDbf.Active;
{$ENDIF}
End;
Procedure TEzSHPDbfTable.SetActive( Value: boolean );
Begin
{$IFDEF USENATIVEDLL}
ezSetActive( FDBFHandle, value );
{$ELSE}
FDbf.Active := value;
{$ENDIF}
End;
Function TEzSHPDbfTable.GetRecNo: Integer;
Begin
{$IFDEF USENATIVEDLL}
result := ezGetRecno( FDBFHandle );
{$ELSE}
result := FDbf.RecNo;
{$ENDIF}
End;
Procedure TEzSHPDbfTable.SetRecNo( Value: Integer );
Begin
{$IFDEF USENATIVEDLL}
ezSetRecNo( FDBFHandle, Value );
{$ELSE}
FDbf.Recno:= Value;
{$ENDIF}
End;
Procedure TEzSHPDbfTable.Append( NewRecno: Integer );
Var
{$IFDEF USENATIVEDLL}
FieldNo: Integer;
{$ELSE}
Field: TField;
{$ENDIF}
Begin
{$IFDEF USENATIVEDLL}
FieldNo:= ezFieldNo( FDBFHandle, pchar( 'UID' ) );
ezAppend( FDBFHandle );
if FieldNo > 0 then
ezIntegerPutN( FDBFHandle, FieldNo, NewRecno );
ezPost( FDBFHandle );
{$ELSE}
Field:= FDbf.FieldByName('UID');
FDbf.Insert;
if Field <> Nil then Field.AsInteger:= NewRecno;
FDbf.Post;
{$ENDIF}
End;
Function TEzSHPDbfTable.BOF: Boolean;
Begin
{$IFDEF USENATIVEDLL}
result := ezBOF( FDBFHandle );
{$ELSE}
result := FDbf.Eof;
{$ENDIF}
End;
Function TEzSHPDbfTable.EOF: Boolean;
Begin
{$IFDEF USENATIVEDLL}
result := ezEOF( FDBFHandle );
{$ELSE}
result := FDbf.Eof;
{$ENDIF}
End;
Function TEzSHPDbfTable.DateGet( Const FieldName: String ): TDateTime;
{$IFDEF USENATIVEDLL}
var
Index: Integer;
{$ENDIF}
Begin
{$IFDEF USENATIVEDLL}
Result:= 0;
Index:= FieldNo(FieldName);
if Index > 0 then
Result:= DateGetN(Index);
{$ELSE}
Result:= FDbf.FieldByName( FieldName ).AsDateTime;
{$ENDIF}
End;
Function TEzSHPDbfTable.DateGetN( FieldNo: integer ): TDateTime;
{$IFDEF USENATIVEDLL}
var
s: string;
yy,mm,dd: word;
{$ENDIF}
Begin
{$IFDEF USENATIVEDLL}
s := TrimRight( ezFieldGetN( FDBFHandle, FieldNo ) );
Result := 0;
if (length(s) = 8) and (s <> '00000000') then
try
yy := StrToInt(system.copy(s,1,4));
mm := StrToInt(system.Copy(s,5,2));
dd := StrToInt(system.Copy(s,7,2));
Result := EncodeDate(yy,mm,dd);
except
end;
{$ELSE}
result := FDbf.Fields[FieldNo - 1].AsdateTime;
{$ENDIF}
End;
Function TEzSHPDbfTable.Deleted: Boolean;
Begin
{$IFDEF USENATIVEDLL}
result := ezDeleted( FDBFHandle );
{$ELSE}
result := FDbf.Deleted;
{$ENDIF}
End;
Function TEzSHPDbfTable.Field( FieldNo: integer ): String;
Begin
{$IFDEF USENATIVEDLL}
result := ezField( FDBFHandle, FieldNo );
{$ELSE}
result := FDbf.Fields[FieldNo - 1].FieldName;
{$ENDIF}
End;
Function TEzSHPDbfTable.FieldCount: integer;
Begin
{$IFDEF USENATIVEDLL}
result := ezFieldCount( FDBFHandle );
{$ELSE}
result := FDbf.Fields.Count;
{$ENDIF}
End;
Function TEzSHPDbfTable.FieldDec( FieldNo: integer ): integer;
{$IFNDEF USENATIVEDLL}
Var
Datatype: TFieldType;
{$ENDIF}
Begin
{$IFDEF USENATIVEDLL}
result := ezFieldDec( FDBFHandle, FieldNO );
{$ELSE}
Datatype := FDbf.Fields[FieldNo - 1].Datatype;
If Datatype In ftNonTexttypes Then
Result := 0
Else
Case Datatype Of
ftstring{$IFDEF LEVEL4}, ftFixedChar,
ftWidestring{$ENDIF}
{$IFDEF LEVEL5}, ftGUID{$ENDIF}:
Result := 0;
ftBCD:
Result := FDbf.Fields[FieldNo - 1].Size;
ftFloat, ftCurrency,
ftAutoInc, ftSmallInt, ftInteger, ftWord
{$IFNDEF LEVEL3}, ftLargeInt{$ENDIF}:
Result := 0;
ftDate, ftTime, ftDateTime:
Result := 0;
ftBoolean:
Result := 0;
Else
Result := 0;
End;
{$ENDIF}
End;
Function TEzSHPDbfTable.FieldGet( Const FieldName: String ): String;
Begin
{$IFDEF USENATIVEDLL}
result := ezFieldGet( FDBFHandle, pchar( FieldName ) );
{$ELSE}
result := FDbf.FieldByName( FieldName ).AsString;
{$ENDIF}
End;
Function TEzSHPDbfTable.FieldGetN( FieldNo: integer ): String;
Begin
{$IFDEF USENATIVEDLL}
result := ezFieldGetN( FDBFHandle, FieldNo );
{$ELSE}
result := FDbf.Fields[FieldNo - 1].AsString;
{$ENDIF}
End;
Function TEzSHPDbfTable.FieldLen( FieldNo: integer ): integer;
{$IFNDEF USENATIVEDLL}
Var
Datatype: TFieldType;
{$ENDIF}
Begin
{$IFDEF USENATIVEDLL}
result := ezFieldLen( FDBFHandle, FieldNO );
{$ELSE}
Datatype := FDbf.Fields[FieldNo - 1].Datatype;
If Datatype In ftNonTexttypes Then
Result := 0
Else
Case Datatype Of
ftstring{$IFDEF LEVEL4}, ftFixedChar,
ftWidestring{$ENDIF}
{$IFDEF LEVEL5}, ftGUID{$ENDIF}:
Result := FDbf.Fields[FieldNo - 1].Size;
ftFloat, ftCurrency, ftBCD,
ftAutoInc, ftSmallInt, ftInteger, ftWord
{$IFNDEF LEVEL3}, ftLargeInt{$ENDIF}:
Result := 20;
ftDate, ftTime, ftDateTime:
Result := 0;
ftBoolean:
Result := 0;
Else
Result := 0;
End;
{$ENDIF}
End;
Function TEzSHPDbfTable.FieldNo( Const FieldName: String ): integer;
{$IFNDEF USENATIVEDLL}
Var
Field: TField;
{$ENDIF}
Begin
{$IFDEF USENATIVEDLL}
result := ezFieldNo( FDBFHandle, pchar( FieldName ) );
{$ELSE}
Field := FDbf.FindField( FieldName );
If Field = Nil Then
Result := 0
Else
Result := Field.Index + 1;
{$ENDIF}
End;
Function TEzSHPDbfTable.FieldType( FieldNo: integer ): char;
{$IFNDEF USENATIVEDLL}
Var
Datatype: TFieldType;
{$ENDIF}
Begin
{$IFDEF USENATIVEDLL}
result := ezFieldType( FDBFHandle, FieldNo );
{$ELSE}
Datatype := FDbf.Fields[FieldNo - 1].Datatype;
If Datatype In ftNonTexttypes Then
Begin
Case DataType Of
ftMemo, ftFmtMemo: Result := 'M';
ftGraphic: Result := 'G';
ftTypedBinary: Result := 'B';
End;
End
Else
Case Datatype Of
ftstring{$IFDEF LEVEL4}, ftFixedChar,
ftWidestring{$ENDIF}
{$IFDEF LEVEL5}, ftGUID{$ENDIF}:
Result := 'C';
ftFloat, ftCurrency, ftBCD,
ftAutoInc, ftSmallInt, ftInteger, ftWord
{$IFNDEF LEVEL3}, ftLargeInt{$ENDIF}:
Result := 'N';
ftDate, ftTime, ftDateTime:
Result := 'D';
ftBoolean:
Result := 'L';
Else
Result := 'C';
End;
{$ENDIF}
End;
Function TEzSHPDbfTable.Find( Const ss: String; IsExact, IsNear: boolean ): boolean;
Begin
{$IFDEF USENATIVEDLL}
result := ezFind( FDBFHandle, pchar( ss ), IsExact, Isnear );
{$ELSE}
result := false; // not yet implemented
{$ENDIF}
End;
Function TEzSHPDbfTable.FloatGet( Const FieldName: String ): Double;
Begin
{$IFDEF USENATIVEDLL}
result := ezFloatGet( FDBFHandle, pchar( FieldName ) );
{$ELSE}
result := FDbf.FieldByName( FieldName ).Asfloat;
{$ENDIF}
End;
Function TEzSHPDbfTable.FloatGetN( FieldNo: Integer ): Double;
Begin
{$IFDEF USENATIVEDLL}
result := ezFloatGetN( FDBFHandle, FieldNo );
{$ELSE}
result := FDbf.Fields[FieldNo - 1].Asfloat;
{$ENDIF}
End;
Function TEzSHPDbfTable.IndexCount: integer;
Begin
{$IFDEF USENATIVEDLL}
result := ezIndexCount( FDBFHandle );
{$ELSE}
result := 0;
{$ENDIF}
End;
Function TEzSHPDbfTable.IndexAscending( Value: integer ): boolean;
Begin
{$IFDEF USENATIVEDLL}
result := ezIndexAscending( FDBFHandle, Value );
{$ELSE}
Result := true;
{$ENDIF}
End;
Function TEzSHPDbfTable.Index( Const INames, Tag: String ): integer;
Begin
result := 0;
{$IFDEF USENATIVEDLL}
if FileExists( INames + '.cdx' ) then
result := ezIndex( FDBFHandle, pchar( INames + '.cdx' ), pchar( Tag ) );
{$ELSE}
if FileExists( INames + '.mdx' ) then
begin
FDbf.OpenIndexFile(INames + '.mdx');
FDbf.IndexName:= Tag;
end;
{$ENDIF}
End;
Function TEzSHPDbfTable.IndexCurrent: String;
Begin
{$IFDEF USENATIVEDLL}
result := ezIndexCurrent( FDBFHandle );
{$ELSE}
result := FDbf.IndexName;
{$ENDIF}
End;
Function TEzSHPDbfTable.IndexUnique( Value: integer ): boolean;
Begin
{$IFDEF USENATIVEDLL}
result := ezIndexUnique( FDBFHandle, Value );
{$ELSE}
result := true;
{$ENDIF}
End;
Function TEzSHPDbfTable.IndexExpression( Value: integer ): String;
Begin
{$IFDEF USENATIVEDLL}
result := ezIndexExpression( FDBFHandle, Value );
{$ELSE}
result := '';
{$ENDIF}
End;
Function TEzSHPDbfTable.IndexTagName( Value: integer ): String;
Begin
{$IFDEF USENATIVEDLL}
result := ezIndexTagName( FDBFHandle, Value );
{$ELSE}
result := '';
{$ENDIF}
End;
Function TEzSHPDbfTable.IndexFilter( Value: integer ): String;
Begin
{$IFDEF USENATIVEDLL}
result := ezIndexFilter( FDBFHandle, Value );
{$ELSE}
result := '';
{$ENDIF}
End;
Function TEzSHPDbfTable.IntegerGet( Const FieldName: String ): Integer;
Begin
{$IFDEF USENATIVEDLL}
result := ezIntegerget( FDBFHandle, pchar( FieldName ) );
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -