delphi11中使用FireDAC中的TFDConnection连接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
  
3.1 错误:数据上传第一遍运行正常,第二次再次执行出错,
  原因1:第一遍执行后把FDQuery,与FDconnection用.free释放了,下次再次执行出错
  原因2:给FDconnection,FDquery,FDPhysMySQLDriverLink1等第一次赋过值,再次赋值时也有可能出错!

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;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

weixin_58691040

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值