FireDAC 运行时动态创建连接文件

31 篇文章 0 订阅
15 篇文章 1 订阅

以下代码在WIN7 +DELPHI XE 10.3 +sql server 2008下测试通过

设计时界面:

运行如图

 

界面设计代码如下:

object Form1: TForm1
  Left = 0
  Top = 0
  Caption = 'Form1'
  ClientHeight = 480
  ClientWidth = 640
  StyleBook = StyleBook1
  FormFactor.Width = 320
  FormFactor.Height = 480
  FormFactor.Devices = [Desktop]
  OnCreate = FormCreate
  DesignerMasterStyle = 0
  object Grid1: TGrid
    Align = Bottom
    CanFocus = True
    ClipChildren = True
    Position.Y = 232.000000000000000000
    Size.Width = 640.000000000000000000
    Size.Height = 248.000000000000000000
    Size.PlatformDefault = False
    TabOrder = 4
    Viewport.Width = 636.000000000000000000
    Viewport.Height = 223.000000000000000000
  end
  object BtnDefine: TButton
    Position.X = 272.000000000000000000
    Position.Y = 192.000000000000000000
    TabOrder = 11
    Text = #29983#25104#25991#20214
    OnClick = BtnDefineClick
  end
  object BtnConnection: TButton
    Position.X = 384.000000000000000000
    Position.Y = 192.000000000000000000
    TabOrder = 12
    Text = 'Connection'
    OnClick = BtnConnectionClick
  end
  object EditDatabase: TEdit
    Touch.InteractiveGestures = [LongTap, DoubleTap]
    TabOrder = 1
    Position.X = 144.000000000000000000
    Position.Y = 88.000000000000000000
  end
  object UserName: TLabel
    Position.X = 288.000000000000000000
    Position.Y = 48.000000000000000000
    Text = 'UserName'
    TabOrder = 17
  end
  object Database: TLabel
    Position.X = 168.000000000000000000
    Position.Y = 48.000000000000000000
    Text = 'Database'
    TabOrder = 18
  end
  object Password: TLabel
    Position.X = 24.000000000000000000
    Position.Y = 160.000000000000000000
    Text = 'Password'
    TabOrder = 19
  end
  object server: TLabel
    Position.X = 152.000000000000000000
    Position.Y = 160.000000000000000000
    Text = 'server'
    TabOrder = 20
  end
  object DriverID: TLabel
    Position.X = 32.000000000000000000
    Position.Y = 48.000000000000000000
    Text = 'DriverID'
    TabOrder = 21
  end
  object EditUserName: TEdit
    Touch.InteractiveGestures = [LongTap, DoubleTap]
    TabOrder = 2
    Position.X = 264.000000000000000000
    Position.Y = 88.000000000000000000
  end
  object Editserver: TEdit
    Touch.InteractiveGestures = [LongTap, DoubleTap]
    TabOrder = 5
    Position.X = 128.000000000000000000
    Position.Y = 192.000000000000000000
  end
  object EditPassword: TEdit
    Touch.InteractiveGestures = [LongTap, DoubleTap]
    TabOrder = 3
    Position.X = 16.000000000000000000
    Position.Y = 192.000000000000000000
  end
  object EditDriverID: TEdit
    Touch.InteractiveGestures = [LongTap, DoubleTap]
    TabOrder = 0
    Position.X = 24.000000000000000000
    Position.Y = 88.000000000000000000
  end
  object FDConnection1: TFDConnection
    Left = 552
    Top = 208
  end
  object FDManager1: TFDManager
    DriverDefFileName = 'myconnectionName'
    ConnectionDefFileName = 'MyFdconnectionDefs.ini'
    FormatOptions.AssignedValues = [fvMapRules]
    FormatOptions.OwnMapRules = True
    FormatOptions.MapRules = <>
    Active = True
    Left = 552
    Top = 272
  end
  object FDQuery1: TFDQuery
    Connection = FDConnection1
    SQL.Strings = (
      'select EmployeeID,firstname,lastname from Employees')
    Left = 552
    Top = 328
  end
  object BindSourceDB1: TBindSourceDB
    DataSet = FDQuery1
    ScopeMappings = <>
    Left = 160
    Top = 384
  end
  object BindingsList1: TBindingsList
    Methods = <>
    OutputConverters = <>
    Left = 76
    Top = 384
    object LinkGridToDataSourceBindSourceDB1: TLinkGridToDataSource
      Category = 'Quick Bindings'
      DataSource = BindSourceDB1
      GridControl = Grid1
      Columns = <>
    end
  end
  object FDGUIxWaitCursor1: TFDGUIxWaitCursor
    Provider = 'FMX'
    Left = 560
    Top = 56
  end
  object FDStanStorageBinLink1: TFDStanStorageBinLink
    Left = 544
  end
  object FDStanStorageJSONLink1: TFDStanStorageJSONLink
    Left = 552
    Top = 120
  end
  object FDPhysMSSQLDriverLink1: TFDPhysMSSQLDriverLink
    Left = 552
    Top = 392
  end
  object StyleBook1: TStyleBook
    Styles = <
      item
      end>
    Left = 440
    Top = 80
  end
end


代码 如下:

