用户名:  密码:   
您当前的位置:首页 > SQL数据库 >  MySql > 

delphi11中使用FireDAC中的TFDConnection连接mysql数据库

上次修改时间: 2024-10-09 10:28:48      来源:网络总结      作者:钢铁长陈
上一页      路径:DSD\Learn\SQL数据库相关\mysql相关\delphi11的FireDAC方式连接mysql\      下一页

delphi11中使用FireDAC中的TFDConnection连接mysql数据库

注:网上说UniDAC连接mysql数据库,是不需要dll的,未测试。其安装方法https://blog.csdn.net/hougelou/article/details/70649563

来自:https://blog.csdn.net/qq_44111597/article/details/108256831?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-0-108256831-blog-113382018.235^v43^pc_blog_bottom_relevance_base8&spm=1001.2101.3001.4242.1&utm_relevant_index=3
1. 需要用到的控件:
FDConnection1,FDPhysMySQLDriverLink1,FDQuery1,DataSource1,DBGrid1 前三个控件是与Ado方式不同,后两个控件同ADO方式连接
 1) FDConnection控件设置:功能类似ADOConnection,要将Params下的CharacterSet设为csUtf8,Database为ctcms,password为root,Server为192.168.13.77,Username为root,其它LoginPrompt为False,Connect为true这两个同Ado方式
 2) FDPhysMySQLDriverLink1控件设置:用来设置mysql驱动库,要先将libmysql.dll(去网上下载)复制到软件目录,在控件属性窗口的VendorLib中选择libmysql.dll的路径
 注:这个控件比较特殊,根据连接数据库不同而不同,比较连接SQLlite,就不用这个,而是选择TFDPhySSQLiteDriverLink
 注2:libmysql.dll也可以到WAMP下的mysql目录去复制,"C:\wamp\bin\mysql\mysql5.6.17\lib\libmysql.dll" , delphi使用的是C的库,详见:https://docwiki.embarcadero.com/RADStudio/Athens/en/Connect_to_MySQL_Server_(FireDAC)
 3)FDQuery1用法同ADOQuery,只需要在SQL中设置语句,如select * from ct_link,在Connection中选择FDConnection,将Active设为True
 4)DataSource1,DBGrid1,用法同ADO方式
2. Libmysql.dll的下载
 经测试,当前目录下三个dll都可以用,也可网上搜索新版本
 
3. 常见错误,将Active置为True提示的错误基本跟实际无法,比如实际是密码输错,但提示不是有效的dll文件 
 一般有Root@@192.168.13.43表密码错,提示很怪,因为mysql服务器实际是13.77

4. 使用半代码连接的示例代码,测试通过,使用的libmysql.dll为当前目录下xt86下的,修改时间为2012年3月7号的dll,其它dll代码测试提示%1,不是有效的Win32应用程序不通过 
procedure TForm1.Button1Click(Sender: TObject);
begin
  FDConnection1.Params.DriverID := 'MySQL';
  FDConnection1.Params.Add('Server=192.168.13.77');
  FDConnection1.Params.Add('Port=3306');//默认端口可省略这行
  FDConnection1.Params.Database := 'ctcms';
  FDConnection1.Params.UserName := 'root';
  FDConnection1.Params.Password := 'root';
  FDConnection1.Params.Add('CharacterSet=utf8');

//  FDPhysMySQLDriverLink1.VendorLib := './libmysql.dll';
  FDPhysMySQLDriverLink1.VendorLib := 'C:\Users\tieguo\Desktop\SqlExpressTest\libmysql.dll';

  FDQuery1.Connection := FDConnection1;
  FDQuery1.SQL.Add('select * from ct_link');

  DataSource1.DataSet := FDQuery1;
  DBGrid1.DataSource := DataSource1;
  try
    FDConnection1.Open();//和下面一句是同样的效果
//    FDConnection1.Connected := True;
    FDQuery1.Active := True;
  except on E: Exception do
    ShowMessage(e.Message);
    // ShowMessage 编译报错的话看看有没有声明 【uses Vcl.Dialogs;】
  end;
end;

5. 全代码连接的示例代码,测试通过
procedure fcfd(var fc:TFDConnection; var fdd:TFDPhysMySQLDriverLink);
begin
  fc := TFDConnection.Create(nil);
  fdd := TFDPhysMySQLDriverLink.Create(nil);

    fc.Params.Clear; // 清除之前的参数设置,确保没有重复或冲突的参数
    fc.Params.DriverID := 'MySQL';
    fc.Params.Add('Server='+trim(Mainfr.ComboBox1.Text));      //  fcon1.Params.Add('Server=localhost');
    fc.Params.Add('Port='+trim(Mainfr.edit2.Text)); //默认端口可省略这行
    fc.Params.Database := trim(Mainfr.edit3.Text);
    fc.Params.UserName := trim(Mainfr.edit4.Text);
    fc.Params.Password := trim(Mainfr.edit5.Text);
    fc.Params.Add('CharacterSet=gbk');
    fc.Params.Add('ConnectTimeout=5');  // 设置连接超时时间为10秒

    fdd.VendorLib := 'libmysql.dll';     // '.\..\..\libmysql.dll';
    fc.DriverName :='MySQL';
end;

procedure TMainfr.Button13Click(Sender: TObject);
var
  fc:TFDConnection;
  fdd: TFDPhysMySQLDriverLink;
begin
  fcfd(fc,fdd);

  try
    try
      fc.Open();
      //。。。这里加入要执行的代码
      Label6.Caption:='连接数据库'+ComboBox1.Text+'成功';
    except on E: Exception do
      ShowMessage('连接数据库失败'+e.Message);
    end;
  finally
    if fc.Connected then fc.Connected := false; //关闭连接
    fc.Free;  //释放连接对像
    fdd.free; //释放驱动链接对象
  end;
end;

5. delphi11建立的默认VCL程序都是32位, 也不能编译成64位,建立的多设备程序可以编译为X64版本,但建立多设备程序用上面的代码执行调用X64下的libmysql.dll不能显示出数据,多设备程序不能使用DBgrid控件,只有Grid控件,但不会用