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

📄 ezimpl.pas

📁 很管用的GIS控件
💻 PAS
📖 第 1 页 / 共 5 页
字号:
      On Exception Do
        v := false;
    End;
  End;

Begin
  { create a dBase table }
  With TTable.Create( Nil ) Do
  Try
    Databasename := ExtractFilePath( fname );
    TableName := ChangeFileExt( ExtractFileName( fname ), '.dbf' );
    With FieldDefs Do
    Begin
      Clear;
      Add( 'UID', ftInteger, 0, False );
      For I := 0 To AFieldList.count - 1 Do
      Begin
        s:= AFieldList[I];
        LoadField;
        If Not v Then
          EzGisError( SErrWrongField );
        if AnsiCompareText(fs, 'UID') = 0 then Continue;
        Case ft[1] Of
          'C':
            Add( fs, ftString, fl, False );
          'F', 'N':
            If fd = 0 Then
              Add( fs, ftInteger, 0, False )
            Else
              Add( fs, ftFloat, 0, False );
          'M':
            Add( fs, ftMemo, 0, False );
          'G':
            Add( fs, ftGraphic, 0, False );
          'B':
            Add( fs, ftTypedBinary, 0, False );
          'L':
            Add( fs, ftBoolean, 0, False );
          'D':
            Add( fs, ftDate, 0, False );
          'T':
            Add( fs, ftTime, 0, False );
          'I':
            Add( fs, ftInteger, 0, False );
        End;
      End;
    End;
    With IndexDefs Do
    Begin
      Clear;
      Add( '', 'UID', [ixPrimary] );
    End;
    If Not Exists Then
      CreateTable;
  Finally
    Free;
  End;
End;

Constructor TEzBDETable.Create( Gis: TEzBaseGIS; Const FName: String;
  ReadWrite, Shared: boolean );
Begin
  Inherited Create( Gis, FName, ReadWrite, Shared );
  FTable := TTable.Create( Nil );
  With FTable Do
  Begin
    DatabaseName := ExtractFilePath( FName );
    TableName := ChangeFileExt( ExtractFileName( FName ), '.dbf' );
    TableType:= ttDBase;
    ReadOnly := Not ReadWrite;
    Exclusive := Not Shared;
    Open;
  End;
End;

Destructor TEzBDETable.Destroy;
Begin
  FTable.Free;
  Inherited Destroy;
End;

Function TEzBDETable.GetActive: boolean;
Begin
  Result := FTable.Active;
End;

Procedure TEzBDETable.SetActive( Value: boolean );
Begin
  FTable.Active := Value;
End;

Function TEzBDETable.GetRecNo: Integer;
Begin
  result := GetRecordNumber( FTable );
End;

Procedure TEzBDETable.SetRecNo( Value: Integer );
Begin
  SetRecordNumber( FTable, Value );
End;

Procedure TEzBDETable.Append( NewRecno: Integer );
Begin
  FTable.Insert;
  FTable.FieldByName( 'UID' ).AsInteger := NewRecno;
  FTable.Post;
End;

Function TEzBDETable.BOF: Boolean;
Begin
  result := FTable.BOF;
End;

Function TEzBDETable.EOF: Boolean;
Begin
  result := FTable.EOF;
End;

Function TEzBDETable.DateGet( Const FieldName: String ): TDateTime;
Begin
  result := FTable.FieldByName( FieldName ).AsDateTime;
End;

Function TEzBDETable.DateGetN( FieldNo: integer ): TDateTime;
Begin
  result := FTable.Fields[FieldNo - 1].AsdateTime;
End;

Function TEzBDETable.Deleted: Boolean;
Begin
  result := False;
End;

Function TEzBDETable.Field( FieldNo: integer ): String;
Begin
  result := FTable.Fields[FieldNo - 1].FieldName;
End;

Function TEzBDETable.FieldCount: integer;
Begin
  result := FTable.Fields.Count;
End;

