Skip to main content

Koneksi database MySQL dengan delphi XE5 menggunakan komponen FireDAC Bagian Keempat

Selamat malam, mohon maaf sebelumnya karena 4 hari sudah saya melewatkan waktu untuk melanjutkan tutorial sebelumnya yang sempat tertunda gara-gara ada permintaan dari seorang teman yang ingin dibuatkan website toko online untuk menjual product-product filter air miliknya em-techfilter yang berguna untuk mengatasi masalah air yang berbau dan mengandung zat besi (Fe) atau mangan (Mn).


Kalau misalnya kamu juga membutuhkan sebuah website untuk memperluas usaha dan jualan kamu, silahkan hubungi saya. Promosi sedikit boleh yaa :)


Kembali ke tutorial sebelumnya, kemarin kita sudah menyelesaikan desain form setting database. Sekarang waktunya menambahkan coding kedalam form tersebut. Buka project anda seperti biasa.



Coding Form Setting


Karena kita akan bermain dengan windows registry, mari kita tambahkan class registry ke dalam uses delphi yang ada di bagian atas, seperti gambar berikut ini.


registry-uses-delphi.png


Tambahkan atau register dua buah procedure ReadRegistry dan WriteRegistry seperti gambar berikut ini.


add-procedure-registry-uses-delphi.png


Tambahkan variable Reg sebagai TRegistry dibagian private seperti gambar berikut ini.


add-reg-variable-registry-delphi.png


Jika sudah, mari kita tambahkan isi kedua procedure di atas ke dalam bagian implementation.


[code language="delphi"]

procedure TForm3.ReadRegistry;
var alamat:string;

begin
alamat:='\Software\Delphi-MySQL\DataLogin';

try
try
Reg.OpenKey(alamat, false);
Ehost.text:=Reg.ReadString('HostName');
EUser.text:=Reg.ReadString('UserName');
EPassword.text:=Reg.ReadString('Password');
EPort.Text:=Reg.ReadString('Port');

except on ERegistryException do
MessageDlg('Database connection setting failed to read !', mtInformation,[mbOk], 0);
end;

finally
Reg.CloseKey;
end;
end;

[/code]

[code language="delphi"]

procedure TForm3.WriteRegistry;
var alamat:string;
begin
alamat:='\Software\Delphi-MySQL\DataLogin';

try
try
Reg.OpenKey(alamat,true);
Reg.WriteString('HostName',Ehost.text);
Reg.WriteString('UserName',Euser.text);
Reg.WriteString('Password',Epassword.Text);
Reg.WriteString('Port',EPort.Text);

DataModule2.StrHostName:=Ehost.text;
DataModule2.StrDBUser:=Euser.text;
DataModule2.StrDBPass:=Epassword.Text;
DataModule2.StrDBPort:=EPort.Text;

except on ERegistryException do
MessageDlg('Database connection setting failed to update !', mtInformation,[mbOk], 0);
end;

finally
Reg.CloseKey;
MessageDlg('Database connection setting has been update !', mtInformation,[mbOk], 0);
end;
End;

[/code]

Buka data module, tambahkan beberapa variabel public untuk menyimpan setting database seperti gambar berikut ini.


add-public-variable-registry-delphi.png


Kembali ke form setting, tambahkan coding ke dalam event FormActivate untuk memanggil procedure ReadRegistry yang berguna untuk membaca setting yang sudah tersimpan didalam registry.


[code language="delphi"]
procedure TForm3.FormActivate(Sender: TObject);
begin
Reg:=TRegistry.Create;
Reg.RootKey:=HKEY_CURRENT_USER;
ReadRegistry;
end;
[/code]

Tambahkan coding ke dalam btnsave untuk menyimpan setting ke dalam registry.

[code language="delphi"]
procedure TForm3.BtnSaveClick(Sender: TObject);
begin
WriteRegistry;
end;
[/code]

Tambahkan coding ke dalam btnrefresh untuk mereload setting ke dalam variabel.

[code language="delphi"]
procedure TForm3.BtnRefreshClick(Sender: TObject);
begin
Reg:=TRegistry.Create;
Reg.RootKey:=HKEY_CURRENT_USER;
ReadRegistry;
end;
[/code]

Tambahkan coding ke dalam btnclose untuk menutup form setting.

[code language="delphi"]
procedure TForm3.BtnCloseClick(Sender: TObject);
begin
close;
end;
[/code]

Tambahkan coding ke dalam FormKeyPress untuk menerima trigger ketika user menekan tombol esc dari keyboard.

[code language="delphi"]

