Firedac 连接Mysql

unit main;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, FireDAC.Stan.Intf, FireDAC.Stan.Option,
  FireDAC.Stan.Error, FireDAC.UI.Intf, FireDAC.Phys.Intf, FireDAC.Stan.Def,
  FireDAC.Stan.Pool, FireDAC.Stan.Async, FireDAC.Phys, FireDAC.VCLUI.Wait,
  FireDAC.Stan.Param, FireDAC.DatS, FireDAC.DApt.Intf, FireDAC.DApt, Data.DB,
  FireDAC.Comp.DataSet, FireDAC.Comp.Client, Vcl.StdCtrls, FireDAC.Phys.ADSDef,
  FireDAC.Phys.ASADef, FireDAC.Phys.DB2Def, FireDAC.Phys.FBDef,
  FireDAC.Phys.IBDef, FireDAC.Phys.InfxDef, FireDAC.Phys.MongoDBDef,
  FireDAC.Stan.ExprFuncs, FireDAC.Phys.SQLiteDef, FireDAC.Phys.PGDef,
  FireDAC.Phys.OracleDef, FireDAC.Phys.ODBCDef, FireDAC.Phys.MySQLDef,
  FireDAC.Phys.MSSQLDef, FireDAC.Phys.MSAccDef, FireDAC.Phys.TDataDef,
  FireDAC.Phys.TData, FireDAC.Phys.MSAcc, FireDAC.Phys.MSSQL,
  FireDAC.Phys.MySQL, FireDAC.Phys.ODBC, FireDAC.Phys.Oracle, FireDAC.Phys.PG,
  FireDAC.Phys.SQLite, FireDAC.Phys.MongoDB, FireDAC.Phys.Infx, FireDAC.Phys.IB,
  FireDAC.Phys.IBBase, FireDAC.Phys.FB, FireDAC.Phys.DB2, FireDAC.Phys.ODBCBase,
  FireDAC.Phys.ASA, FireDAC.Phys.ADS, Vcl.ExtCtrls;

type
  TReadThread=class(TThread)
     FDConn: TFDConnection;
  protected
      procedure Execute; override;
  public
      Constructor Create(Conn: TFDConnection; SuspendedOnCreate: boolean); Overload;
      Destructor Destroy; Override;
      procedure Success;
      procedure Fail;
  end;
  TForm1 = class(TForm)
    Memo1: TMemo;
    Label1: TLabel;
    Edit1: TEdit;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    FDConn: TFDConnection;
    FDQuery1: TFDQuery;
    Advantage: TFDPhysADSDriverLink;
    ASE: TFDPhysASADriverLink;
    DB2: TFDPhysDB2DriverLink;
    Firebird: TFDPhysFBDriverLink;
    InterBase: TFDPhysIBDriverLink;
    Informix: TFDPhysInfxDriverLink;
    Mongo: TFDPhysMongoDriverLink;
    SQLite: TFDPhysSQLiteDriverLink;
    PosterSQL: TFDPhysPgDriverLink;
    Oracle: TFDPhysOracleDriverLink;
    ODBC: TFDPhysODBCDriverLink;
    MySQL: TFDPhysMySQLDriverLink;
    MSSQL: TFDPhysMSSQLDriverLink;
    MSAccess: TFDPhysMSAccessDriverLink;
    Teradata: TFDPhysTDataDriverLink;
    Edit2: TEdit;
    Label2: TLabel;
    Button1: TButton;
    procedure Button4Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    ConnCount: integer;
    Conns: array of TFDConnection;
    Threads: array of TReadThread;
    q: TFDQuery;
    t1,t2: integer;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
//
// 创建对象...
Constructor TReadThread.Create(Conn: TFDConnection; SuspendedOnCreate: boolean);
begin
   Inherited Create(SuspendedOnCreate);
   freeOnTerminate:=true;
   FDConn:=Conn;
end;

//
// 对象释放...
Destructor TReadThread.Destroy;
begin
   Inherited Destroy;
end;

//
// 成功+1.。。
procedure TReadThread.Success;
begin
   inc(form1.t1);
   form1.edit1.Text:=inttostr(form1.t1);
   if form1.memo1.Lines.Count > 256 then
      form1.memo1.Lines.Clear;
   form1.Memo1.Lines.Add('线程'+inttostr(self.Handle)+': 读取数据集成功!');
