asgsqlite3.pas

来自「DELPHI 访问SQLITE3 数据库的VCL控件」· PAS 代码 · 共 1,276 行 · 第 1/5 页

PAS
1,276
字号
    property OnEditError;
    property OnNewRecord;
    property OnPostError;
  end;
//============================================================================== TASQLite3Query

  TASQLite3Query = class(TASQLite3BaseQuery)
  private
    FUpdateSQL: TASQLite3UpdateSQL;
    FRawSQL: boolean;
    procedure SetSQL(const Value: TStrings);
    function GetSQL: TStrings;
    procedure QueryChanged(Sender: TObject);
  protected
    procedure InternalOpen; override;
    procedure InternalPost; override;
    procedure InternalDelete; override;
    procedure Notification(AComponent: TComponent; Operation: TOperation); override;
    procedure InternalClose; override;
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
//    property Params: TParams Read FParams Write SetParamsList Stored false;
    procedure SQLiteMasterChanged; override;
  published
    property RawSQL: boolean read FRawSQL write FRawSQL;
    property SQL: TStrings read GetSQL write SetSQL;
    property UpdateSQL: TASQLite3UpdateSQL read FUpdateSQL write FUpdateSQL;
  end;

//============================================================================== TASQLite3Table

  TASQLite3Table = class(TASQLite3BaseQuery)
  private
    FTableName: string;
    FOrderBy : string;
    FPrimaryAutoInc: boolean;
  protected
    procedure Notification(AComponent: TComponent; Operation: TOperation); override;
    procedure InternalOpen; override;
    procedure InternalPost; override;
    procedure InternalDelete; override;
    procedure SetFTableName(TableName : string);
    procedure SetFOrderBy(OrderBy : string);
  public
    procedure SQLiteMasterChanged; override;
  published
    property TableName: string read FTableName write SetFTableName;
    property PrimaryAutoInc: boolean read FPrimaryAutoInc write FPrimaryAutoInc;
    property OrderBy : string read FOrderBy write SetFOrderBy;
  end;

 //============================================================================== TASQLite3BlobStream

  TASQLite3BlobStream = class(TMemoryStream)
  private
    FField: TBlobField;
    FDataSet: TASQLite3BaseQuery;
    FMode: TBlobStreamMode;
    FModified: Boolean;
    FOpened: Boolean;
    procedure LoadBlobData;
    procedure SaveBlobData;
  public
    constructor Create(Field: TBlobField; Mode: TBlobStreamMode);
    destructor Destroy; override;
    function Read(var Buffer; Count: Longint): Longint; override;
    function Write(const Buffer; Count: Longint): Longint; override;
  end;


implementation

uses
  Math
{$IFDEF ASQLITE_D6PLUS}
  , StrUtils
{$endif}
  ;

function systemNoCaseCompare(db : TASQLite3DB; s1Len : integer; s1 : PAnsiChar; s2Len : integer; s2 : PAnsiChar) : integer; cdecl;
begin
  result := CompareText(s1, s2);
end;

function systemCompare(db : TASQLite3DB; s1Len : integer; s1 : PAnsiChar; s2Len : integer; s2 : PAnsiChar) : integer; cdecl;
begin
  result := CompareStr(s1, s2);
end;

// GPA - Static Link Start
{$IFDEF SQLite_Static}
Var
  __HandlerPtr:Pointer;