procedure TForm3.FormKeyPress(Sender: TObject; var Key: Char);
begin
if key = #27 then Close;
end;

[/code]

 

Buat validasi entry untuk masing-masing textbox.

[code language="delphi"]

procedure TForm3.EHostKeyPress(Sender: TObject; var Key: Char);
begin
If key=#13 then //fungsi bila tombol enter ditekan
Begin
If EHost.text <> '' then
Begin
EUser.setFocus;
End
else
Begin
Application.MessageBox('Please type server name first !','Information',MB_OK or MB_IconInformation);
EHost.SetFocus;
End;
End;
end;

procedure TForm3.EUserKeyPress(Sender: TObject; var Key: Char);
begin
If key=#13 then //fungsi bila tombol enter ditekan
Begin
If EUser.text <> '' then
Begin
EPassword.setFocus;
End
else
Begin
Application.MessageBox('Please type user name first !','Information',MB_OK or MB_IconInformation);
EUser.SetFocus;
End;
End;
end;

procedure TForm3.EPasswordKeyPress(Sender: TObject; var Key: Char);
begin
If key=#13 then //fungsi bila tombol enter ditekan
Begin
If EPassword.text <> '' then
Begin
EPort.setFocus;
End
else
Begin
Application.MessageBox('Please type password first !','Information',MB_OK or MB_IconInformation);
EPassword.SetFocus;
End;
End;
end;

procedure TForm3.EPortKeyPress(Sender: TObject; var Key: Char);
begin
If key=#13 then //fungsi bila tombol enter ditekan
Begin
If EPort.text <> '' then
Begin
BtnSave.setFocus;
End
else
Begin
Application.MessageBox('Please type port number first !','Information',MB_OK or MB_IconInformation);
EPort.SetFocus;
End;
End;
end;

[/code]

Selesai sudah coding untuk form setting.

 

Tambahkan Form Utama


Setelah user berhasil login ke dalam aplikasi, kita ingin agar user melihat tampilan form utama dari aplikasi yang sedang dia digunakan. Untuk itu tambahkan satu buah form lagi ke dalam project dan atur ukurannya menjadi full screen.



Ubah Sedikit Table Pengguna Yang Ada di MySQL


Sebelum melanjutkan, ada baiknya kalau kamu ubah sedikit field yang ada di table pengguna menjadi seperti gambar dibawah ini. Mengapa harus diubah ? Karena sebelumnya saya lupa menambahkan dan kalau tidak anda tambahkan, pasti programnya jadi error nantinya. Maaf ya..maklum faktor u.


table-pengguna-mysql.png



Tambahkan Procedure Koneksi Database ke Data Module


Berikut ini isi full source code dari data module tersebut.

[code language="delphi"]

unit Unit2;

interface

uses
System.SysUtils, System.Classes, 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.ConsoleUI.Wait,
FireDAC.Stan.Param, FireDAC.DatS, FireDAC.DApt.Intf, FireDAC.DApt, Data.DB,
FireDAC.Comp.DataSet, FireDAC.Comp.Client, FireDAC.Comp.UI, FireDAC.Phys.MySQL;

type
TDataModule2 = class(TDataModule)
FDConnection1: TFDConnection;
FDPhysMySQLDriverLink1: TFDPhysMySQLDriverLink;
FDGUIxWaitCursor1: TFDGUIxWaitCursor;
FDQuery1: TFDQuery;
procedure KoneksiMySQL;
Function OpenConnection:Boolean;
Procedure CloseConnection;

private
{ Private declarations }
public
{ Public declarations }
StrHostName,StrDBName,StrDBTransName,StrDBUser,StrDBPass,StrDBPort:String;
intUID:integer;
StrUserName:string;
StrFullName:string;
end;

var
DataModule2: TDataModule2;

implementation

{%CLASSGROUP 'Vcl.Controls.TControl'}

{$R *.dfm}

procedure TDataModule2.KoneksiMySQL;
Begin
FDConnection1 := TFDConnection.Create(Self);

try
FDConnection1.DriverName := 'MySQL';
FDConnection1.Params.Add('Server=' + StrHostName);
FDConnection1.Params.Add('Database=' + StrDBName);
FDConnection1.Params.Add('User_name=' + StrDBUser);
FDConnection1.Params.Add('Password=' + StrDBPass);
FDConnection1.Params.Add('Port=' + StrDBPort);
FDConnection1.LoginPrompt:=False;
FDConnection1.Connected := True;
FDQuery1:=TFDQuery.Create(Self);
FDQuery1.Connection := FDConnection1;
except
//
end;
End;