end;

//
// 失败+1.。。
procedure TReadThread.Fail;
begin
   inc(form1.t2);
   form1.edit2.Text:=inttostr(form1.t2);
   if form1.memo1.Lines.Count>256 then
      form1.memo1.Lines.Clear;
   form1.Memo1.Lines.Add('线程'+inttostr(self.Handle)+': *** 读取数据集失败!');
end;

//
// 线程主函数...
procedure TReadThread.Execute;
var
   q: TFDQuery;
begin
  while not terminated do
  begin
     q:=TFDQuery.Create(nil);
     q.Connection:=FDConn;
     try
        q.SQL.Text:='Select * from tb_field order by Field_ID';
        q.Active:=true;
        synchronize(success);
     Except
        synchronize(fail);
     end;
     FreeAndNil(q);
     sleep(100);
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  ConStr_Mysql: string;
begin
  ConStr_Mysql :=
    'DriverID=MySQL;Database=test;Password=1234567;Server=192.168.6.28' +
    ';User_Name=root;port=3333;charset=utf8;WriteTimeout=300';
  FDConn.ConnectionString := ConStr_Mysql;
  FDConn.Open(ConStr_Mysql);

end;

procedure TForm1.Button2Click(Sender: TObject);
var
  ConStr_Mysql: string;
  i: integer;
begin
  ConStr_Mysql :=
    'DriverID=MySQL;Database=test;Password=1234567;Server=192.168.6.28' +
    ';User_Name=root;port=3333;charset=utf8;WriteTimeout=300';
  FDConn.ConnectionString := ConStr_Mysql;

  t1:=0;
  t2:=0;
  ConnCount:=10;
  setlength(Conns, ConnCount);
  setlength(Threads, ConnCount);

  for i := 0 to 9 do
  begin
     Conns[i]:=TFDConnection.Create(nil);
     Conns[i].LoginPrompt := false;
     Conns[i].ConnectionString := ConStr_Mysql;
     Conns[i].Connected := true;

     Memo1.Lines.Add('第' + inttostr(i+1) + '个对象连接服务器成功!');
     Threads[i] := TReadThread.Create(conns[i], true);
     Threads[i].Resume;
  end;
end;


procedure TForm1.Button3Click(Sender: TObject);
var
   i: integer;
begin
   for i := 0 to 9 do
    begin
      Threads[i].Terminate;
      Memo1.Lines.Add('第'+inttostr(i+1)+'个线程对象停止!');
      conns[i].Free;
    end;

   ConnCount:=0;
   setlength(Conns,ConnCount);
   setlength(Threads,ConnCount);
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
  close;
end;

end.
```

转载于:https://my.oschina.net/u/582827/blog/798169

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
FireDAC是Embarcadero公司推出的一个跨平台的数据库访问框架,能够实现对多种不同数据库的快速访问和操作。FireDAC在Delphi XE2中首次引入,成为了XE2版本后的默认数据库访问组件。FireDAC内置了多种数据库驱动程序,可以连接和操作多种类型的数据库,包括SQL Server、Oracle、MySQL等。 FireDAC提供了一系列易于使用的组件,可以通过简单的代码实现数据库连接、数据的读写、事务管理等功能。它的连接层支持多种连接方式,包括直接连接、数据存储区连接和Web服务连接等。通过使用FireDAC,开发人员可以更加方便地实现数据库应用程序的开发和维护工作。 FireDAC还具有高性能和灵活性的特点。它使用多线程和异步方式进行数据库操作,提高了应用程序的响应速度和并发性能。同时,FireDAC支持SQL语句的参数化,可以有效防止SQL注入攻击。 FireDAC在XE2版本中的引入,标志着Embarcadero公司对数据库访问组件的重大升级和改进。与以往的数据访问组件相比,FireDAC提供了更好的兼容性、更大的灵活性和更高的性能。它的出现大大简化了数据库应用程序的开发过程,并且适用于各种规模的项目。 总的来说,FireDAC XE2是一个功能强大、易于使用的数据库访问框架,为Delphi开发人员提供了快速、可靠的数据库操作方式。无论是开发小型应用程序还是大型企业级软件,FireDAC都能够提供全面的支持,并且能够轻松应对复杂的数据库操作需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值