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

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

 

 Twitterにも書きましたが、administratorテーブルは要らないと判断したので、DROP TABLEしました。

 

memberテーブルで、ユーザ名が特定の名前の時に管理画面出せばいいんじゃね?

 

 と考え直したので。

DROP TABLE administrator;
DELETE FROM member;
INSERT  INTO member (username, password, last_name, first_name, birthday, ken, reg_date, cancel)  VALUES('administrator',   '5f4dcc3b5aa765d61d8327deb882cf99',   '管理者',  'その1',  '20130101','1', date('now'),   NULL);
INSERT  INTO member (username, password, last_name, first_name, birthday, ken, reg_date, cancel)  VALUES('admin',   '5f4dcc3b5aa765d61d8327deb882cf99',   '管理者',  'その2',  '20130101','1', date('now'),   NULL);
INSERT  INTO member (username, password, last_name, first_name, birthday, ken, reg_date, cancel)  VALUES('root',   '5f4dcc3b5aa765d61d8327deb882cf99',   '管理者',  'その3',  '20130101','1', date('now'),   NULL);
INSERT  INTO member (username, password, last_name, first_name, birthday, ken, reg_date, cancel)  VALUES('user',   '5f4dcc3b5aa765d61d8327deb882cf99',   '山田',  '和夫',  '20130101','1', date('now'),   NULL);

 

 それで今、完成している部分の実行時のキャプチャーです。

 

 で、ユーザ名やパスワードを入力すると、

 

 これだけ作るのに、朝から昼近くまで係ってしまいました。

 

 最初にテンプレートから作り始めたのですが、デザインを一通り仕上げた所で、実行(F9押下)すると、原因不明のエラーが発生しまして。

 

 「EXECファイルが開けません。」と言うエラーなのですが、ググっても出てきませんでして、しかもDelphi自体も挙動がおかしくなりました。

 (他のサンプルプロジェクトを開いて実行すると、いきなりエラーメッセージと共にアセンブラの画面が表示される。)

 

 Delphiを再立ち上げして、空のFMXプロジェクトで作り直しました。

 

 それが、上記の状態。

 

 午後からはSQL関連で悩みまして。

 

 最終的に例外が必ず発生する状態になりまして、明日にしようとふて寝しました。

 

 そのソースコードが以下。

unit UserLoginMain;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Edit,
  FMX.Controls.Presentation, FMX.StdCtrls, FMX.Layouts, 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.DApt, Data.DB, FireDAC.Comp.DataSet, FireDAC.Comp.Client;

type
  TForm_UserLoginMain = class(TForm)
    Layout_Header: TLayout;
    Layout_UserName: TLayout;
    Layout_Password: TLayout;
    Layout_Login: TLayout;
    Layout_NewUserCreate: TLayout;
    Layout_Footer: TLayout;
    Label_Caption: TLabel;
    Label_UserName: TLabel;
    Label_Password: TLabel;
    Edit_UserName: TEdit;
    Edit_Password: TEdit;
    Button_Login: TButton;
    Button_NewUserCreate: TButton;
    Button_Close: TButton;
    FDConnection_UserLoginMain: TFDConnection;
    FDQuery_UserLoginMain: TFDQuery;
    procedure Button_LoginClick(Sender: TObject);
    procedure Button_NewUserCreateClick(Sender: TObject);
    procedure Button_CloseClick(Sender: TObject);
  private
    { private 宣言 }
  public
    { public 宣言 }
  end;

var
  Form_UserLoginMain: TForm_UserLoginMain;

implementation

{$R *.fmx}

uses
  System.Hash;

procedure TForm_UserLoginMain.Button_NewUserCreateClick(Sender: TObject);
begin
//後で追加
end;

procedure TForm_UserLoginMain.Button_CloseClick(Sender: TObject);
begin
  Close;
end;

procedure TForm_UserLoginMain.Button_LoginClick(Sender: TObject);
var
  result: Integer;
  MD5: THashMD5;
begin

  result := 0;
  //下記の処理、必ず例外が発生する。
  //工事中
(*
  try
    try
      FDConnection_UserLoginMain.Open;

      FDQuery_UserLoginMain.Params.ParamByName('input_username').AsString := Edit_UserName.Text;

      MD5 := THashMD5.Create;
      MD5.Update(Edit_Password.Text);
      FDQuery_UserLoginMain.Params.ParamByName('input_password').AsString := MD5.HashAsString;
      FDQuery_UserLoginMain.Open();
      result := FDQuery_UserLoginMain.RecordCount;
    except
      on e: Exception do ShowMessage( 'Error:' + e.Message );
    end;
  finally
    FDQuery_UserLoginMain.Close;
    FDConnection_UserLoginMain.Close;
  end;

  //仮の処理 工事中
  if result > 0 then
  begin
    ShowMessage('OK!');
  end
  else
  begin
    ShowMessage('NG!');
  end;
*)
end;

end.

 それで、デザイン画面は以下の通り。

 

 で、データベース関係の各コンポーネントの設定が以下。

object FDConnection_UserLoginMain: TFDConnection
  Params.Strings = (
    'Database=C:\pg\sqlite3\mms.sqlite3'
    'LockingMode=Normal'
    'DriverID=SQLite'
    'OpenMode=ReadOnly')
  LoginPrompt = False
  Left = 8
  Top = 16
end

object FDQuery_UserLoginMain: TFDQuery
  AutoCalcFields = False
  Connection = FDConnection_UserLoginMain
  SQL.Strings = (
    'SELECT id, user, password FROM member'
    'WHERE'
    ' (username = :input_username )'
    'AND'
    '(password = :input_password);')
  Left = 248
  Top = 16
  ParamData = <
    item
      Name = 'INPUT_USERNAME'
      ParamType = ptInput
    end
    item
      Name = 'INPUT_PASSWORD'
      ParamType = ptInput
    end>
end

 です。

 

 とりあえず、今日一日使って、調査します。

 


 

 それではまた。

 

 でわでわ。