unit Unit1;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.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.Stan.Param, FireDAC.DatS, FireDAC.DApt.Intf,
  FireDAC.DApt, FireDAC.FMXUI.Wait, FireDAC.Phys.MSSQLDef, System.Rtti,
  FMX.Grid.Style, Data.Bind.EngExt, Fmx.Bind.DBEngExt, Fmx.Bind.Grid,
  System.Bindings.Outputs, Fmx.Bind.Editors, FMX.StdCtrls,
  FireDAC.Phys.ODBCBase, FireDAC.Phys.MSSQL, FireDAC.Stan.StorageJSON,
  FireDAC.Stan.StorageBin, FireDAC.Comp.UI, Data.Bind.Components,
  Data.Bind.Grid, Data.Bind.DBScope, FMX.Controls.Presentation, FMX.ScrollBox,
  FMX.Grid, Data.DB, FireDAC.Comp.DataSet, FireDAC.Comp.Client, FMX.Edit,
  FMX.Layouts, FMX.ListBox, FMX.Memo
  ,ioutils

  ;

type
  TForm1 = class(TForm)
    FDConnection1: TFDConnection;
    FDManager1: TFDManager;
    FDQuery1: TFDQuery;
    Grid1: TGrid;
    BindSourceDB1: TBindSourceDB;
    BindingsList1: TBindingsList;
    LinkGridToDataSourceBindSourceDB1: TLinkGridToDataSource;
    FDGUIxWaitCursor1: TFDGUIxWaitCursor;
    FDStanStorageBinLink1: TFDStanStorageBinLink;
    FDStanStorageJSONLink1: TFDStanStorageJSONLink;
    FDPhysMSSQLDriverLink1: TFDPhysMSSQLDriverLink;
    BtnDefine: TButton;
    BtnConnection: TButton;

    UserName: TLabel;
    Database: TLabel;
    Password: TLabel;
    server: TLabel;
    DriverID: TLabel;

    EditDatabase: TEdit;
    EditUserName: TEdit;
    Editserver: TEdit;
    EditPassword: TEdit;
    EditDriverID: TEdit;
    StyleBook1: TStyleBook;
    procedure BtnDefineClick(Sender: TObject);
    procedure BtnConnectionClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);

  private
    { Private declarations }
    procedure defconnectionfiles;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.fmx}
const
cNameConnDef = 'MYSQL_Connection';

procedure TForm1.defconnectionfiles;
var
  oDef: IFDStanConnectionDef;
  oParams: TFDPhysMSSQLConnectionDefParams; // MSSQL connection params
 begin
     try
         // Adding new persistent connection to fdconnectiondefs.ini
        FDManager1.ConnectionDefFileName:='.\MyFDConnectionDefs.ini';
        FDManager1.ConnectionDefs.AddConnectionDef;
        oDef := FDManager.ConnectionDefs.AddConnectionDef;
        oDef.Name := cNameConnDef;
        oParams := TFDPhysMSSQLConnectionDefParams(oDef.Params);
        oParams.DriverID := EditDriverID.text ;
        oParams.Database := EditDatabase.text;
        oParams.UserName := EditUserName.Text;
        oParams.Password := EditPassword.text;
        oParams.Server :=  Editserver.text;
        oParams.OSAuthent := false;
        oParams.MARS := false;
        oDef.MarkPersistent;
        oDef.Apply;
     finally

     end;

end;

procedure TForm1.BtnDefineClick(Sender: TObject);
 var
  olist:tstrings;
  Str : String;
begin
try
    olist:= TStringList.Create;
   If FileExists(FDManager1.ConnectionDefFileName) then
      begin
        //如果存在则修改

       FDManager1.GetConnectionDefParams(cNameConnDef, olist);
           //........>>> 结果olist 内容为
       {  DriverID=MSSQL
          Database=Salesdb
          User_Name=sa
          Password=123
          Server=127.0.0.1
          OSAuthent=No
          MARS=No
          Name=MSSQL_Connection}
        olist.Values['Database']:=EditDatabase.text;
        olist.Values['User_Name']:= EditUserName.text;
        olist.Values['Server']:=  Editserver.text;
        olist.Values['Password']:=EditPassword.text;
        olist.Values['DriverID']:=EditDriverID.text;
        FDManager1.ModifyConnectionDef(cNameConnDef, olist); //修改
        FDManager1.SaveConnectionDefFile;  //保存
        showmessage('生成完毕!');
      end
      else
      begin
        //不存在则新建一个
        defconnectionfiles;
      end;
finally
   olist.Free;
end;

end;//procedure TForm1.BtnDefineClick(Sender: TObject);


procedure TForm1.FormCreate(Sender: TObject);
var
  oDef: IFDStanConnectionDef;
  oParams: TFDPhysMSSQLConnectionDefParams; // MSSQL connection params
  olist:tstrings;
 begin
    //如果存在直接读取到各EDIT.text中readconnectionfile
   try

       If FileExists(FDManager1.ConnectionDefFileName) then
       begin
        olist:= TStringList.Create;
        FDManager1.GetConnectionDefParams(cNameConnDef, olist);
        EditDatabase.text:=olist.Values['Database'];
        EditUserName.text:=olist.Values['User_Name'];
        Editserver.text:=olist.Values['Server'];
        EditPassword.text:=olist.Values['Password'];
        EditDriverID.text:=olist.Values['DriverID'];
       end
       else
       begin
          //如果不存在
       end;

     StyleBook1.Resource.LoadFromFile('.\GoldenGraphite.Style');
   finally
    olist.Free;
   end;
  


end;//procedure TForm1.FormCreate(Sender: TObject);

procedure TForm1.BtnConnectionClick(Sender: TObject);
begin
  If FileExists(FDManager1.ConnectionDefFileName) then
  begin
   FDConnection1.ConnectionDefName := cNameConnDef;
   FDConnection1.Connected := True;
   FDQuery1.Active:=true;
  end
  else
  begin
    showmessage('岳母还没生产');
  end;
 
end;//procedure TForm1.BtnConnectionClick(Sender: TObject);

end.

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值