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

Tips Jitu Cara Mengatasi Error Pada Saat Compile Aplikasi Menggunakan Visual Basic 6

Sebenarnya ada banyak sekali nih project yang harus saya kerjakan dikantor. Namun terkadang apa yang kita rencanakan sering kali berbeda dengan kenyataan. Maksud hati ingin focus dulu ke satu project, tapi karena adanya satu dan lain hal, akhirnya terpaksa deh harus melakukan modifikasi dan membuka project lama yang sebenarnya saya sudah malas untuk berhubungan lagi dengannya :) Project ini sudah dibangun dari awal tahun 2000-an, jauh sebelum saya join. Ya intinya saya dapat warisannya lah seperti itu. Di bangun masih dengan menggunakan vb5-vb6 waktu itu. Sekarang sudah tahun 2016. Jadi sudah lama ya sob. Sudah ketinggalan jaman lah kurang lebih. Meskipun sudah tua, tapi menurut saya visual basic tetap menjadi bahasa pemrograman yang masih powerful. Masalah Kompatibilitas Nah masalah terbesar dalam menggunakan program-program lawas seperti itu biasanya ada pada kompatibilitas component-componentnya. Karena hardware dan os yang kita gunakan biasanya akan berubah seiring waktu. Jika soba...

Kapan Kita Bisa Gajian dari youtube atau google adsense ?

Kapan kita bisa gajian dari youtube atau google adsense ? Ya pertanyaan ini memang seringkali muncul dari berbagai youtuber baru termasuk saya pada waktu itu dan orang-orang awam yang memang penasaran dengan uang yang dapat dihasilkan dari youtube. Sebagai youtuber yang memang sudah pernah merasakan gajian dari youtube, maka saya akan mencoba untuk berbagi sedikit pengalaman saya. Siapa tahu bermanfaat buat teman-teman yang sedang penasaran karena tak sabar menantikan datangnya pembayaran adsense untuk pertama kali. Sama halnya seperti menunggu gaji pertama saat kita bekerja. Pembayaran google adsense akan dapat dilakukan setelah saldo kita mencapai ambang batas minimum pembayaran yaitu 100 dollar atau kalau dirupiahkan sekitar Rp 1.300.000. Kurang dari itu maka proses pembayaran tidak dapat dilakukan meskipun sudah masuk tanggal pembayaran yang biasanya dilakukan oleh google. Untuk tanggal pembayarannya sendiri biasanya akan dilakukan atau diproses di tanggal 21-25 setiap bulannya...

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...