Function TDataModule2.OpenConnection:Boolean;
Var ConnString:String;
Begin
try
if FDConnection1.Connected = True then
Begin
result:=True;
End
Else
Begin
KoneksiMySQL;
End;

except
result:=False;
end;
End;

Procedure TDataModule2.CloseConnection;
Begin
FDQuery1.Close;
FDConnection1.Close;
End;

end.

[/code]


Coding Form Login


Karena kita juga akan bermain dengan windows registry di form login, mari kita tambahkan class registry ke dalam uses delphi yang ada di bagian atas, seperti yang telah kita lakukan pada form setting.


Tambahkan atau register dua buah procedure ReadRegistry dan WriteRegistry, variable Reg sebagai TRegistry dibagian private, seperti yang  telah kita lakukan pada form setting.


Untuk mempersingkat waktu, dan saya khawatir kalau saya mesti lanjutkan penjelasannya satu per satu, mungkin cerita ini akan terus berlanjut ke puluhan atau ratusan episode seperti sinetron-sinetron yang ada di tv :)  jadi lebih baik saya posting full source codenya saja. Monggo disimak...


[code language="delphi"]

unit Unit1;

interface

uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, Vcl.Imaging.pngimage,
Vcl.StdCtrls, Vcl.Imaging.jpeg, Registry;

type
TForm1 = class(TForm)
Panel1: TPanel;
Image1: TImage;
BtnCancel: TButton;
BtnLogin: TButton;
TxtPassword: TEdit;
TxtUserName: TEdit;
Label4: TLabel;
Label3: TLabel;
Label2: TLabel;
Label1: TLabel;
Label6: TLabel;
Label5: TLabel;
BtnConnection: TButton;
procedure BtnCancelClick(Sender: TObject);
procedure FormKeyPress(Sender: TObject; var Key: Char);
procedure BtnConnectionClick(Sender: TObject);