Function TEzBDETable.FieldDec( FieldNo: integer ): integer;
Var
  Datatype: TFieldType;
Begin
  Datatype := FTable.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 := FTable.Fields[FieldNo - 1].Size;
      ftFloat, ftCurrency,
        ftAutoInc, ftSmallInt, ftInteger, ftWord
{$IFNDEF LEVEL3}, ftLargeInt{$ENDIF}:
        Result := 0;
      ftDate, ftTime, ftDateTime:
        Result := 0;
      ftBoolean:
        Result := 0;
    End;
End;

Function TEzBDETable.FieldGet( Const FieldName: String ): String;
Begin
  result := FTable.FieldByName( FieldName ).AsString;
End;

Function TEzBDETable.FieldGetN( FieldNo: integer ): String;
Begin
  result := FTable.Fields[FieldNo - 1].AsString;
End;

Function TEzBDETable.FieldLen( FieldNo: integer ): integer;
Var
  Datatype: TFieldType;
Begin
  Datatype := FTable.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 := FTable.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;
    End;
End;

Function TEzBDETable.FieldNo( Const FieldName: String ): integer;
Var
  Field: TField;
Begin
  Field := FTable.FindField( FieldName );
  If Field = Nil Then
    Result := 0
  Else
    Result := Field.Index + 1;
End;

Function TEzBDETable.FieldType( FieldNo: integer ): char;
Var
  Datatype: TFieldType;
Begin
  Datatype := FTable.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';
    End;
End;

Function TEzBDETable.Find( Const ss: String; IsExact, IsNear: boolean ): boolean;
Begin
  result := FTable.FindKey( [ss] ); // findkey used for now
End;

Function TEzBDETable.FloatGet( Const Fieldname: String ): Double;
Begin
  result := FTable.FieldByName( FieldName ).Asfloat;
End;

Function TEzBDETable.FloatGetN( FieldNo: Integer ): Double;
Begin
  result := FTable.Fields[FieldNo - 1].Asfloat;
End;

Function TEzBDETable.IndexCount: integer;
Begin
  result := FTable.IndexDefs.Count;
End;

Function TEzBDETable.IndexAscending( Value: integer ): boolean;
Begin
  Result := Not ( ixDescending In FTable.IndexDefs[Value].Options );
End;

Function TEzBDETable.Index( Const INames, Tag: String ): integer;
Begin
  // nothing to do here
End;

Function TEzBDETable.IndexCurrent: String;
Begin
  result := FTable.IndexName;
End;

Function TEzBDETable.IndexUnique( Value: integer ): boolean;
Begin
  Result := ixUnique In FTable.IndexDefs[Value].Options;
End;

Function TEzBDETable.IndexExpression( Value: integer ): String;
Begin
  result := FTable.IndexDefs[Value].FieldExpression;
End;

Function TEzBDETable.IndexTagName( Value: integer ): String;
Begin
  result := FTable.IndexDefs[Value].Name;
End;

Function TEzBDETable.IndexFilter( Value: integer ): String;
Begin
  result := '';
End;

Function TEzBDETable.IntegerGet( Const FieldName: String ): Integer;
Begin
  result := FTable.FieldByName( Fieldname ).AsInteger;
End;

Function TEzBDETable.IntegerGetN( FieldNo: integer ): Integer;
Begin
  result := FTable.Fields[FieldNo - 1].AsInteger;
End;

Function TEzBDETable.LogicGet( Const FieldName: String ): Boolean;
Begin
  result := FTable.FieldByName( FieldName ).AsBoolean;
End;

Function TEzBDETable.LogicGetN( FieldNo: integer ): Boolean;
Begin
  result := FTable.Fields[FieldNo - 1].AsBoolean;
End;

Procedure TEzBDETable.MemoSave( Const FieldName: String; Stream: TStream );
Begin
  MemoSaveN( FTable.FieldByname( FieldName ).Index + 1, Stream );
End;

