おはようございます、童爺です
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
です。
とりあえず、今日一日使って、調査します。
それではまた。
でわでわ。