Procedure ReadRegistry;
procedure WriteRegistry;
procedure LoginCheckSQL;
procedure BtnLoginClick(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure TxtUserNameEnter(Sender: TObject);
procedure TxtUserNameExit(Sender: TObject);
procedure TxtPasswordEnter(Sender: TObject);
procedure TxtPasswordExit(Sender: TObject);
procedure TxtUserNameKeyPress(Sender: TObject; var Key: Char);
procedure TxtPasswordKeyPress(Sender: TObject; var Key: Char);
private
{ Private declarations }
Reg: TRegistry;
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

uses Unit3, Unit2, Unit4;

procedure TForm1.ReadRegistry;
var alamat:string;
begin
alamat:='\Software\Delphi-MySQL\DataLogin';

try
try
Reg.OpenKey(alamat, false);

DataModule2.StrHostName:=Reg.ReadString('HostName');
DataModule2.StrDBName:=Reg.ReadString('Database');
DataModule2.StrDBUser:=Reg.ReadString('UserName');
DataModule2.StrDBPass:=Reg.ReadString('Password');
DataModule2.StrDBPort:=Reg.ReadString('Port');

if DataModule2.StrHostName = '' then
begin
WriteRegistry;Exit;
end
else if DataModule2.StrDBName = '' then
begin
WriteRegistry;Exit;
end
else if DataModule2.StrDBUser = '' then
begin
WriteRegistry;Exit;
end
else if DataModule2.StrDBPass = '' then
begin
WriteRegistry;Exit;
end
else if DataModule2.StrDBPort = '' then
begin
WriteRegistry;Exit;
end

except on ERegistryException do
//
end;

finally
Reg.CloseKey;
end;
end;

procedure TForm1.WriteRegistry;
var alamat:string;
begin
alamat:='\Software\Delphi-MySQL\DataLogin';

try
Reg.OpenKey(alamat,true);
Reg.WriteString('HostName','localhost'); //bisa diganti nomor IP
Reg.WriteString('Database','delphi_mysql');
Reg.WriteString('UserName','root');
Reg.WriteString('Password','rahasia');
Reg.WriteString('Port','3306');

DataModule2.StrHostName:='localhost';
DataModule2.StrDBName:='delphi_mysql';
DataModule2.StrDBUser:='root';
DataModule2.StrDBPass:='rahasia';
DataModule2.StrDBPort:='3306';

finally
Reg.CloseKey;
end;
//MessageDlg('Database connection setting has been update !', mtInformation,[mbOk], 0);
End;

procedure TForm1.BtnCancelClick(Sender: TObject);
begin
application.Terminate;
end;

procedure TForm1.BtnConnectionClick(Sender: TObject);
begin
Form3.ShowModal;
end;

procedure TForm1.BtnLoginClick(Sender: TObject);
begin
//Login Validation
if txtusername.Text = '' then
begin
Application.MessageBox('Please type your user name first !','Information',MB_OK or MB_IconInformation);
txtusername.SetFocus;Exit;
end

else if txtpassword.Text = '' then
begin
Application.MessageBox('Please type your password first !','Information',MB_OK or MB_IconInformation);
txtpassword.SetFocus;Exit;
end;

Try
LoginCheckSQL;

except
Application.MessageBox('Connection failed ! Please contact your database administrator.','Information', MB_OK or MB_ICONWARNING);
End;
end;

Procedure TForm1.LoginCheckSQL;
Begin
if DataModule2.OpenConnection = True then
{ Create the query. }
DataModule2.FDQuery1.SQL.Clear;
DataModule2.FDQuery1.SQL.Add('Select * from pengguna where username = ' + QuotedStr(TxtUsername.Text));

try
DataModule2.FDQuery1.open;
DataModule2.FDQuery1.Active := False;
DataModule2.FDQuery1.Active := True;

if not DataModule2.FDQuery1.eof then
Begin
if strtoint(DataModule2.FDQuery1.FieldByName('status').AsString) = 0 then
begin
MessageDlg('Sorry, user ' + txtusername.Text + ' is not active anymore ! Please contact your database administrator.', mtInformation,[mbOk], 0);
end
else if DataModule2.FDQuery1.FieldByName('password').AsString <> TxtPassword.text then
Begin
MessageDlg('Incorrect password ! Please try another one.', mtInformation,[mbOk], 0);
end
else
begin
DataModule2.intUID:=strtoint(DataModule2.FDQuery1.FieldByName('id').AsString);
DataModule2.StrUserName:=DataModule2.FDQuery1.FieldByName('username').AsString;
DataModule2.StrFullName:=DataModule2.FDQuery1.FieldByName('namalengkap').AsString;

Form4.Show;
form1.Hide;
end
End
else
Begin
MessageDlg('Sorry, user ' + txtusername.Text + ' cannot be found ! Please contact your database administrator.', mtInformation,[mbOk], 0);
end

except
on e: Exception do
begin
MessageDlg('Error while doing query', mtError, [mbOK], 0);
Exit;
end;
end;
End;

procedure TForm1.TxtPasswordEnter(Sender: TObject);
begin
TxtPassword.Color:=$00FFEBDF;
end;

procedure TForm1.TxtPasswordExit(Sender: TObject);
begin
TxtPassword.Color:=$FFFFFF;
end;

procedure TForm1.TxtPasswordKeyPress(Sender: TObject; var Key: Char);
begin
If key=#13 then //fungsi bila tombol enter ditekan
Begin
If Txtpassword.text <> '' then
Begin
btnlogin.setFocus;
End
else
Begin
Application.MessageBox('Please type your password first !','Information',MB_OK or MB_IconInformation);
txtpassword.SetFocus;
End;
End;
end;

procedure TForm1.TxtUserNameEnter(Sender: TObject);
begin
TxtUserName.Color:=$00FFEBDF;
end;

procedure TForm1.TxtUserNameExit(Sender: TObject);
begin
TxtUserName.Color:=$FFFFFF;
end;

procedure TForm1.TxtUserNameKeyPress(Sender: TObject; var Key: Char);
begin
If key=#13 then //fungsi bila tombol enter ditekan
Begin
If TxtUserName.text <> '' then
Begin
Txtpassword.setFocus;
End
else
Begin
Application.MessageBox('Please type your user name first !','Information',MB_OK or MB_IconInformation);
txtusername.SetFocus;
End;
End;
end;

procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
if key = #27 then application.terminate;
end;

procedure TForm1.FormShow(Sender: TObject);
begin
Reg:=TRegistry.Create;
Reg.RootKey:=HKEY_CURRENT_USER;
ReadRegistry;
DataModule2.KoneksiMySQL;
end;

end.
[/code]

Selesai, silahkan anda jalankan aplikasi tersebut. Usahakan untuk tidak sekedar melakukan copy paste source code ya.


Cobalah kamu buat eventnya satu per satu, kemudian kamu isikan codingnya untuk tiap bagian sambil kamu coba pahami maksud, tujuan dan caranya.




[caption id="attachment_2384" align="aligncenter" width="516"]form-login-delphi-success.png Kamu berhasil login ke database[/caption]

[caption id="attachment_2381" align="aligncenter" width="470"]form-login-delphi.png Kamu membuka form setting[/caption]

[caption id="attachment_2382" align="aligncenter" width="473"]form-login-delphi-incorrect-password.png Kamu login menggunakan user name atau password yang salah[/caption]

[caption id="attachment_2383" align="aligncenter" width="473"]form-login-delphi-user-not-active.png Kamu login menggunakan data user yang sudah tidak aktif[/caption]

Selamat mencoba dan silahkan di kembangkan lebih lanjut ya...jika ada pertanyaan, kirimkan saja. Semoga bermanfaat :)


