• FireDAC 下的 Sqlite [12]



    该话题的继续延伸主要就是 SQL 的语法了, 草草收场的原因是现在的脑筋已经进入了 IntraWeb 的世界.

    相关备忘会随时补充在下面:

    //连接多个数据库的参考代码:
    FDConnection1.ExecSQL('ATTACH ''c:hr.sdb'' AS hr');
    FDConnection1.ExecSQL('ATTACH ''c:cust.sdb'' AS cust');
    FDQuery1.Open('select * from "Orders" o ' +
      'left join hr."Employees" e on o.EmployeeID = e.EmployeeID ' +
      'left join cust."Customers" c on o.CustomerID = c.CustomerID');
    
    
    //SQLite_OnAuthorize 参考代码:
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      FDConnection1.Connected := True;
      TSQLiteDatabase(FDConnection1.ConnectionIntf.CliObj).OnAutorize := DoAuthorize;
      FDQuery1.Open;
    end;
    
    procedure TForm1.DoAuthorize(ADB: TSQLiteDatabase; ACode: Integer; const AArg1, AArg2, AArg3, AArg4: String; var AResult: Integer);
    begin
      Memo1.Lines.Add(Format('%d - %s - %s - %s - %s', [ACode, AArg1, AArg2, AArg3, AArg4]));
      if ACode = SQLITE_DELETE then
        AResult := SQLITE_DENY
      else
        AResult := SQLITE_OK;
    end;
    
    
    //SQLite_OnUpdate 参考代码:
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      FDConnection1.Connected := True;
      TSQLiteDatabase(FDConnection1.ConnectionIntf.CliObj).OnUpdate := DoUpdate;
      FDQuery1.Open;
    end;
    
    procedure TForm1.DoUpdate(ADB: TSQLiteDatabase; AOper: Integer; const ADatabase, ATable: String; ARowid: sqlite3_int64);
    begin
      Memo1.Lines.Add(Format('%d - %s - %s - %u', [AOper, ADatabase, ATable, ARowid]));
    end;
    
    
    //快速选择到行:
    SELECT * FROM Orders WHERE ROWID = :RID
    
    //TFDMemTable 代替 TClientDataSet
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      with FDMemTable1.FieldDefs.AddFieldDef do
      begin
        Name := 'word';
        DataType := ftString;
        Size := 50;
      end;
    
      with FDMemTable1.FieldDefs.AddFieldDef do
      begin
        Name := 'ph';
        DataType := ftString;
        Size := 50;
      end;
    
      with FDMemTable1.FieldDefs.AddFieldDef do
      begin
        Name := 'note';
        DataType := ftString;
        Size := 255;
      end;
    
      with FDMemTable1.FieldDefs.AddFieldDef do
      begin
        Name := 'num';
        DataType := ftInteger;
      end;
    
      FDMemTable1.IndexDefs.Add('Index_1', 'word', [ixPrimary]);
      FDMemTable1.CreateDataSet;
    end;
    
    //并发相关: http://docwiki.embarcadero.com/RADStudio/XE6/en/Using_SQLite_with_FireDAC#Locking_and_Concurrent_Updates
    


  • 相关阅读:
    设计模式面试
    Netty面试
    Nginx面试
    java后端面试
    springboot面试专题及答案
    SpringBoot整合Mybatis,TypeAliases配置失败的问题
    vscode调试html文件
    Linux性能检查命令总结[转]
    如何创建systemd定时任务
    Systemd简介与使用
  • 原文地址:https://www.cnblogs.com/del/p/3758138.html
Copyright © 2020-2023  润新知