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

📄 ezimpl.pas

📁 很管用的GIS控件
💻 PAS
📖 第 1 页 / 共 5 页
字号:
Function TEzDBISAMTable.FieldDec( FieldNo: integer ): integer;
Var
  Datatype: TFieldType;
Begin
  Datatype := FDBISAMTable.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 := FDBISAMTable.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 TEzDBISAMTable.FieldGet( Const FieldName: String ): String;
Begin
  result := FDBISAMTable.FieldByName( FieldName ).AsString;
End;

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

Function TEzDBISAMTable.FieldLen( FieldNo: integer ): integer;
Var
  Datatype: TFieldType;
Begin
  Datatype := FDBISAMTable.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 := FDBISAMTable.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 TEzDBISAMTable.FieldNo( Const FieldName: String ): integer;
Var
  Field: TField;
Begin
  Field := FDBISAMTable.FindField( FieldName );
  If Field = Nil Then
    Result := 0
  Else
    Result := Field.Index + 1;
End;

Function TEzDBISAMTable.FieldType( FieldNo: integer ): char;
Var
  Datatype: TFieldType;
Begin
  Datatype := FDBISAMTable.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 TEzDBISAMTable.Find( Const ss: String; IsExact, IsNear: boolean ): boolean;
Begin
  result := FDBISAMTable.FindKey( [ss] ); // findkey used for now
End;

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

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

Function TEzDBISAMTable.IndexCount: integer;
Begin
  result := FDBISAMTable.IndexDefs.Count;
End;

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

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

Function TEzDBISAMTable.IndexCurrent: String;
Begin
  result := FDBISAMTable.IndexName;
End;

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

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

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

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

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

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

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

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

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

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

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

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

Function TEzDBISAMTable.RecordCount: Integer;
Begin
  result := FDBISAMTable.PhysicalRecordCount;
End;

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

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

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

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

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

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

Procedure TEzDBISAMTable.Delete;
Begin
  // only mark as deleted
  FDBISAMTable.Edit;
  FDBISAMTable.FieldByName( 'DELETED' ).AsBoolean := True;
  FDBISAMTable.Post;
End;

Procedure TEzDBISAMTable.Edit;
Begin
  FDBISAMTable.Edit;
End;

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

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

Procedure TEzDBISAMTable.First;
Begin
  FDBISAMTable.First;
End;

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

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

Procedure TEzDBISAMTable.FlushDB;
Begin
  FDBISAMTable.FlushBuffers;
End;

Procedure TEzDBISAMTable.Go( n: Integer );
Begin
  FDBISAMTable.IndexName := '';
  If Not FDBISAMTable.FindKey( [n] ) Then
    EzGisError( 'Record not found !' );
End;

Procedure TEzDBISAMTable.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];
  FDBISAMTable.AddIndex( tag, keyexp, IndexOptions );
End;

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

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

Procedure TEzDBISAMTable.Last;
Begin
  FDBISAMTable.Last;
End;

Procedure TEzDBISAMTable.LogicPut( Const fieldname: String; value: boolean );
Begin
  FDBISAMTable.FieldByname( Fieldname ).asboolean := value;
End;

Procedure TEzDBISAMTable.LogicPutN( fieldno: integer; value: boolean );
Begin
  FDBISAMTable.fields[fieldno - 1].asboolean := value;
End;

Procedure TEzDBISAMTable.MemoLoad( Const fieldname: String; Stream: TStream );
Var
  field: TField;
Begin
  field := FDBISAMTable.FindField( Fieldname );
  If field = Nil Then Exit;
  MemoLoadN( field.index + 1, Stream );
End;

Procedure TEzDBISAMTable.MemoLoadN( fieldno: integer; Stream: TStream );
Begin
  ( FDBISAMTable.Fields[fieldno - 1] As TBlobfield ).SaveToStream( stream );
  stream.seek( 0, 0 );
End;

Procedure TEzDBISAMTable.Next;
Begin
  FDBISAMTable.Next;
End;

Procedure TEzDBISAMTable.Pack;
Begin
  FDBISAMTable.First;
  While Not FDBISAMTable.Eof Do
  Begin
    If FDBISAMTable.FieldByName( 'DELETED' ).AsBoolean Then
      FDBISAMTable.Delete
    Else
      FDBISAMTable.Next;
  End;
End;

Procedure TEzDBISAMTable.Post;
Begin
  FDBISAMTable.Post;
End;

Procedure TEzDBISAMTable.Prior;
Begin
  FDBISAMTable.Prior;
End;

Procedure TEzDBISAMTable.Recall;
Begin
  If FDBISAMTable.FieldByname( 'DELETED' ).AsBoolean Then
  Begin
    FDBISAMTable.Edit;
    FDBISAMTable.FieldByname( 'DELETED' ).AsBoolean := False;
    FDBISAMTable.Post;
  End;
End;

Procedure TEzDBISAMTable.Refresh;
Begin
  FDBISAMTable.Refresh;
End;

Procedure TEzDBISAMTable.Reindex;
Begin
  // nothing to do
End;

Procedure TEzDBISAMTable.SetTagTo( Const TName: String );
Begin
  FDBISAMTable.IndexName := TName;
End;

Procedure TEzDBISAMTable.SetUseDeleted( tf: boolean );
Begin
  // nothing to do
End;

Procedure TEzDBISAMTable.StringPut( Const fieldname, value: String );
Begin
  FDBISAMTable.FieldByname( fieldname ).Asstring := value;
End;

Procedure TEzDBISAMTable.StringPutN( fieldno: integer; Const value: String );
Begin
  FDBISAMTable.Fields[Fieldno - 1].Asstring := value;
End;

Procedure TEzDBISAMTable.Zap;
Begin
  FDBISAMTable.EmptyTable;
End;

{$ENDIF}


{$IFDEF HALCYONDB}

//************************ Using Halcyon tables **********************

Type

  TEzHalcyonTable = Class( TEzBaseTable )
  Private
    FgsDbfTable: TgsDBFTable;
  Protected
    Function GetActive: boolean; Override;
    Procedure SetActive( Value: boolean ); Override;
    Function GetRecNo: Integer; Override;
    Procedure SetRecNo( Value: Integer ); Override;
  Public
    Constructor Create( Gis: TEzBaseGIS; Const FName: String;
      ReadWrite, Shared: boolean ); Override;
    Destructor Destroy; Override;
    Procedure Append( NewRecno: Integer ); Override;
    Function BOF: Boolean; Override;
    Function EOF: Boolean; Override;
    Function DateGet( Const FieldName: String ): TDateTime; Override;
    Function DateGetN( FieldNo: integer ): TDateTime; Override;
    Function Deleted: Boolean; Override;
    Function Field( FieldNo: integer ): String; Override;
    Function FieldCount: integer; Override;
    Function FieldDec( FieldNo: integer ): integer; Override;
    Function FieldGet( Const FieldName: String ): String; Override;
    Function FieldGetN( FieldNo: integer ): String; Override;
    Function FieldLen( FieldNo: integer ): integer; Override;
    Function FieldNo( Const FieldName: String ): integer; Override;
    Function FieldType( FieldNo: integer ): char; Override;
    Function Find( Const ss: String; IsExact, IsNear: boolean ): boolean; Override;
    Function F

⌨️ 快捷键说明

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