/components/lazreport/source/lr_dbrel.pas
http://github.com/graemeg/lazarus · Pascal · 139 lines · 103 code · 23 blank · 13 comment · 9 complexity · 55f2a252c14d91182cd510892fce201f MD5 · raw file
- {*****************************************}
- { }
- { FastReport v2.3 }
- { DB related stuff }
- { }
- { Copyright (c) 1998-99 by Tzyganenko A. }
- { }
- {*****************************************}
- unit LR_DBRel;
- interface
- {$I LR_Vers.inc}
- uses
- SysUtils, Classes, DB;
- const
- frEmptyBookmark = nil;
- type
- { TODO -oalexs : Remove this }
- TfrBookmark = TBookmark;
- TfrTDataSet =class(TDataSet);
- TfrTField = class(TField);
- TfrTBlobField = class(TBlobField);
- function frIsBlob(Field: TfrTField): Boolean;
- function frIsBookmarksEqual(DataSet: TfrTDataSet; b1, b2: TfrBookmark): Boolean;
- procedure frGetFieldNames(DataSet: TfrTDataSet; List: TStrings);
- function frGetBookmark(DataSet: TfrTDataSet): TfrBookmark;
- procedure frFreeBookmark(DataSet: TfrTDataSet; Bookmark: TfrBookmark);
- procedure frGotoBookmark(DataSet: TfrTDataSet; Bookmark: TfrBookmark);
- function frGetDataSource(Owner: TComponent; d: TDataSet): TDataSource;
- function lrGetFieldValue(F:TField):Variant;
- const
- TypeStringField = [ftString, ftMemo, ftFmtMemo, ftFixedChar, ftWideString,
- ftFixedWideChar, ftWideMemo];
- TypeNumericField = [ftFloat, ftCurrency, ftBCD, ftDate, ftTime, ftDateTime,
- ftTimeStamp];
- TypeIntegerField = [ftSmallint, ftInteger, ftWord, ftAutoInc, ftLargeint];
- TypeBooleanField = [ftBoolean];
- implementation
- uses LR_Utils;
- function frIsBlob(Field: TfrTField): Boolean;
- begin
- Result := (Field <> nil) and (Field.DataType in [ftBlob..ftTypedBinary]);
- end;
- procedure frGetFieldNames(DataSet: TfrTDataSet; List: TStrings);
- begin
- if not Assigned(DataSet) then exit;
- if DataSet.FieldCount > 0 then
- DataSet.GetFieldNames(List)
- else
- begin
- { DataSet.Open;
- DataSet.GetFieldNames(List);
- DataSet.Close;}
- DataSet.FieldDefs.Update;
- DataSet.FieldDefs.GetItemNames(List);
- end;
- end;
- function frGetBookmark(DataSet: TfrTDataSet): TfrBookmark;
- begin
- Result := DataSet.GetBookmark;
- end;
- procedure frGotoBookmark(DataSet: TfrTDataSet; Bookmark: TfrBookmark);
- begin
- DataSet.GotoBookmark(BookMark);
- end;
- function frGetDataSource(Owner: TComponent; d: TDataSet): TDataSource;
- var
- i: Integer;
- sl: TStringList;
- ds: TDataSource;
- begin
- sl := TStringList.Create;
- Result := nil;
- frGetComponents(Owner, TDataSource, sl, nil);
- for i := 0 to sl.Count - 1 do
- begin
- ds := frFindComponent(Owner, sl[i]) as TDataSource;
- if (ds <> nil) and (ds.DataSet = d) then
- begin
- Result := ds;
- break;
- end;
- end;
- sl.Free;
- end;
- function lrGetFieldValue(F: TField): Variant;
- begin
- if Assigned(F) then
- begin
- if F.IsNull then
- begin
- if F.DataType in TypeStringField then
- Result:=''
- else
- if F.DataType in (TypeIntegerField + TypeNumericField) then
- Result:=0
- else
- if F.DataType in TypeBooleanField then
- Result:=false
- else
- Result:=null
- end
- else
- Result:=F.Value;
- end
- else
- Result:=null;
- end;
- procedure frFreeBookmark(DataSet: TfrTDataSet; Bookmark: TfrBookmark);
- begin
- DataSet.FreeBookmark(BookMark);
- end;
- function frIsBookmarksEqual(DataSet: TfrTDataSet; b1, b2: TfrBookmark): Boolean;
- begin
- Result := DataSet.CompareBookmarks(b1, b2) = 0;
- end;
- end.