Procedure TEzBDETable.MemoSaveN( FieldNo: integer; Stream: TStream );
Begin
  stream.Position:= 0;
  ( FTable.Fields[FieldNo - 1] As TBlobField ).LoadFromStream( stream );
End;

Function TEzBDETable.MemoSize( Const FieldName: String ): Integer;
Begin
  result := ( FTable.FieldByName( FieldName ) As TBlobField ).BlobSize;
End;

Function TEzBDETable.MemoSizeN( FieldNo: integer ): Integer;
Begin
  result := ( FTable.Fields[FieldNo - 1] As TBlobField ).BlobSize;
End;

Function TEzBDETable.RecordCount: Integer;
Begin
  result := FTable.RecordCount;
End;

Function TEzBDETable.StringGet( Const FieldName: String ): String;
Begin
  result := FTable.FieldByname( FieldName ).AsString;
End;

Function TEzBDETable.StringGetN( FieldNo: integer ): String;
Begin
  result := FTable.Fields[FieldNo - 1].AsString;
End;

{Procedure TEzBDETable.CopyStructure( Const FileName, APassword: String );
Begin
  // nothing to do
End;

Procedure TEzBDETable.CopyTo( Const FileName, APassword: String );
Begin
  // nothing to do
End; }

Procedure TEzBDETable.DatePut( Const FieldName: String; value: TDateTime );
Begin
  FTable.FieldByName( FieldName ).AsDateTime := value;
End;

Procedure TEzBDETable.DatePutN( FieldNo: integer; value: TDateTime );
Begin
  FTable.Fields[FieldNo - 1].AsDateTime := value;
End;

Procedure TEzBDETable.Delete;
Begin
  FTable.Delete;
End;

Procedure TEzBDETable.Edit;
Begin
  FTable.Edit;
End;

Procedure TEzBDETable.FieldPut( Const FieldName, Value: String );
Begin
  FTable.FieldByName( FieldName ).AsString := Value;
End;

Procedure TEzBDETable.FieldPutN( FieldNo: integer; Const Value: String );
Begin
  FTable.Fields[Fieldno - 1].Asstring := value;
End;

Procedure TEzBDETable.First;
Begin
  FTable.First;
End;

Procedure TEzBDETable.FloatPut( Const FieldName: String; Const Value: Double );
Begin
  FTable.Fieldbyname( Fieldname ).AsFloat := value;
End;

Procedure TEzBDETable.FloatPutN( FieldNo: integer; Const Value: Double );
Begin
  FTable.Fields[FieldNo - 1].AsFloat := value;
End;

Procedure TEzBDETable.FlushDB;
Begin
  //pendiente
End;

Procedure TEzBDETable.Go( n: Integer );
Begin
  SetRecordNumber( FTable, n );
End;

Procedure TEzBDETable.IndexOn( Const IName, tag, keyexp, forexp: String;
  uniq: TEzIndexUnique; ascnd: TEzSortStatus );
Var
  IndexOptions: TIndexOptions;
Begin
  { tag receives the name of the new index
    keyexp is a semi-colon delimited list of fields to index on ex.:
    IndexOn('','FullName','LAST;FIRST','',iuUnique,ssDescending);}
  IndexOptions := [];
  If uniq = iuUnique Then IndexOptions := IndexOptions + [ixUnique];
  If ascnd = ssDescending Then IndexOptions := IndexOptions + [ixDescending];
  FTable.AddIndex( tag, keyexp, IndexOptions );
End;

Procedure TEzBDETable.IntegerPut( Const Fieldname: String; Value: Integer );
Begin
  FTable.FieldByname( Fieldname ).Asinteger := value;
End;

Procedure TEzBDETable.IntegerPutN( FieldNo: integer; Value: Integer );
Begin
  FTable.Fields[Fieldno - 1].AsInteger := value;
End;

Procedure TEzBDETable.Last;
Begin
  FTable.Last;
End;

Procedure TEzBDETable.LogicPut( Const fieldname: String; value: boolean );
Begin

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -