disqlite3database.pas

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

PAS
2,333
字号
function sqlite3_get_str16(
  const ADb: TDISQLite3DatabaseHandle;
  const ASQL: WideString;
  out AValue: WideString): Integer;
begin
  Result := sqlite3_exec_with_callback16(ADb, ASQL, sqlite3_get_str16_callback, @AValue);
  if Result = SQLITE_ABORT then Result := SQLITE_OK;
end;

function sqlite3_get_pragma_boolean(
  const ADb: TDISQLite3DatabaseHandle;
  const APragma: AnsiString;
  out APragmaValue: Boolean;
  const ADatabaseName: AnsiString = ''): Integer;
begin
  Result := sqlite3_get_boolean(ADb, sqlite3_pragma_database(ADatabaseName) + APragma + ';', APragmaValue);
end;

{$IFNDEF SQLITE_OMIT_UTF16}

function sqlite3_get_pragma_boolean16(
  const ADb: TDISQLite3DatabaseHandle;
  const APragma: WideString;
  out APragmaValue: Boolean;
  const ADatabaseName: WideString = ''): Integer;
begin
  Result := sqlite3_get_boolean16(ADb, sqlite3_pragma_database16(ADatabaseName) + APragma + ';', APragmaValue);
end;
{$ENDIF !SQLITE_OMIT_UTF16}

function sqlite3_set_pragma_boolean(
  const ADb: TDISQLite3DatabaseHandle;
  const APragma: AnsiString;
  const APragmaValue: Boolean;
  const ADatabaseName: AnsiString = ''): Integer;
begin
  Result := sqlite3_exec_with_callback(ADb, sqlite3_pragma_database(ADatabaseName) + APragma + '=' + BOOLEAN_TO_ANSICHAR[APragmaValue] + ';');
end;

{$IFNDEF SQLITE_OMIT_UTF16}

function sqlite3_set_pragma_boolean16(
  const ADb: TDISQLite3DatabaseHandle;
  const APragma: WideString;
  const APragmaValue: Boolean;
  const ADatabaseName: WideString = ''): Integer;
begin
  Result := sqlite3_exec_once16(ADb, sqlite3_pragma_database16(ADatabaseName) + APragma + '=' + BOOLEAN_TO_WIDECHAR[APragmaValue] + ';');
end;
{$ENDIF !SQLITE_OMIT_UTF16}

function sqlite3_get_pragma_int(
  const ADb: TDISQLite3DatabaseHandle;
  const APragma: AnsiString;
  out APragmaValue: Integer;
  const ADatabaseName: AnsiString = ''): Integer;
begin
  Result := sqlite3_get_int(ADb, sqlite3_pragma_database(ADatabaseName) + APragma + ';', APragmaValue);
end;

{$IFNDEF SQLITE_OMIT_UTF16}
function sqlite3_get_pragma_int16(
  const ADb: TDISQLite3DatabaseHandle;
  const APragma: WideString;
  out APragmaValue: Integer;
  const ADatabaseName: WideString = ''): Integer;
begin
  Result := sqlite3_get_int16(ADb, sqlite3_pragma_database16(ADatabaseName) + APragma + ';', APragmaValue);
end;
{$ENDIF !SQLITE_OMIT_UTF16}

function sqlite3_set_pragma_int(
  const ADb: TDISQLite3DatabaseHandle;
  const APragma: AnsiString;
  const APragmaValue: Integer;
  const ADatabaseName: AnsiString = ''): Integer;
begin
  Result := sqlite3_exec_with_callback(ADb, sqlite3_pragma_database(ADatabaseName) + APragma + '=' + IntToStr(APragmaValue) + ';');
end;

{$IFNDEF SQLITE_OMIT_UTF16}
function sqlite3_set_pragma_int16(
  const ADb: TDISQLite3DatabaseHandle;
  const APragma: WideString;
  const APragmaValue: Integer;
  const ADatabaseName: WideString = ''): Integer;
begin
  Result := sqlite3_exec_once16(ADb, sqlite3_pragma_database16(ADatabaseName) + APragma + '=' + IntToStr(APragmaValue) + ';');
end;
{$ENDIF !SQLITE_OMIT_UTF16}

function sqlite3_get_pragma_str(
  const ADb: TDISQLite3DatabaseHandle;
  const APragma: AnsiString;
  out APragmaValue: AnsiString;
  const ADatabaseName: AnsiString = ''): Integer;
begin
  Result := sqlite3_get_str(ADb, sqlite3_pragma_database(ADatabaseName) + APragma + ';', APragmaValue);
end;

{$IFNDEF SQLITE_OMIT_UTF16}
function sqlite3_get_pragma_str16(
  const ADb: TDISQLite3DatabaseHandle;
  const APragma: WideString;
  out APragmaValue: WideString;
  const ADatabaseName: WideString = ''): Integer;
begin
  Result := sqlite3_get_str16(ADb, sqlite3_pragma_database16(ADatabaseName) + APragma + ';', APragmaValue);
end;
{$ENDIF !SQLITE_OMIT_UTF16}

function sqlite3_set_pragma_str(
  const ADb: TDISQLite3DatabaseHandle;
  const APragma: AnsiString;
  const APragmaValue: AnsiString;
  const ADatabaseName: AnsiString = ''): Integer;
begin
  Result := sqlite3_exec_with_callback(ADb, sqlite3_pragma_database(ADatabaseName) + APragma + '=' + DISQLite3Api.QuotedStr(APragmaValue, '''') + ';');
end;

{$IFNDEF SQLITE_OMIT_UTF16}

function sqlite3_pragma_set_str16(
  const ADb: TDISQLite3DatabaseHandle;
  const APragma: WideString;
  const APragmaValue: WideString;
  const ADatabaseName: WideString = ''): Integer;
begin
  Result := sqlite3_exec_once16(ADb, sqlite3_pragma_database16(ADatabaseName) + APragma + '=' + DISQLite3Api.QuotedStr16(APragmaValue, '''') + ';');
end;
{$ENDIF !SQLITE_OMIT_UTF16}

function sqlite3_get_default_cache_size(
  const ADb: TDISQLite3DatabaseHandle;
  out ADefaultCacheSize: Integer;
  const ADatabaseName: AnsiString = ''): Integer;
begin
  Result := sqlite3_get_pragma_int(ADb, 'default_cache_size', ADefaultCacheSize, ADatabaseName);
end;

{$IFNDEF SQLITE_OMIT_UTF16}
function sqlite3_get_default_cache_size16(
  const ADb: TDISQLite3DatabaseHandle;
  out ADefaultCacheSize: Integer;
  const ADatabaseName: WideString = ''): Integer;
begin
  Result := sqlite3_get_pragma_int16(ADb, 'default_cache_size', ADefaultCacheSize, ADatabaseName);
end;
{$ENDIF !SQLITE_OMIT_UTF16}

function sqlite3_set_default_cache_size(
  const ADb: TDISQLite3DatabaseHandle;
  const ADefaultCacheSize: Integer;
  const ADatabaseName: AnsiString = ''): Integer;
begin
  Result := sqlite3_set_pragma_int(ADb, 'default_cache_size', ADefaultCacheSize, ADatabaseName);
end;

{$IFNDEF SQLITE_OMIT_UTF16}
function sqlite3_set_default_cache_size16(
  const ADb: TDISQLite3DatabaseHandle;
  const ADefaultCacheSize: Integer;
  const ADatabaseName: WideString = ''): Integer;
begin
  Result := sqlite3_set_pragma_int16(ADb, 'default_cache_size', ADefaultCacheSize, ADatabaseName);
end;
{$ENDIF !SQLITE_OMIT_UTF16}

function sqlite3_get_empty_result_callbacks(
  const ADb: TDISQLite3DatabaseHandle;
  out AEmptyResultCallbacks: Boolean): Integer;
begin
  Result := sqlite3_get_pragma_boolean(ADb, 'empty_result_callbacks', AEmptyResultCallbacks);
end;

function sqlite3_set_empty_result_callbacks(
  const ADb: TDISQLite3DatabaseHandle;
  const AEmptyResultCallbacks: Boolean): Integer;
begin
  Result := sqlite3_set_pragma_boolean(ADb, 'empty_result_callbacks', AEmptyResultCallbacks);
end;

function sqlite3_pragma_get_encoding(
  const ADb: TDISQLite3DatabaseHandle;
  out AEncoding: AnsiString;
  const ADatabaseName: AnsiString = ''): Integer;
begin
  Result := sqlite3_get_pragma_str(ADb, 'encoding', AEncoding, ADatabaseName);
end;

{$IFNDEF SQLITE_OMIT_UTF16}

function sqlite3_pragma_get_encoding16(
  const ADb: TDISQLite3DatabaseHandle;
  out AEncoding: WideString;
  const ADatabaseName: WideString = ''): Integer;
begin
  Result := sqlite3_get_pragma_str16(ADb, 'encoding', AEncoding, ADatabaseName);
end;
{$ENDIF !SQLITE_OMIT_UTF16}

function sqlite3_set_encoding(
  const ADb: TDISQLite3DatabaseHandle;
  const AEncoding: AnsiString;
  const ADatabaseName: AnsiString = ''): Integer;
begin
  Result := sqlite3_set_pragma_str(ADb, 'encoding', AEncoding, ADatabaseName);
end;

{$IFNDEF SQLITE_OMIT_UTF16}

function sqlite3_set_encoding16(
  const ADb: TDISQLite3DatabaseHandle;
  const AEncoding: WideString;
  const ADatabaseName: WideString = ''): Integer;
begin
  Result := sqlite3_pragma_set_str16(ADb, 'encoding', AEncoding, ADatabaseName);
end;
{$ENDIF !SQLITE_OMIT_UTF16}

function sqlite3_get_schema_version(
  const ADb: TDISQLite3DatabaseHandle;
  out ASchemaVersion: Integer;
  const ADatabaseName: AnsiString = ''): Integer;
begin
  Result := sqlite3_get_pragma_int(ADb, 'schema_version', ASchemaVersion, ADatabaseName);
end;

{$IFNDEF SQLITE_OMIT_UTF16}

function sqlite3_get_schema_version16(
  const ADb: TDISQLite3DatabaseHandle;
  out ASchemaVersion: Integer;
  const ADatabaseName: WideString = ''): Integer;
begin
  Result := sqlite3_get_pragma_int16(ADb, 'schema_version', ASchemaVersion, ADatabaseName);
end;
{$ENDIF !SQLITE_OMIT_UTF16}

function sqlite3_set_schema_version(
  const ADb: TDISQLite3DatabaseHandle;
  const ASchemaVersion: Integer;
  const ADatabaseName: AnsiString = ''): Integer;
begin
  Result := sqlite3_set_pragma_int(ADb, 'schema_version', ASchemaVersion, ADatabaseName);
end;

{$IFNDEF SQLITE_OMIT_UTF16}

function sqlite3_set_schema_version16(
  const ADb: TDISQLite3DatabaseHandle;
  const ASchemaVersion: Integer;
  const ADatabaseName: WideString = ''): Integer;
begin
  Result := sqlite3_set_pragma_int16(ADb, 'schema_version', ASchemaVersion, ADatabaseName);
end;
{$ENDIF !SQLITE_OMIT_UTF16}

function sqlite3_get_user_version(
  const ADb: TDISQLite3DatabaseHandle;
  out AUserVersion: Integer;
  const ADatabaseName: AnsiString = ''): Integer;
begin
  Result := sqlite3_get_pragma_int(ADb, 'user_version', AUserVersion, ADatabaseName);
end;

{$IFNDEF SQLITE_OMIT_UTF16}

function sqlite3_get_user_version16(
  const ADb: TDISQLite3DatabaseHandle;
  out AUserVersion: Integer;
  const ADatabaseName: WideString = ''): Integer;
begin
  Result := sqlite3_get_pragma_int16(ADb, 'user_version', AUserVersion, ADatabaseName);
end;
{$ENDIF !SQLITE_OMIT_UTF16}

function sqlite3_set_user_version(
  const ADb: TDISQLite3DatabaseHandle;
  const AUserVersion: Integer;
  const ADatabaseName: AnsiString = ''): Integer;
begin
  Result := sqlite3_set_pragma_int(ADb, 'user_version', AUserVersion, ADatabaseName);
end;

{$IFNDEF SQLITE_OMIT_UTF16}

function sqlite3_pragma_set_user_version16(
  const ADb: TDISQLite3DatabaseHandle;
  const AUserVersion: Integer;
  const ADatabaseName: WideString = ''): Integer;
begin
  Result := sqlite3_set_pragma_int16(ADb, 'user_version', AUserVersion, ADatabaseName);
end;
{$ENDIF !SQLITE_OMIT_UTF16}

function sqlite3_get_auto_vacuum(
  const ADb: TDISQLite3DatabaseHandle;
  out AAutoVacuum: Boolean;
  const ADatabaseName: AnsiString = ''): Integer;
begin
  Result := sqlite3_get_pragma_boolean(ADb, 'auto_vacuum', AAutoVacuum, ADatabaseName);
end;

{$IFNDEF SQLITE_OMIT_UTF16}

function sqlite3_get_auto_vacuum16(
  const ADb: TDISQLite3DatabaseHandle;
  out AAutoVacuum: Boolean;
  const ADatabaseName: WideString = ''): Integer;
begin
  Result := sqlite3_get_pragma_boolean16(ADb, 'auto_vacuum', AAutoVacuum, ADatabaseName);
end;
{$ENDIF !SQLITE_OMIT_UTF16}

function sqlite3_set_auto_vacuum(
  const ADb: TDISQLite3DatabaseHandle;
  const AAutoVacuum: Boolean;
  const ADatabaseName: AnsiString = ''): Integer;
begin
  Result := sqlite3_set_pragma_boolean(ADb, 'auto_vacuum', AAutoVacuum, ADatabaseName);
end;

{$IFNDEF SQLITE_OMIT_UTF16}

function sqlite3_set_auto_vacuum16(
  const ADb: TDISQLite3DatabaseHandle;
  const AAutoVacuum: Boolean;
  const ADatabaseName: WideString = ''): Integer;
begin
  Result := sqlite3_set_pragma_boolean16(ADb, 'auto_vacuum', AAutoVacuum, ADatabaseName);
end;
{$ENDIF !SQLITE_OMIT_UTF16}

function sqlite3_get_cache_size(
  const ADb: TDISQLite3DatabaseHandle;
  out ACacheSize: Integer;
  const ADatabaseName: AnsiString = ''): Integer;
begin
  Result := sqlite3_get_pragma_int(ADb, 'cache_size', ACacheSize, ADatabaseName);
end;

{$IFNDEF SQLITE_OMIT_UTF16}

function sqlite3_get_cache_size16(
  const ADb: TDISQLite3DatabaseHandle;
  out ACacheSize: Integer;
  const ADatabaseName: WideString = ''): Integer;
begin
  Result := sqlite3_get_pragma_int16(ADb, 'cache_size', ACacheSize, ADatabaseName);
end;
{$ENDIF !SQLITE_OMIT_UTF16}

function sqlite3_pragma_set_cache_size(
  const ADb: TDISQLite3DatabaseHandle;
  const ACacheSize: Integer;
  const ADatabaseName: AnsiString = ''): Integer;
begin
  Result := sqlite3_set_pragma_int(ADb, 'cache_size', ACacheSize, ADatabaseName);
end;

{$IFNDEF SQLITE_OMIT_UTF16}

function sqlite3_pragma_set_cache_size16(
  const ADb: TDISQLite3DatabaseHandle;
  const ACacheSize: Integer;
  const ADatabaseName: WideString = ''): Integer;
begin
  Result := sqlite3_set_pragma_int16(ADb, 'cache_size', ACacheSize, ADatabaseName);
end;
{$ENDIF !SQLITE_OMIT_UTF16}

function sqlite3_pragma_get_case_sensitive_like(
  const ADb: TDISQLite3DatabaseHandle;
  out ACaseSensitiveLike: Boolean): Integer;
begin
  Result := sqlite3_get_pragma_boolean(ADb, 'case_sensitive_like', ACaseSensitiveLike);
end;

function sqlite3_pragma_set_case_sensitive_like(
  const ADb: TDISQLite3DatabaseHandle;
  const ACaseSensitiveLike: Boolean): Integer;
begin
  Result := sqlite3_set_pragma_boolean(ADb, 'case_sensitive_like', ACaseSensitiveLike);
end;

function sqlite3_pragma_get_count_changes(
  const ADb: TDISQLite3DatabaseHandle;
  out ACountChanges: Boolean): Integer;
begin
  Result := sqlite3_get_pragma_boolean(ADb, 'count_changes', ACountChanges);
end;

function sqlite3_pragma_set_count_changes(
  const ADb: TDISQLite3DatabaseHandle;
  const ACountChanges: Boolean): Integer;
begin
  Result := sqlite3_set_pragma_boolean(ADb, 'count_changes', ACountChanges);
end;

function sqlite3_integrity_check(
  const ADb: TDISQLite3DatabaseHandle;
  const ADatabaseName: AnsiString = ''): Integer;
var
  s: AnsiString;
begin
  Result := sqlite3_get_pragma_str(ADb, 'integrity_check', s, ADatabaseName);
  if (Result = SQLITE_OK) and (s <> 'ok') then
    Result := SQLITE_ERROR;
end;

{$IFNDEF SQLITE_OMIT_UTF16}
function sqlite3_integrity_check16(
  const ADb: TDISQLite3DatabaseHandle;
  const ADatabaseName: WideString = ''): Integer;
var
  s: WideString;
begin
  Result := sqlite3_get_pragma_str16(ADb, 'integrity_check', s, ADatabaseName);
  if (Result = SQLITE_OK) and (s <> 'ok') then
    Result := SQLITE_ERROR;
end;
{$ENDIF !SQLITE_OMIT_UTF16}

procedure DatabaseError(const AResStrRec: PResStringRec; const AObject: TObject = nil);
begin
  if AObject is TComponent then
    with AObject as TComponent do
      if Name <> '' then
        begin
          raise ESQLite3.Create(Format('%s: %s', [Name, LoadResString(AResStrRec)]));
          Exit;
        end;
  {$IFDEF COMPILER_5_UP}
  raise ESQLite3.CreateRes(AResStrRec);
  {$ELSE}
  raise ESQLite3.Create(LoadResString(AResStrRec));
  {$ENDIF}
end;

procedure DatabaseErrorFmt(const AResStrRec: PResStringRec; const AArgs: array of const; const AObject: TObject = nil);
begin
  if AObject is TComponent then
    with AObject as TComponent do
      if Name <> '' then
        begin
          raise ESQLite3.Create(Format('%s: %s', [Name, Format(LoadResString(AResStrRec), AArgs)]));
          Exit;
        end;
  {$IFDEF COMPILER_5_UP}
  raise ESQLite3.CreateResFmt(AResStrRec, AArgs);
  {$ELSE}
  raise ESQLite3.CreateFmt(LoadResString(AResStrRec), AArgs);
  {$ENDIF}
end;

constructor TDISQLite3Database.Create(AOwner: TComponent);
begin
  inherited;
  FStatements := TList.Create;
end;

destructor TDISQLite3Database.Destroy;
var
  i: Integer;
  Stmt: TDISQLite3Statement;
begin

⌨️ 快捷键说明

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