{$L 'OBJ\sqlite3_3_4.obj'}
{$L 'OBJ\_ftoul.OBJ'}
{$L 'OBJ\files.obj'}
{$L 'OBJ\strlen.obj'}
{$L 'OBJ\assert.obj'}
{$L 'OBJ\memcmp.obj'}
{$L 'OBJ\memcpy.obj'}
{$L 'OBJ\memset.obj'}
{$L 'OBJ\strcmp.obj'}
{$L 'OBJ\strcpy.obj'}
{$L 'OBJ\strcat.obj'}
{$L 'OBJ\strncmp.obj'}
{$L 'OBJ\strncpy.obj'}
{$L 'OBJ\strncat.obj'}
{$L 'OBJ\sprintf.obj'}
{$L 'OBJ\fprintf.obj'}
{$L 'OBJ\_ll.obj'}
{$L 'OBJ\ltoupper.obj'}
{$L 'OBJ\ltolower.obj'}
{$L 'OBJ\atol.obj'}
{$L 'OBJ\ftol.obj'}
{$L 'OBJ\longtoa.obj'}
{$L 'OBJ\hrdir_r.obj'}
{$L 'OBJ\gmtime.obj'}
{$L 'OBJ\tzdata.obj'}
{$L 'OBJ\initcvt.obj'}
{$L 'OBJ\streams.obj'}
{$L 'OBJ\scantod.obj'}
{$L 'OBJ\scanwtod.obj'}
{$L 'OBJ\allocbuf.obj'}
{$L 'OBJ\bigctype.obj'}
{$L 'OBJ\clocale.obj'}
{$L 'OBJ\clower.obj'}
{$L 'OBJ\cupper.obj'}
{$L 'OBJ\fflush.obj'}
{$L 'OBJ\fputn.obj'}
{$L 'OBJ\hrdir_s.obj'}
{$L 'OBJ\mbisspc.obj'}
{$L 'OBJ\mbsrchr.obj'}
{$L 'OBJ\realcvt.obj'}
{$L 'OBJ\realcvtw.obj'}
{$L 'OBJ\timefunc.obj'}
{$L 'OBJ\vprinter.obj'}
{$L 'OBJ\hugeval.obj'}
{$L 'OBJ\cvtfak.obj'}
{$L 'OBJ\getinfo.obj'}
{$L 'OBJ\qmul10.obj'}
{$L 'OBJ\fuildq.obj'}
{$L 'OBJ\_pow10.obj'}
{$L 'OBJ\ldtrunc.obj'}
{$L 'OBJ\cvtfakw.obj'}
{$L 'OBJ\wis.obj'}
{$L 'OBJ\xfflush.obj'}
{$L 'OBJ\flushout.obj'}
{$L 'OBJ\lputc.obj'}
{$L 'OBJ\hrdir_b.obj'}
{$L 'OBJ\realloc.obj'}
{$L 'OBJ\mbctype.obj'}
{$L 'OBJ\xcvt.obj'}
{$L 'OBJ\xcvtw.obj'}
{$L 'OBJ\wcscpy.obj'}
{$L 'OBJ\errno.obj'}
{$L 'OBJ\ctrl87.obj'}
{$L 'OBJ\timedata.obj'}
{$L 'OBJ\int64toa.obj'}
{$L 'OBJ\cvtentry.obj'}
{$L 'OBJ\mbyte1.obj'}
{$L 'OBJ\errormsg.obj'}
{$L 'OBJ\exit.obj'}
{$L 'OBJ\iswctype.obj'}
{$L 'OBJ\heap.obj'}
{$L 'OBJ\memmove.obj'}
{$L 'OBJ\fxam.obj'}
{$L 'OBJ\fuistq.obj'}
{$L 'OBJ\qdiv10.obj'}
{$L 'OBJ\wmemset.obj'}
{$L 'OBJ\wcslen.obj'}
{$L 'OBJ\_tzset.obj'}
{$L 'OBJ\deflt87.obj'}
{$L 'OBJ\mbschr.obj'}
{$L 'OBJ\mbsrchr.obj'}
{$L 'OBJ\ermsghlp.obj'}
{$L 'OBJ\patexit.obj'}
{$L 'OBJ\initexit.obj'}
{$L 'OBJ\virtmem.obj'}
{$L 'OBJ\tzset.obj'}
{$L 'OBJ\mbisdgt.obj'}
{$L 'OBJ\mbsnbcpy.obj'}
{$L 'OBJ\platform.obj'}
{$L 'OBJ\getenv.obj'}
{$L 'OBJ\mbisalp.obj'}
{$L 'OBJ\abort.obj'}
{$L 'OBJ\signal.obj'}
{$L 'OBJ\clear87.obj'}
{$L 'OBJ\abort.obj'}
{$L 'OBJ\handles.obj'}
{$L 'OBJ\_cfinfo.obj'}
{$L 'OBJ\__isatty.obj'}
{$L 'OBJ\handles.obj'} //duplicato NEEDED!!!!
{$L 'OBJ\perror.obj'}
{$L 'OBJ\fputs.obj'}
{$L 'OBJ\files2.obj'}
{$L 'OBJ\handles.obj'} //duplicato NEEDED !!!!!
{$L 'OBJ\ioerror.obj'}
{$L 'OBJ\__write.obj'}
{$L 'OBJ\_write.obj'}
{$L 'OBJ\__lseek.obj'}
{$L 'OBJ\ioerror.obj'}
{$L 'OBJ\perror.obj'} //duplicato NEEDED !!!!!!
{$L 'OBJ\setenvp.obj'}
{$L 'OBJ\calloc.obj'}
{$L 'OBJ\mbsnbcmp.obj'}
{$L 'OBJ\mbsnbicm.obj'}
{$L 'OBJ\is.obj'}
{$L 'OBJ\isctype.obj'}
{$L 'OBJ\bigctype.obj'}
{$L 'OBJ\globals.obj'}
{$L 'OBJ\hrdir_mf.obj'}
{$L 'OBJ\fpreset.obj'}
{$L 'OBJ\ta.obj'}
{$L 'OBJ\setexc.obj'}
{$L 'OBJ\defhandl.obj'}

  function _wsprintfA:integer; external 'user32.dll' name 'wsprintfA';
  procedure RtlUnwind; external 'NtDll.dll' name 'RtlUnwind';

  function  _sqlite3_open(dbname: PAnsiChar; var db: pointer): integer; cdecl; external;
  function  _sqlite3_close(db: pointer): integer; cdecl; external;
  function  _sqlite3_exec(DB: Pointer; SQLStatement: PAnsiChar; Callback: TSQLite3_Callback;
                          UserDate: Pointer; var ErrMsg: PAnsiChar): Integer; cdecl; external;
  function  _sqlite3_libversion: PAnsiChar; cdecl; external;
  function  _sqlite3_errmsg(db: pointer): PAnsiChar; cdecl; external;
  function  _sqlite3_get_table(db: Pointer; SQLStatement: PAnsiChar; var ResultPtr: Pointer;
                              var RowCount: cardinal; var ColCount: cardinal; var ErrMsg: PAnsiChar): integer; cdecl; external;
  procedure _sqlite3_free_table(Table: PAnsiChar); cdecl; external;
  procedure _sqlite3_free(P: PAnsiChar); cdecl; external;
  function  _sqlite3_complete(P: PAnsiChar): boolean; cdecl; external;
  function  _sqlite3_last_insert_rowid(db: Pointer): integer; cdecl; external;
  procedure _sqlite3_interrupt(db: Pointer); cdecl; external;
  procedure _sqlite3_busy_handler(db: Pointer; CallbackPtr: Pointer; Sender: TObject); cdecl; external;
  procedure _sqlite3_busy_timeout(db: Pointer; TimeOut: integer); cdecl; external;
  function  _sqlite3_changes(db: Pointer): integer; cdecl; external;
  function  _sqlite3_prepare(db: Pointer; SQLStatement: PAnsiChar; nBytes: integer;
                             var hstatement: pointer; var Tail: PAnsiChar): integer; cdecl; external;
  function  _sqlite3_finalize(hstatement: pointer): integer; cdecl; external;
  function  _sqlite3_reset(hstatement: pointer): integer; cdecl; external;
  function  _sqlite3_step(hstatement: pointer): integer; cdecl; external;
  function  _sqlite3_column_blob(hstatement: pointer; iCol: integer): pointer; cdecl; external;
  function  _sqlite3_column_bytes(hstatement: pointer; iCol: integer): integer; cdecl; external;
  function  _sqlite3_column_count(hstatement: pointer): integer; cdecl; external;
  function  _sqlite3_column_decltype(hstatement: pointer; iCol: integer): PAnsiChar; cdecl; external;
  function  _sqlite3_column_double(hstatement: pointer; iCol: integer): double; cdecl; external;
  function  _sqlite3_column_int(hstatement: pointer; iCol: integer): integer; cdecl; external;
  function  _sqlite3_column_int64(hstatement: pointer; iCol: integer): int64; cdecl; external;
  function  _sqlite3_column_name(hstatement: pointer; iCol: integer): PAnsiChar; cdecl; external;
  function  _sqlite3_column_text(hstatement: pointer; iCol: integer): PAnsiChar; cdecl; external;
  function  _sqlite3_column_type(hstatement: poi

⌨️ 快捷键说明

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