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

以下代码在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.

猜你喜欢

转载自blog.csdn.net/qq_25439957/article/details/88537289