ITを駆使する猫エンジニア

 おはようございます、童爺です。

 

 今回は、新規ユーザ作成画面です。

 

 この画面は、ログイン画面と会員管理画面の両方から呼ばれます。

 

 では、以下に実行時の画面を張ります。

 

 次に、デザイン画面です。

 

 コードを以下に記述します。

 

unit NewUserAppend;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.StdCtrls,
  FMX.Controls.Presentation, FMX.Layouts, FMX.ListBox, FMX.Edit,
  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.Phys.SQLite, FireDAC.Phys.SQLiteDef,
  FireDAC.Stan.ExprFuncs, FireDAC.FMXUI.Wait, FireDAC.Stan.Param, FireDAC.DatS,
  FireDAC.DApt.Intf, FireDAC.Comp.Client, Data.DB, FireDAC.DApt, System.Rtti,
  System.Bindings.Outputs, Fmx.Bind.Editors, Data.Bind.EngExt,
  Fmx.Bind.DBEngExt, Data.Bind.Components, FireDAC.Comp.DataSet,
  Data.Bind.DBScope, Data.Bind.Controls, Fmx.Bind.Navigator, FMX.DateTimeCtrls;

type
  TForm_NewUserAppend = class(TForm)
    Layout_Header: TLayout;
    Label_Cation: TLabel;
    Layout_ID: TLayout;
    Layout_LastName: TLayout;
    Layout_FirstName: TLayout;
    Layout_Password: TLayout;
    Layout_RePassword: TLayout;
    Layout_Birthday: TLayout;
    Layout_Ken: TLayout;
    Layout_Footer: TLayout;
    Label_ID: TLabel;
    Label_LastName: TLabel;
    Label_FirstName: TLabel;
    Label_Password: TLabel;
    Label_RePassword: TLabel;
    Label_Birthday: TLabel;
    Label_Ken: TLabel;
    Layout_BtnFooter: TLayout;
    Button_Resist: TButton;
    Button_Cancel: TButton;
    Edit_ID: TEdit;
    Edit_LastName: TEdit;
    Edit_FirstName: TEdit;
    Edit_Password: TEdit;
    Edit_RePassword: TEdit;
    ComboBox_Ken: TComboBox;
    Layout_UserName: TLayout;
    Label_UserName: TLabel;
    Edit_UserName: TEdit;
    FDConnection_NewUserAppend: TFDConnection;
    DateEdit_Birthday: TDateEdit;
    FDQuery_NewUserAppend: TFDQuery;
    BindSourceken: TBindSourceDB;
    FDTableken: TFDTable;
    BindingsList_Ken: TBindingsList;
    LinkFillControlToField1: TLinkFillControlToField;
    procedure Button_CancelClick(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormCreate(Sender: TObject);
    procedure Button_ResistClick(Sender: TObject);
  private
    { private 宣言 }
  public
    { public 宣言 }
  end;

var
  Form_NewUserAppend: TForm_NewUserAppend;

implementation

{$R *.fmx}

uses
  System.Hash,
  MMS_CommonDialog;


procedure TForm_NewUserAppend.Button_CancelClick(Sender: TObject);
begin
  Close;
end;

procedure TForm_NewUserAppend.Button_ResistClick(Sender: TObject);
var
  MsgDlg: TForm_MsgDlg;
  MD5: THashMD5;
begin
  if Edit_Id.Text = '' then
  begin
    MsgDlg := TForm_MsgDlg.Create(self, 'IDを入力してください。');
    MsgDlg.ShowModal;
    exit;
  end;
  if Edit_UserName.Text = '' then
  begin
    MsgDlg := TForm_MsgDlg.Create(self, 'ユーザ名を入力してください。');
    MsgDlg.ShowModal;
    exit;
  end;
  if Edit_LastName.Text = '' then
  begin
    MsgDlg := TForm_MsgDlg.Create(self, '苗字を入力してください。');
    MsgDlg.ShowModal;
    exit;
  end;
  if Edit_FirstName.Text = '' then
  begin
    MsgDlg := TForm_MsgDlg.Create(self, '名を入力してください。');
    MsgDlg.ShowModal;
    exit;
  end;
  if Edit_Password.Text = '' then
  begin
    MsgDlg := TForm_MsgDlg.Create(self, 'パスワードを入力してください。');
    MsgDlg.ShowModal;
    exit;
  end;
  if Edit_RePassword.Text = '' then
  begin
    MsgDlg := TForm_MsgDlg.Create(self, 'パスワード再入力を入力してください。');
    MsgDlg.ShowModal;
    exit;
  end;
  if Edit_Password.Text <> Edit_RePAssword.Text then
  begin
    MsgDlg := TForm_MsgDlg.Create(self, 'パスワードが一致しません。');
    MsgDlg.ShowModal;
    exit;
  end;
  if ComboBox_Ken.ItemIndex = -1 then
  begin
    MsgDlg := TForm_MsgDlg.Create(self, '県名を選択してください。');
    MsgDlg.ShowModal;
    exit;
  end;
  try
    try
      FDQuery_NewUserAppend.Params.ParamByName('Input_id').AsInteger := StrToInt(Edit_ID.Text);
      FDQuery_NewUserAppend.Params.ParamByName('Input_username').AsString := Edit_UserName.Text;

      MD5 := THashMD5.Create;
      MD5.Update(Edit_Password.Text);
      FDQuery_NewUserAppend.Params.ParamByName('Input_password').AsString := MD5.HashAsString;

      FDQuery_NewUserAppend.Params.ParamByName('Input_last_name').AsString := Edit_LastName.Text;
      FDQuery_NewUserAppend.Params.ParamByName('Input_first_name').AsString := Edit_FirstName.Text;
      FDQuery_NewUserAppend.Params.ParamByName('Input_birthday').AsString := DateEdit_Birthday.Text;
      FDQuery_NewUserAppend.Params.ParamByName('Input_ken').AsInteger := ComboBox_Ken.ItemIndex + 1;
      FDQuery_NewUserAppend.ExecSQL;
    except
      on e: Exception do
      begin
        FDQuery_NewUserAppend.Close;
        MsgDlg := TForm_MsgDlg.Create(self, 'Error:' + e.Message);
        MsgDlg.ShowModal;
        raise;
      end;
    end;
  finally
    FDQuery_NewUserAppend.Close;
  end;
  Close;
end;

procedure TForm_NewUserAppend.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
  FDTableken.Close;
  FDConnection_NewUSerAppend.Close;
end;

procedure TForm_NewUserAppend.FormCreate(Sender: TObject);
begin
  FDConnection_NewUSerAppend.Open();
  FDTableken.Open();
end;

end.

 

 こんな感じです。

 

 字数制限に引っかかる為、今回は此処迄。

 

 それでですね、「ここが違う」とか「もっといいやり方がある」と言う方は、コメントなりTwitterに投稿して頂けると有り難いです。

 

 どんな些細な事でも構いません。(疑問点でもOK)

 

 出来る限り対応していきたいと思います。

 


 

 それではまた。

 

 でわでわ。