asgsqlite3.pas
来自「DELPHI 访问SQLITE3 数据库的VCL控件」· PAS 代码 · 共 1,276 行 · 第 1/5 页
PAS
1,276 行
BookMark: TList;
RowId: TList;
FLastBookmark: integer;
FBufSize: integer;
FDataSet: TASQLite3BaseQuery;
public
constructor Create(TheDataSet: TASQLite3BaseQuery);
destructor Destroy; override;
procedure FreeBlobs;
procedure SetBufSize(TheSize: integer);
procedure Add(TheBuffer: PAnsiChar; TheRowId: integer);
procedure Insert(Index: integer; TheBuffer: Pointer; TheRowId: integer);
procedure Delete(Index: integer);
function GetData(Index: integer): Pointer;
function Count: integer;
function IndexOf(TheBookMark: pointer): integer;
function GetBookmark(Index: integer): integer;
function GetRowId(Index: integer): integer;
end;
//============================================================================== TASQLite3UpdateSQL
TASQLite3UpdateSQL = class(TComponent)
private
FInsertSQL: TStrings;
FUpdateSQL: TStrings;
FDeleteSQL: TStrings;
procedure SetInsertSQL(const Value: TStrings);
procedure SetUpdateSQL(const Value: TStrings);
procedure SetDeleteSQL(const Value: TStrings);
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
published
property InsertSQL: TStrings read FInsertSQL write SetInsertSQL;
property UpdateSQL: TStrings read FUpdateSQL write SetUpdateSQL;
property DeleteSQL: TStrings read FDeleteSQL write SetDeleteSQL;
end;
//============================================================================== TASQLite3Output
TASQLite3Output = class(TComponent)
private
FActive: boolean;
FOutputType: string;
FTableClass: string;
FHeaderClass: string;
FCellClass: string;
FOutput: TStrings;
FSeparator: string;
FDataSource: TDataSource;
procedure SetOutput(const Value: TStrings);
procedure SetFActive(Active: boolean);
function GetOutput: TStrings;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
procedure Execute(MyDataSet: TDataSet);
protected
procedure Notification(AComponent: TComponent; Operation: TOperation); override;
published
property Active: boolean read FActive write SetFActive;
property DataSource: TDataSource read FDataSource write FDataSource;
property OutputType: string read FOutputType write FOutputType;
property TableClass: string read FTableClass write FTableClass;
property HeaderClass: string read FHeaderClass write FHeaderClass;
property CellClass: string read FCellClass write FCellClass;
property Output: TStrings read GetOutput write SetOutput;
property FieldSeparator: string read FSeparator write FSeparator;
end;
//============================================================================== TASQLite3BaseQuery
TASQLite3BaseQuery = class(TDataSet)
private
FParams: TParams;
FTypeLess: boolean;
FNoResults: boolean; // suppresses the creation of a result list
FAutoCommit: boolean;
FTransactionType: string;
FTableDateFormat: string;
FSQLiteDateFormat: boolean;
FResult: TFResult;
FSQL: TStrings;
FSQLCursor: boolean;
FPrepared: string;
FRecBufSize: integer;
FRecInfoOfs: integer;
FCurRec: integer;
FMasterFields: string;
FMasterSource: TDataSource;
FSaveChanges: boolean;
MaxStrLen: integer;
FConnection: TASQLite3DB;
FReadOnly: boolean;
FMaxResults: integer;
FStartResult: integer;
FUniDir : boolean;
FStatement : pointer;
CurrentRowId: integer;
SQLStr: string;
ResultStr: PAnsiChar;
RowId : integer;
RowIdCol : integer;
DetailList: TList;
procedure SetSQL(const Value: TStrings);
function UnpackBuffer(Buffer: PAnsiChar; FieldType: TFieldType): TConvertBuffer;
procedure SetDataSource(Value: TDataSource);
protected
function BuildFilter : string;
function SetQueryParams(InStr: string): string; //***
procedure SetParamsList(Value: TParams);
function GetParamsCount: word;
procedure RegisterDetailDataset(DetailDataSet: TASQLite3BaseQuery);
procedure LoadQueryData;
function GetActiveBuffer(var Buffer: PAnsiChar): boolean;
function GetDataSource: TDataSource; override;
procedure NotifySQLiteMasterChanged;
function GetFieldValue(const AField: TField; const Blobs: TList = nil): string; // added by Donnie
{ Overriden abstract methods (required) }
function AllocRecordBuffer: PAnsiChar; override;
procedure FreeRecordBuffer(var Buffer: PAnsiChar); override;
procedure GetBookmarkData(Buffer: PAnsiChar; Data: Pointer); override;
function GetBookmarkFlag(Buffer: PAnsiChar): TBookmarkFlag; override;
function GetRecord(Buffer: PAnsiChar; GetMode: TGetMode;
DoCheck: boolean): TGetResult; override;
function GetRecordSize: word; override;
procedure InternalAddRecord(Buffer: Pointer; Append: boolean); override;
procedure InternalClose; override;
procedure InternalDelete; override;
procedure InternalFirst; override;
procedure InternalGotoBookmark(Bookmark: Pointer); override;
procedure InternalHandleException; override;
procedure InternalInitFieldDefs; override;
procedure InternalInitRecord(Buffer: PAnsiChar); override;
procedure InternalLast; override;
procedure InternalOpen; override;
procedure InternalPost; override;
procedure InternalSetToRecord(Buffer: PAnsiChar); override;
procedure OpenCursor(InfoQuery: Boolean); override; // GPA
function IsCursorOpen: boolean; override;
procedure SetBookmarkFlag(Buffer: PAnsiChar; Value: TBookmarkFlag); override;
procedure SetBookmarkData(Buffer: PAnsiChar; Data: Pointer); override;
procedure SetFieldData(Field: TField; Buffer: Pointer); override;
function GetFieldSize(FieldNo: integer): integer; overload;
function GetFieldSize(Field: TField): integer; overload;
function GetNativeFieldSize(FieldNo: integer): integer;
function GetFieldOffset(FieldNo: integer): integer;
function GetCalcFieldOffset(Field: TField): integer;
function isNullSrc(SrcBuffer: pAnsiChar; fieldNo : integer) : boolean;
procedure setNullSrc(SrcBuffer: pAnsiChar; fieldNo : integer; aNull : boolean);
function GetMasterFields: string;
procedure SetMasterFields(const Value: string);
{ Additional overrides (optional) }
function GetRecordCount: integer; override;
function GetRecNo: integer; override;
procedure SetRecNo(Value: integer); override;
property BaseSQL: TStrings read FSQL write SetSQL;
procedure SetSQLiteDateFormat(const Value: boolean);
procedure SetFilterText(const Value: string); override;
procedure DataConvert(Field: TField; Source, Dest: Pointer; ToNative: Boolean); override;//\\\
function CalcFieldInList(const List: string): Boolean; // John Lito
{$IFDEF IPROVIDER}
{***** IProviderSupport - Begin *****}
//-----| These are not necessary until the moment!
// procedure PSGetAttributes(List: TList); virtual;
// function PSGetDefaultOrder: TIndexDef; virtual;
// function PSGetIndexDefs(IndexTypes: TIndexOptions): TIndexDefs; virtual;
//-----| These are necessary to support IProvider
procedure PSEndTransaction(Commit: Boolean); override;
procedure PSExecute; override;
function PSExecuteStatement(const ASQL: string; AParams: TParams; ResultSet: Pointer = nil): Integer; override;
function PSGetParams: TParams; override;
function PSGetTableName: string; override;
function PSGetUpdateException(E: Exception; Prev: EUpdateError): EUpdateError; override;
function PSInTransaction: Boolean; override;
function PSIsSQLBased: Boolean; override;
function PSIsSQLSupported: Boolean; override;
procedure PSReset; override;
procedure PSSetCommandText(const CommandText: string); override;
procedure PSSetParams(AParams: TParams); override;
procedure PSStartTransaction; override;
function PSUpdateRecord(UpdateKind: TUpdateKind; Delta: TDataSet): Boolean; override;
function PSGetQuoteChar: string; override;
function PSGetKeyFields: string; override;
{***** IProviderSupport - End *****}
{$ENDIF}
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
procedure ExecSQL;
procedure StartTransaction;
procedure StartDeferredTransaction;
procedure StartImmediateTransaction;
procedure StartExclusiveTransaction;
procedure Commit;
procedure RollBack;
procedure SetFiltered(Value: Boolean); override;
procedure SQLiteMasterChanged; virtual;
function GetFieldData(Field: TField; Buffer: Pointer): boolean; override;
function GetFieldData(FieldNo: integer; Buffer: Pointer): boolean; override; // 20040225
function GetLastInsertRow: integer;
{$IFDEF ASQLITE_D6PLUS}
// function GetFieldData(Field: TField; Buffer: Pointer; NativeFormat: boolean): boolean; override;
{$ENDIF}
function CompareBookmarks(Bookmark1, Bookmark2: TBookmark): Integer; override; //MS
function CreateBlobStream(Field: TField; Mode: TBlobStreamMode): TStream; override;
function Locate(const KeyFields: string; const KeyValues: variant; Options: TLocateOptions): boolean; override;
function BookmarkValid(Bookmark: Pointer): boolean; override;
// function LocateNearest(const KeyFields: String; const KeyValues: Variant; Options: TLocateOptions): Boolean;
property Params: TParams read FParams write SetParamsList stored false;
function Lookup(const KeyFields: string; const KeyValues: Variant; // John Lito
const ResultFields: string): Variant; override; // John Lito
function GetFieldBufferIndex(Field: TField): integer; // Sean
published
property AutoCommit: boolean read FAutoCommit write FAutoCommit default true;
property TransactionType: string read FTransactionType write FTransactionType;
property SQLiteDateFormat: boolean read FSQLiteDateFormat write SetSQLiteDateFormat;
property TableDateFormat: string read FTableDateFormat write FTableDateFormat;
property Connection: TASQLite3DB read FConnection write FConnection;
property MaxResults: integer read FMaxResults write FMaxResults;
property StartResult: integer read FStartResult write FStartResult;
property TypeLess: boolean read FTypeLess write FTypeLess;
property MasterFields: string read GetMasterFields write SetMasterFields;
property MasterSource: TDataSource read GetDataSource write SetDataSource;
property SQLCursor: boolean read FSQLCursor write FSQLCursor;
property ReadOnly: boolean read FreadOnly write FReadOnly;
property UniDirectional : boolean read FUniDir write FUniDir;
property AutoCalcFields;
property Filter;
property Filtered;
property Active;
property BeforeOpen;
property AfterOpen;
property BeforeClose;
property AfterClose;
property BeforeInsert;
property AfterInsert;
property BeforeEdit;
property AfterEdit;
property BeforePost;
property AfterPost;
property BeforeCancel;
property AfterCancel;
property BeforeDelete;
property AfterDelete;
property BeforeScroll;
property AfterScroll;
{$IFDEF ASQLITE_D6PLUS}
property BeforeRefresh;
property AfterRefresh;
{$ENDIF}
property OnCalcFields;
property OnDeleteError;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?