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

📄 ezimpl.pas

📁 很管用的GIS控件
💻 PAS
📖 第 1 页 / 共 5 页
字号:
Begin
  result := FDataSet.FieldByName( Fieldname ).AsInteger;
End;

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

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

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

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

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

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

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

Function TEzProviderTable.RecordCount: Integer;
Begin
  with TEzGis(Gis) do
    if Assigned( Provider) and Assigned( Provider.OnGetRecordCount) then
      Provider.OnGetRecordCount( Provider, FDataSet, Result );
End;

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

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

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

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

Procedure TEzProviderTable.Delete;
Begin
  with TEzGis(Gis) do
    if Assigned( Provider) and Assigned( Provider.OnDeleteRecord) then
      Provider.OnDeleteRecord( Provider, FDataSet );
End;

Procedure TEzProviderTable.Edit;
Begin
  FDataSet.Edit;
End;

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

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

Procedure TEzProviderTable.First;
Begin
  FDataSet.First;
End;

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

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

Procedure TEzProviderTable.FlushDB;
Begin
  with TEzGis(Gis) do
    if Assigned( Provider) and Assigned( Provider.OnFlushTable) then
      Provider.OnFlushTable( Provider, FDataSet );
End;

Procedure TEzProviderTable.Go( n: Integer );
Begin
  SetRecno( n );
End;

Procedure TEzProviderTable.IndexOn( Const IName, tag, keyexp, forexp: String;
  uniq: TEzIndexUnique; ascnd: TEzSortStatus );
Begin
  // this job must be done in database specific methods
End;

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

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

Procedure TEzProviderTable.Last;
Begin
  FDataSet.Last;
End;

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

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

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

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

Procedure TEzProviderTable.Next;
Begin
  FDataSet.Next;
End;

Procedure TEzProviderTable.Pack;
Begin
  with TEzGis(Gis) do
    if Assigned( Provider) and Assigned( Provider.OnPackTable) then
      Provider.OnPackTable( Provider, FDataSet );
End;

Procedure TEzProviderTable.Post;
Begin
  FDataSet.Post;
End;

Procedure TEzProviderTable.Prior;
Begin
  FDataSet.Prior;
End;

Procedure TEzProviderTable.Recall;
Begin
  with TEzGis(Gis) do
    if Assigned( Provider) and Assigned( Provider.OnRecallRecord) then
      Provider.OnRecallRecord( Provider, FDataSet );
End;

Procedure TEzProviderTable.Refresh;
Begin
  FDataSet.Refresh;
End;

Procedure TEzProviderTable.Reindex;
Begin
  // this job must be done in database specific methods
End;

Procedure TEzProviderTable.SetTagTo( Const TName: String );
Begin
  // this job must be done in database specific methods
End;

Procedure TEzProviderTable.SetUseDeleted( tf: boolean );
Begin
  with TEzGis(Gis) do
    if Assigned( Provider) and Assigned( Provider.OnSetUseDeleted) then
      Provider.OnSetUseDeleted( Provider, FDataSet, tf );
End;

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

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

Procedure TEzProviderTable.Zap;
Begin
  with TEzGis(Gis) do
    if Assigned( Provider) and Assigned( Provider.OnZapTable) then
      Provider.OnZapTable( Provider, FDataSet );
End;

{$ENDIF}



{$IFDEF BORLAND_BDE}


//************************ BORLAND BDE database implementation **********************

Type

  TEzBDETable = Class( TEzBaseTable )
  Private
    FTable: TTable;
  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 FloatGet( Const Fieldname: String ): Double; Override;
    Function FloatGetN( FieldNo: Integer ): Double; Override;
    Function IndexCount: integer; Override;
    Function IndexAscending( Value: integer ): boolean; Override;
    Function Index( Const INames, Tag: String ): integer; Override;
    Function IndexCurrent: String; Override;
    Function IndexUnique( Value: integer ): boolean; Override;
    Function IndexExpression( Value: integer ): String; Override;
    Function IndexTagName( Value: integer ): String; Override;
    Function IndexFilter( Value: integer ): String; Override;
    Function IntegerGet( Const FieldName: String ): Integer; Override;
    Function IntegerGetN( FieldNo: integer ): Integer; Override;
    Function LogicGet( Const FieldName: String ): Boolean; Override;
    Function LogicGetN( FieldNo: integer ): Boolean; Override;
    Procedure MemoSave( Const FieldName: String; Stream: TStream ); Override;
    Procedure MemoSaveN( FieldNo: integer; Stream: TStream ); Override;
    Function MemoSize( Const FieldName: String ): Integer; Override;
    Function MemoSizeN( FieldNo: integer ): Integer; Override;
    Function RecordCount: Integer; Override;
    Function StringGet( Const FieldName: String ): String; Override;
    Function StringGetN( FieldNo: integer ): String; Override;
    //Procedure CopyStructure( Const FileName, APassword: String ); Override;
    //Procedure CopyTo( Const FileName, APassword: String ); Override;
    Procedure DatePut( Const FieldName: String; value: TDateTime ); Override;
    Procedure DatePutN( FieldNo: integer; value: TDateTime ); Override;
    Procedure Delete; Override;
    Procedure Edit; Override;
    Procedure FieldPut( Const FieldName, Value: String ); Override;
    Procedure FieldPutN( FieldNo: integer; Const Value: String ); Override;
    Procedure First; Override;
    Procedure FloatPut( Const FieldName: String; Const Value: Double ); Override;
    Procedure FloatPutN( FieldNo: integer; Const Value: Double ); Override;
    Procedure FlushDB; Override;
    Procedure Go( n: Integer ); Override;
    Procedure IndexOn( Const IName, tag, keyexp, forexp: String;
      uniq: TEzIndexUnique; ascnd: TEzSortStatus ); Override;
    Procedure IntegerPut( Const Fieldname: String; Value: Integer ); Override;
    Procedure IntegerPutN( FieldNo: integer; Value: Integer ); Override;
    Procedure Last; Override;
    Procedure LogicPut( Const fieldname: String; value: boolean ); Override;
    Procedure LogicPutN( fieldno: integer; value: boolean ); Override;
    Procedure MemoLoad( Const fieldname: String; Stream: TStream ); Override;
    Procedure MemoLoadN( fieldno: integer; Stream: TStream ); Override;
    Procedure Next; Override;
    Procedure Pack; Override;
    Procedure Post; Override;
    Procedure Prior; Override;
    Procedure Recall; Override;
    Procedure Refresh; Override;
    Procedure Reindex; Override;
    Procedure SetTagTo( Const TName: String ); Override;
    Procedure SetUseDeleted( tf: boolean ); Override;
    Procedure StringPut( Const fieldname, value: String ); Override;
    Procedure StringPutN( fieldno: integer; Const value: String ); Override;
    Procedure Zap; Override;
    Function DBCreateTable( Const fname: String;
      AFieldList: TStringList ): boolean; Override;
    function DBTableExists( const TableName: string ): Boolean; Override;
    Function DBDropTable( const TableName: string): Boolean; Override;
    Function DBDropIndex( const TableName: string): Boolean; Override;
    Function DBRenameTable( const Source, Target: string): Boolean; Override;
  End;

//************************ BORLAND BDE database implementation **********************

Function TEzBDETable.DBRenameTable( const Source, Target: string): Boolean;
begin
  if FileExists( Source + '.dbf' ) then
    SysUtils.RenameFile( Source + '.dbf', Target + '.dbf');
  if FileExists( Source + '.cdx' ) then
    SysUtils.RenameFile( Source + '.cdx', Target + '.cdx');
  if FileExists( Source + '.fpt' ) then
    SysUtils.RenameFile( Source + '.fpt', Target + '.fpt');
end;

Function TEzBDETable.DBDropIndex( const TableName: string): Boolean;
begin
  //SysUtils.DeleteFile( ChangeFileExt( TableName, '.cdx' ));
end;

Function TEzBDETable.DBDropTable( const TableName: string): Boolean;
begin
  SysUtils.DeleteFile( Tablename + '.dbf' );
  SysUtils.DeleteFile( Tablename + '.cdx' );
  SysUtils.DeleteFile( Tablename + '.fpt' );
end;

function TEzBDETable.DBTableExists( const TableName: string ): Boolean;
begin
  Result:= FileExists( ChangeFileExt( TableName, '.dbf' ) );
end;

Function GetRecordNumber( DataSet: TBDEDataSet ): Integer;
Var
  CursorProps: CurProps;
  RecordProps: RECProps;
Begin
  Result := 0;
  With DataSet Do
  Begin
    If State = dsInactive Then Exit;
    Check( DbiGetCursorProps( Handle, CursorProps ) );
    UpdateCursorPos;
    Check( DbiGetRecord( Handle, dbiNOLOCK, Nil, @RecordProps ) );
    Case CursorProps.iSeqNums Of
      0: Result := RecordProps.iPhyRecNum;
      1: Result := RecordProps.iSeqNum;
    End;
  End;
End;

Procedure SetRecordNumber( DataSet: TBDEDataSet; RecNum: Integer );
Var
  CursorProps: CurProps;
Begin
  With DataSet Do
  Begin
    If State = dsInactive Then Exit;

    Check( DbiGetCursorProps( Handle, CursorProps ) );

    Case CursorProps.iSeqNums Of
      0: Check( DBISetToRecordNo( Handle, RecNum ) );
      1: Check( DBISetToSeqNo( Handle, RecNum ) );
    End;
  End;
  DataSet.ReSync( [] );
End;

Function TEzBDETable.DBCreateTable( Const fname: String;
  AFieldList: TStringList ): boolean;
Var
  s: String;
  v: boolean;
  i: integer;
  p: integer;
  fs: String;
  ft: String[1];
  fl: integer;
  fd: integer;

  Procedure LoadField;
  Begin
    v := true;
    p := Ansipos( ';', s );
    fs := '';
    If p > 0 Then
    Begin
      fs := System.Copy( s, 1, pred( p ) );
      System.Delete( s, 1, p );
    End
    Else
      v := false;

    p := Ansipos( ';', s );
    ft := ' ';
    If p = 2 Then
    Begin
      ft := System.Copy( s, 1, 1 );
      System.Delete( s, 1, p );
    End
    Else
      v := false;

    p := Ansipos( ';', s );
    fl := 0;
    If p > 0 Then
    Begin
      Try
        fl := StrToInt( System.Copy( s, 1, pred( p ) ) );
        System.Delete( s, 1, p );
      Except
        On Exception Do
          v := false;
      End;
    End
    Else
      v := false;

    fd := 0;
    Try
      fd := StrToInt( System.Copy( s, 1, 3 ) );
    Except

⌨️ 快捷键说明

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