https://www.youtube.com/watch?v=bI6NYFG36uE

https://www.youtube.com/watch?v=dAn4uUo5IDI

 

https://www.youtube.com/watch?v=M-odcAKHHM4

 

https://www.youtube.com/watch?v=F17d59BSsFA

https://www.youtube.com/watch?v=ntTGP2wO-r8

https://www.youtube.com/watch?v=2yAy-o7uqj8

Download link source code delphi-mysql.

Comments

Popular posts from this blog

Mengirim Email dengan Delphi XE Menggunakan Account Google

Kemarin kita sudah membahas mengenai bagaimana caranya mengirim email melalui aplikasi yang dibuat dengan menggunakan VB.NET . Nah sekarang bagaimana caranya mengirim email tapi melalui aplikasi Delphi XE? Untuk mengirim email melalui Delphi XE sebenarnya mudah sekali. Caranya juga hampir mirip dengan VB.NET kok. Component yang dibutuhkan antara lain adalah TIdSMTP, TIdMessage dan TIdSSLIOHandlerSocketOpenSSL. Tanpa component-component tersebut kamu tidak akan dapat mengirimkan email. Selain component yang saya sebutkan diatas, tentu kamu akan membutuhkan koneksi internet. Tanpa itu mustahil email dapat dikirim ke alamat tujuan. Sebenarnya kamu juga dapat menambahkan class dari masing-masing component diatas ke dalam uses tanpa harus menggunakan component. Hal lain yang sangat penting yang mesti kamu pahami adalah untuk mengirimkan sebuah email dibutuhkan yang namanya email sender (email si pengirim), email recipient (email si penerima), email cc (optional), email bcc (optional) dan SM

Penjumlahan Inputbox Secara Otomatis Di HTML, Php, Dan JQuery

Hai sobat yadishare apa kabar? Sudah hari sabtu lagi nih. Iseng-iseng ah pengen nulis mengenai html dan jquery. Ketika kita membangun sebuah aplikasi menggunakan php, seringkali kita harus membuat sebuah penjumlahan antar textbox secara otomatis agar memudahkan user. Misalnya kita memiliki 3 buah inputbox yang kita buat dengan menggunakan HTML yang terdiri dari sub total, ppn, dan grand total. Kemudian setiap kali kita menginputkan angka ke dalam textbox sub total dan textbox ppn tersebut, kita ingin textbox grand total jumlahnya terhitung secara otomatis agar dapat memudahkan user. Lalu bagaimana caranya? Nah untuk dapat melakukannya, kita pasti butuh cara yang mudah dan cepat bukan? Ada banyak cara yang dapat kita lakukan untuk mewujudkan hal tersebut. Salah satunya adalah dengan menggunakan bantuan JQuery. Pertama kalian bisa download file jquery.js disini . Masukkan ke dalam folder assets/js. Kalian juga dapat menambahkan script berikut ini tanpa harus mendownload f

Aplikasi Database CRUD (VB6 + Ms. Access + Crystal Report 8)

Assalamualaikum wr. wb. sobat yadishare, apa kabar ? Di artikel kali ini saya akan membagikan tutorial tentang bagaimana cara membuat aplikasi CRUD (create, read, update, dan delete) menggunakan aplikasi atau bahasa pemrograman visual basic 6.0 dan database yang akan saya gunakan adalah database microsoft access. Untuk pembuatan laporannya nanti saya akan menggunakan aplikasi crystal report versi 8. Oke topiknya kali ini adalah membuat aplikasi crud sederhana tentang data pegawai. Namun di dalam aplikasi ini nanti teman-teman akan mempunyai opsi yang cukup lengkap. Selain ada fitur crud dan filtering data, teman-teman bisa langsung mencetak laporannya ke dalam printer. Keren kan ??? Ok langsung saja kita mulai tutorialnya. Untuk membuat aplikasi crud ini, dibutuhkan sebuah database microsoft access. Nah untuk mempersingkat waktu, berhubung saya sudah membuatkan tutorialnya di artikel dan video saya sebelumnya, jadi saya tidak akan bahas lagi disini. Teman-teman bisa langsung b