📄 ezimpl.pas
字号:
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 + -