⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ezshpimport.pas

📁 很管用的GIS控件
💻 PAS
📖 第 1 页 / 共 4 页
字号:
{$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 + -