Rabu, 18 Maret 2015

Program Remote Shutdown

Membuat Program Remote Shutdown Sederhana Dengan Delphi
Dalam suatu jaringan komputer yang terdiri dari 2 atau lebih komputer yang terkoneksi satu dengan lainnya dapat di aplikasikan ke berbagai kebutuhan, seperti distribusi data, pengoperasian komputer lain di tempat yang berbeda, dan di bidang industri digunakan untuk kendali atau kontrol peralatan yang terhubung ke komputer di dalam suatu jaringan. Pada artikel kali ini akan dibuat sebuah aplikasi sederhana menggunakan Borland Delphi 6, yang berfungsi untuk mematikan atau men-shutdown komputer lain yang terhubung melalui jaringan. Aplikasi ini dibuat dengan komponen standart pada Delphi 6, yaitu ClientSocket dan ServerSocket.


Pendahuluan
Pada Delphi, khususnya Delphi 6 terdapat komponen yang berfungsi untuk komunikasi antara 2 komputer atau lebih yang terhubung melalui jaringan. Untuk program Delphi yang akan kita buat ini terdapat 2 aplikasi, yaitu aplikasi client dan aplikasi server. Kedua komponen tersebut adalah ClientSocket dan ServerSocket yang terdapat pada Component Pallete tab Internet, seperti pada gambar berikut:
Aplikasi remote shutdown ini adalah pengembangan dari aplikasi chatting client-server yang dibuat dengan Delphi juga. Banyak artikel-artikel, blog-blog maupun forum diskusi delphi yang membahas aplikasi client server tersebut. Cara kerjanya sangat sederhana sekali, dimana terdapat dua buah aplikasi yaitu aplikasi client dan aplikasi server. Aplikasi server dijalankan pada komputer yang akan di kendalikan atau komputer yang akan di remote, sedangkan aplikasi client dijalankan oleh user di sebuah komputer pengendali. Prinsip kerjanya sangat sederhana, layaknya aplikasi chatting sederhana, aplikasi client mengirimkan sebuah text, yang nantinya akan diterima oleh aplikasi server sebagai sebuah “string”, kemudian akan diolah menjadi sebuah perintah baru, yaitu men-shutdown komputer server. Sederhana sekali bukan???
Mungkin sedikit keterangan di atas dapat memberikan gambaran tentang cara kerja aplikasi yang sangat sederhana dan jauh dari sempurna ini, khususnya bagi para pemula seperti saya. Karena saya juga masih dalam tahap belajar dan sangat membutuhkan masukan dari teman-teman dan para master Delphi.


Ok, Langsung meluncur ke pembuatan programnya, persiapannya cukup seadanya saja: Komputer atau laptop yang terinstal Boland Delphi (Versinya terserah anda, saya menggunakan Borland Delphi 6), Niat dan kemauan belajar, apalagi ya?? รจ Secangkir kopi + Rokok atau snack juga boleh (opsional) hehehehe ……..

Remote Shutdown
Aplikasi ini terbagi menjadi 2, yaitu aplikasi client dan aplikasi server. Aplikasi Client adalah aplikasi pengendali atau pengontrol, sedangkan aplikasi server adalah aplikasi yang di jalankan pada komputer yang ingin di kendalikan (komputer yang ingin di shutdown)

Source Code Program Client :

Berikut ini adalah source code lengkap untuk program client, ScreenShoot program jadinya bisa dilihat pada gambar berikut:
unit RSClient;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, WinXP, ScktComp;

type
  TForm1 = class(TForm)
    GroupBox1: TGroupBox;
    Edit1: TEdit;
    Button1: TButton;
    StaticText1: TStaticText;
    StaticText2: TStaticText;
    Button2: TButton;
    Button3: TButton;
    WinXP1: TWinXP;
    ClientSocket1: TClientSocket;
    procedure Button3Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure ClientSocket1Error(Sender: TObject; Socket: TCustomWinSocket;
      ErrorEvent: TErrorEvent; var ErrorCode: Integer);
    procedure ClientSocket1Connect(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button3Click(Sender: TObject);
begin
  application.Terminate;  // keluar program
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
clientsocket1.Host:=edit1.Text;  // alamat ip server
clientsocket1.Active:=true;      // mengaktifkan / membuka socket sisi client
clientsocket1.Port:=1880;        // menggunakan port 1880
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
button2.Enabled:=false;    // saat aplikasi mulai dijalankan button shutdown di disable
end;

procedure TForm1.ClientSocket1Error(Sender: TObject;
  Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
  var ErrorCode: Integer);     //saat soket client error
begin
button2.Enabled:=false;   //disable button shutdown
showmessage('Error On Socket');  //menampilkan pesan error
end;

procedure TForm1.ClientSocket1Connect(Sender: TObject;
  Socket: TCustomWinSocket);   //saat sudah terhubung ke server
begin
statictext2.Caption:='Connected to Server';   //keterangan bahwa sudah terhubung ke server
button2.Enabled:=true;   // button shutdown di aktifkan
end;

procedure TForm1.Button2Click(Sender: TObject);
begin       //button shutdown
if (clientsocket1.Socket.Connected) then  //saat soket terhubung maka
 clientsocket1.Socket.SendText('shutdown'); // button 2 mengirim string ke server
end;

end.


Source Code Program Server :

Berikut ini adalah source code lengkap untuk program server, ScreenShoot program jadinya bisa dilihat pada gambar berikut:
 unit RSServer;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ScktComp, WinXP;

type
  TForm1 = class(TForm)
    WinXP1: TWinXP;
    ServerSocket1: TServerSocket;
    StaticText1: TStaticText;
    Edit1: TEdit;
    procedure FormCreate(Sender: TObject);
    procedure ServerSocket1ClientRead(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure Edit1Change(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
serversocket1.Open;   //membuka soket server
serversocket1.Port:=1880; //menggunakan port 1880
end;

procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
begin
edit1.Text:=socket.ReceiveText;
end;

procedure TForm1.Edit1Change(Sender: TObject);
begin
if edit1.Text='shutdown' then  //bila edit1.text berisi text shutdown maka,
begin winexec('shutdown -r -t 0 -f',sw_normal); end;  //perintah shutdown dijalankan
end;

end.



Penutup

Aplikasi ini berfungsi layaknya sebuah pisau, dapat bermanfaat dan dapat juga merugikan. Bermanfaat untuk mempermudah administrasi komputer dalam suatu jaringan, dan merugikan bila di kembangkan untuk aplikasi Trojan maupun virus komputer. Penulis menyadari bahwa tulisan ini jauh dari sempurna, seperti pepatah “Tiada gading yang tak retak” Untuk itu saran dan kritik yang membangun sangat penulis harapkan. TerimaKasih buat teman-teman semua yang telah memberikan saya semangat untuk menulis. Specials thanks to: WEIP-ITS Surabaya yang telah memberikan sesuatu yang sangat berguna bagi penulis. Harapan penulis adalah berkembangnya dunia teknologi Bangsa Indonesia, agar tidak di pandang rendah oleh bangsa lain. MERDEKA!!!!!




Referensi








Mengukur Waktu Tayang Form

Mengukur Waktu Tayang Form
Salah satu syarat suatu aplikasi dikatakan tangguh adalah apabila aplikasi sangat responsif
terhadap interaksi dengan pengguna. Salah satu interaksi yang dilakukan oleh aplikasi adalah
penayangan suatu jendela (form).
Permasalahan yang sering timbul adalah, bahwa kita tidak dapat mengukur waktu tayang suatu
form dengan pasti, yang dapat dilakukan adalah berdasarkan perkiraan, misalnya, penayangan
form tampak lebih cepat dan tanpa kedipan (flicker). Namun kemudian jika diajukan pertanyaan
seperti: “Berapa selisih kecepatannya, apakah signifikan dan apa buktinya?”. Kita tidak dapat
menyertakan bukti yang kuat, yaitu metode pengukuran yang dilakukan serta hasil pengukuran
yang terukur.
Untuk itulah, dalam kesempatan ini, akan dibahas bagaimana membuat pengukur lama proses
(profiler) sederhana untuk mengukur waktu tayang (load time) suatu form dari form tersebut di
buat hingga benar - benar tampil dan siap digunakan. Tentunya dengan menggunakan Delphi.
1. Siklus Hidup Form
Sebelum melangkah lebih jauh, perlu diketahui terlebih dahulu siklus hidup suatu form, dari
form tersebut dibuat, ditampilkan hingga ditutup dan dibebaskan dari memori. Berikut
penjelasan singkat / ringkasan mengenai siklus hidup form:
1. Pembuatan Form (Form Creation)
Terdapat 2 (dua) cara pembuatan form, yaitu melalui pemanggilan konstruktor Create,
misalnya
AForm := TForm.Create(nil);
dan melalui obyek Application.CreateForm. Ketika suatu form dibuat,
beberapa instruksi inisialisasi dijalankan.
Jika form yang dimaksud sudah dirancang pada saat disain (design-time), yang ditandai
dengan disimpan pada resourcefile yaitu DFM, maka kode – kode yang terdapat pada
resourcefile tersebut dibaca (parse) dan diterjemahkan menjadi informasi / keterangan
suatu obyek. Langkah selanjutnya adalah pembuatan obyek dan pemberian properti dan
event yang diperlukan berdasarkan informasi obyek yang telah diterjemahkan tersebut.
Jika form yang dimaksud tidak dirancang pada saat disain, dengan kata lain form
tersebut dibuat pada saat itu juga (on the fly / run time creation), maka pembuatan
obyek dan pengaturan properti dan event form tersebut berdasarkan nilai default yang
telah ditentukan. Pemberian nilai properti dan event selanjutnya diserahkan ke
pemrogram.
Setelah pembuatan obyek dan inisialisasi terhadap form selesai dikerjakan, method
DoCreate dijalankan. Salah satu isi method DoCreate adalah menjalankan event
OnCreate, jika event tersebut tersedia.
2. Penayangan Form (Form Showing)
Setelah form selesai dibuat, jika terdapat instruksi untuk menampilkan form, baik itu
melalui properti Visible := True atau method Show atau method ShowModal,
maka form akan tertayang di layar. Penayangan form tidak lepas dari penggambaran
form, yaitu dijalankannya method Paint yang bertugas menjalankan event OnPaint
jika tersedia. Selain itu juga dijalankan method DoShow yang akan menjalankan
instruksi yang diberikan pada event OnShow, jika tersedia.
3. Aktivasi Form (Form Activation)
Setelah form ditayangkan, langkah selanjutnya adalah aktivasi form tersebut, yaitu
pemberian fokus ke form tersebut sehingga form yang dimaksud tampil di atas jendela
yang lain dan dalam posisi aktif siap menerima respon dari pengguna.
Ada beberapa method yang dijalankan pada saat aktivasi form, yaitu Resizing,
Paint dan Activate. Method Activate mengaktifkan semua kontrol yang ada
didalam form tersebut yaitu dengan mengirimkan pesan CM_ACTIVATE. Selain itu
method Activate akan menjalankan instruksi yang diberikan pada event
OnActivate, jika tersedia.
4. Penggunaan Form (Form Usage)
Pada tahap ini form bertanggung jawab terhadap interaksi pengguna berdasarkan kode
yang telah dirancang. Banyak sekali event dan method yang dijalankan, baik itu yang
telah disediakan maupun method / event buatan pemrogram.
5. Konfirmasi Penutupan Form (Form Close Query)
Ketika form akan ditutup, yaitu ketika menerima method Close atau CloseModal,
method CloseQuery dijalankan, salah satu instruksinya adalah menjalankan event
OnCloseQuery jika tersedia.
6. Penutupan Form (Form Closing)
Jika konfirmasi penutupan form menghasilkan nilai True, yaitu instruksi agar form ditutup, maka method DoClose akan dijalankan. Salah satu isinya adalah menjalankan
event OnClose jika tersedia.
7. Penyembunyian Form (Form Hiding)
Tahapan selanjutnya adalah penyembunyian form dari layar. Tahapan ini ditandai
dengan deaktivasi form dan kontrol yang ada didalamnya melalui method
Deactivate atau pesan CM_DEACTIVATE. Selanjutnya form disembunyikan
dengan memberikan properti Visible := False atau menjalankan method
DoHide yang isinya menjalankan event OnHide jika tersedia.
8. Penghancuran Form (Form Destruction)
Setelah form disembunyikan, langkah selanjutnya adalah menghancurkan form.
Tahapan ini ditandai dengan pemberian perintah Free yang menjalankan method
DoDestroy. Method ini bertugas menjalankan event OnDestroy jika tersedia.
Pada tahap ini semua alokasi obyek dan memori baik yang menjadi tanggung jawab
sistem maupun tanggung jawab pemrogram dibebaskan agar memori yang tersedia
dapat digunakan oleh aplikasi lain yang lebih membutuhkan.
2. Metode Pengukuran
Setelah mengetahui siklus hidup form, dari pembuatan, penayangan, pengunaan hingga
penghancuran, langkah selanjutnya adalah mengetahui metode pengukuran yang akan
digunakan.
Memulai Pengukuran
Kode pengukuran disisipkan pada saat pemanggilan konstruktor suatu form. Yaitu di dalam
method create. Pada awal baris, sisipkan kode untuk menghitung waktu mulai proses,
yaitu dengan menggunakan fungsi GetTickCount() yang hasilnya disimpan pada suatu
variabel, sebagai contoh adalah FStart yang bertipe Cardinal.
Mengakhiri Pengukuran
Pengukuran diletakkan pada bagian paling akhir aktivasi form (form activation), yaitu
dengan menggunakan fungsi GetTickCount() yang hasilnya disimpan pada variabel
FEnd yang bertipe Cardinal.
Teknik Penyisipan Kode
Pasti ada yang berpendapat bahwa kode disisipkan pada event OnCreate (awal
pengukuran) dan OnActivate (akhir pengukuran). Tidak. Seperti yang telah dijelaskan
pada siklus hidup form, peletakan pada event OnCreate tidak mengukur rutin untuk membaca form DFM dan pembuatan komponen yang ada didalamnya. Dan penyisipan
pada event OnActivate juga demikian, tidak menjamin bahwa semua rutin sudah
dilakukan. Lalu dimana?
Tentu saja di constructor Create. Untuk mewujudkannya, perlu dilakukan
penimpaan (override) constructor Create, menyisipkan kode pengukuran diatas
segalanya, kemudian memanggil constructor yang sebenarnya (inherited).
Demikian pula untuk menyisipkan pengukuran akhir. Method Activate harus ditimpa
(override) dengan meletakkan kode pengukuran di bawah segalanya, dengan sebelumnya
memanggil method Activate yang sebenarnya (inherited).
3. Menerapkan Teknik Pengukuran
Berdasarkan metode pengukuran yang telah ditentukan, penerapannya dalam kode sumber
dicontohkan pada bagian berikut.

Rancanglah sebuah proyek aplikasi yang terdiri dari 1 (satu) form. Inti dari aplikasi ini
adalah untuk menampilkan waktu tayang yang telah diukur melalui sebuah tombol. Dalam
form tersebut terdapat TMemo, TButton dan TStatusBar seperti yang digambarkan pada
disain form berikut:
Kemudian lengkapi kode sumber seperti di bawah ini:
unit SingleFormUnit;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls;
type
TSingleForm = class(TForm)
btnShowResult: TButton;
mmoLegend: TMemo;
stbMain: TStatusBar;
procedure btnShowResultClick(Sender: TObject);
private
{ Private declarations }
FStart, FEnd : Cardinal;
public
{ Public declarations }
constructor Create(AOwner: TComponent); override;
procedure Activate; override;
end;
var
SingleForm: TSingleForm;
implementation
{$R *.dfm}
{ TSingleForm }
procedure TSingleForm.Activate;
begin
inherited;
FEnd := GetTickCount;
end;
procedure TSingleForm.btnShowResultClick(Sender: TObject);
begin
ShowMessage('Load Time : ' + IntToStr(FEnd - FStart));
end;
constructor TSingleForm.Create(AOwner: TComponent);
begin
FStart := GetTickCount;
inherited;
end;
end.
Pengukuran secara otomatis akan dilakukan ketika aplikasi dijalankan. Klik tombol "Show
Measurement Result" untuk melihat hasilnya.

Nah selesai, cukup mudah bukan ?
Selengkapnya mengenai kode sumber demo mengukur waktu tayang dapat disimak pada
kode sumber FormLoadProfiler-SingleForm.7z terlampir.
4. Teknik Pengukuran Pada Banyak Form
Setelah berhasil menerapkan teknik pengukuran pada sebuah form, langkah selanjutnya
adalah bagaimana melakukan pengukuran pada banyak form. Sebuah aplikasi tentunya
tidak hanya terdiri dari 1 (satu) form saja bukan?
Menerapkan kode pengukuran pada setiap form tentu saja bisa dilakukan, namun
bagaimana apabila jumlah form nya sangat banyak? Cukup menyita waktu dan tenaga
bukan ?
Nah bagaimana teknik menambahkan kode pengukuran tanpa harus menuliskannya ke
setiap form yang diinginkan secara berulang – ulang ?
Salah satu teknik yang dapat digunakan adalah interposer class. Berikut pengertian
inteposer class yang dicuplik dari catatan ke 67 dari handbook Marco Cantu:
An interposer class is a class with the same name of the class it wants
to change (using inheritance). By adding its unit after the unit of its
base class in a uses statement, a unit will use the modified version of
the class rather than the original. Interposer classes are not a
terribly neat technique, rather a hack. But they can be very handy,
indeed!
Membuat Interposer Class
Lalu bagaimana membuat interposer class? Pertama, buat kelas TForm baru yang
merupakan turunan dari kelas TForm yang asli, yaitu kelas yang dideklarasikan pada unit
Forms. Pendeklarasian dari kelas induk harus menyertakan unit asal dimana kelas TForm
yang sebenarnya berasal, yaitu Forms.TForm.
TForm = class(Forms.TForm);
Kedua, tambahkan variable FStart dan FEnd. Untuk lingkup aksesnya, bisa dipilih
apakah Private, Protected atau Public. Karena kita ingin mengakses variabel FStart dan
FEnd, maka lingkup aksesnya minimal adalah protected. Anda bisa saja membuatnya
sebagai private, namun nantinya harus menambahkan properti untuk mengakses kedua
variabel tersebut.
protected
FStart, FEnd : Cardinal;
Ketiga, tidak lupa deklarasikan konstruktor Create dan method Activate yang akan
ditimpa (override).
public
constructor Create(AOwner: TComponent); override;
procedure Activate; override;
Sehingga deklarasi kelas interposer menjadi:
type
TForm = class(Forms.TForm)
protected
FStart, FEnd : Cardinal;
public
{ Public declarations }
constructor Create(AOwner: TComponent); override;
procedure Activate; override;
end;
Rangkaian kode selanjutnya sama dengan pada kode untuk form tunggal, sehingga kode
lengkapnya menjadi sebagai berikut:
{-----------------------------------------------------------------------------
The contents of this file are subject to the Mozilla Public License
Version 1.1 (the "License"); you may not use this file except in compliance
with the License. You may obtain a copy of the License at
http://www.mozilla.org/MPL/MPL-1.1.html
Software distributed under the License is distributed on an "AS IS" basis,
WITHOUT WARRANTY OF ANY KIND, either expressed or implied. See the License for
the specific language governing rights and limitations under the License.
The Original Code is: MultipleInterposerClass.pas, released on 2008-09-15
The Initial Developer of the Original Code is Bayu Prasetio
Portions created by Bayu Prasetio are Copyright (C) 2008 Bayu Prasetio.
All Rights Reserved.
-----------------------------------------------------------------------------}
unit MultipleInterposerClass;
interface
uses
Classes, Forms;
type
TForm = class(Forms.TForm)
protected
FStart, FEnd : Cardinal;
public
{ Public declarations }
constructor Create(AOwner: TComponent); override;
procedure Activate; override;
end;
implementation
{ TForm }
uses
Windows;
procedure TForm.Activate;
begin
inherited;
FEnd := GetTickCount;
end;
constructor TForm.Create(AOwner: TComponent);
begin
FStart := GetTickCount;
inherited;
end;
end.
Menggunakan Interposer Class
Langkah selanjutnya adalah bagaimana menggunakan interposer class tersebut. Caranya
cukup mudah, yaitu tambahkan unit dimana interposer class tersebut dideklarasikan pada
bagian klausul uses.
Yang perlu diperhatikan adalah, urutan deklarasi unit tersebut harus terletak setelah unit
Forms karena jika dideklarasikan sebelum unit Forms, maka yang akan dijadikan sebagai
rujukan adalah kelas TForm yang dideklarasikan pada unit Forms, bukan kelas TForm
dari unit MultipleInterposerClass. Dan setelah deklarasi ditambahkan, selesai
sudah.
Berikut contoh bagaimana menggunakan interposer class:
unit MultipleMainFormUnit;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls, MultipleInterposerClass;
type
TMainForm = class(TForm)
btnShowResult: TButton;
mmoLegend: TMemo;
stbMain: TStatusBar;
btnLoadSecondary: TButton;
lblLoadTime: TLabel;
btnLoadAnotherForm: TButton;
procedure btnShowResultClick(Sender: TObject);
procedure btnLoadSecondaryClick(Sender: TObject);
procedure btnLoadAnotherFormClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
MainForm: TMainForm;
implementation
{$R *.dfm}
{ TSingleForm }
uses
MultipleSecondaryFormUnit, MultipleAnotherFormUnit;
procedure TMainForm.btnLoadAnotherFormClick(Sender: TObject);
begin
AnotherForm := TAnotherForm.Create(nil);
AnotherForm.ShowModal;
AnotherForm.Free;
end;
procedure TMainForm.btnLoadSecondaryClick(Sender: TObject);
begin
SecondaryForm := TSecondaryForm.Create(nil);
SecondaryForm.ShowModal;
SecondaryForm.Free;
end;
procedure TMainForm.btnShowResultClick(Sender: TObject);
begin
lblLoadTime.Caption := ' Form Load Time: ' + IntToStr(FEnd - FStart) + ' ms';
btnShowResult.Enabled := False;
end;
end.
Berikut contoh demo hasil pengukuran dengan banyak form:

Selengkapnya mengenai kode sumber demo mengukur waktu tayang untuk banyak form
dapat disimak pada kode sumber FormLoadProfiler-InterposerClass.7z terlampir.
5. Teknik Pengukuran Pada Banyak Form Dengan Class Helper
Selain menggunakan interposer class untuk melakukan pengukuran pada banyak form,
teknik lain yang dapat digunakan adalah class helper.
Berikut cuplikan pengertian class helper menurut dokumentasi Delphi:
A class helper is a type that - when associated with another class -
introduces additional method names and properties which may be used in
the context of the associated class (or its descendants). Class helpers
are a way to extend a class without using inheritance. A class helper
simply introduces a wider scope for the compiler to use when resolving
identifiers. When you declare a class helper, you state the helper
name, and the name of the class you are going to extend with the
helper. You can use the class helper any place where you can legally
use the extended class. The compiler's resolution scope then becomes
the original class, plus the class helper.
Class helpers provide a way to extend a class, but they should not be
viewed as a design tool to be used when developing new code. They
should be used solely for their intended purpose, which is language and
platform RTL binding.
Perbedaan mendasar antara interposer class dan class helper adalah bahwa interposer
class dilakukan dengan cara menurunkan kelas yang akan dikembangkan, sedangkan class
helper tanpa perlu menurunkannya.
Membuat Class Helper
Lalu bagaimana membuat class helper? Pertama, deklarasikan helper untuk kelas TForm.
TGlobalFormHelper = class helper for TForm
end;
Kemudian untuk mendeklarasikan variabel FStart dan FEnd, tidak bisa dilakukan
secara sembarangan mengingat class helper memberikan batasan tidak dapat menambah
instance data, namun dapat menambah class fields. Nah untuk itu harus memanfaatkan
class var, sehingga deklarasi variabelnya menjadi:
TGlobalFormHelper = class helper for TForm
class var
FStart, FEnd : Cardinal;
end;
langkah selanjutnya adalah mendeklarasikan konstruktor Create, namun kali ini
deklarasinya sedikit berbeda. Jika pada interposer class, kita harus menimpa (override)
konstruktor Create, maka pada class helper tidak perlu. Secara umum, isi dari
konstruktor adalah sebagai berikut:
TGlobalFormHelper = class helper for TForm
class var
FStart, FEnd : Cardinal;
public
constructor Create(AOwner: TComponent);
end;
//
// ....
//
constructor TGlobalFormHelper.Create(AOwner: TComponent);
begin
FStart := GetTickCount;
inherited;
end;
Sampai di sini kita sudah mulai menghitung pengukuran, langkah berikutnya tentu saja
adalah meletakkan rutin akhir pengukuran pada method Activate. Namun sayang sekali,
dalam class helper ini, kita tidak dapat mendeklarasikan dan atau menimpa (override)
method Activate karena sudah dideklarasikan.
Sebagai alternatif solusinya, kita akan membelokkan event OnActivate untuk
menjalankan rutin pengukuran. Untuk itu kita harus menyimpan event OnActivate yang
sebenarnya. Kemudian di dalam rutin pengukuran tersebut, jalankan event OnActivate
yang sebenarnya sebelum mengakhiri perhitungan. Selengkapnya menjadi:
TGlobalFormHelper = class helper for TForm
class var
FStart, FEnd : Cardinal;
FOnActivateTemporary : TNotifyEvent;
public
constructor Create(AOwner: TComponent);
procedure CalculateLoadTime(Sender: TObject);
end;
//
// ....
//
procedure TGlobalFormHelper.CalculateLoadTime(Sender: TObject);
begin
if Assigned(FOnActivateTemporary) then FOnActivateTemporary(Sender);
FEnd := GetTickCount;
end;
constructor TGlobalFormHelper.Create(AOwner: TComponent);
begin
FStart := GetTickCount;
inherited;
FOnActivateTemporary := Self.OnActivate;
Self.OnActivate := CalculateLoadTime;
end;
Sampai disini class helper sudah selesai, sekarang bagaimana dengan kelas utama nya?
Cukup dengan menambahkan konstruktor Create dan tambahkan directive override.
Di dalam konstruktor tersebut, tambahkan kode inherited untuk memanggil konstruktor
Create yang sebenarnya, yaitu yang dideklarasikan pada class helper.
TMainForm = class(TForm)
//
// ...
//
public
{ Public declarations }
constructor Create(AOwner: TComponent); override;
end;
//
// ...
//
constructor TMainForm.Create(AOwner: TComponent);
begin
inherited;
end;
Menggunakan Class Helper
Langkah selanjutnya adalah bagaimana memanfaatkan class helper tersebut pada form.
Untuk form utama, tidak ada masalah, tidak ada tambahan apapun karena class helper
dideklarasikan dalam unit yang sama.
{-----------------------------------------------------------------------------
The contents of this file are subject to the Mozilla Public License
Version 1.1 (the "License"); you may not use this file except in compliance
with the License. You may obtain a copy of the License at
http://www.mozilla.org/MPL/MPL-1.1.html
Software distributed under the License is distributed on an "AS IS" basis,
WITHOUT WARRANTY OF ANY KIND, either expressed or implied. See the License for
the specific language governing rights and limitations under the License.
The Original Code is: MultipleMainFormUnit.pas, released on 2008-09-25
The Initial Developer of the Original Code is Bayu Prasetio
Portions created by Bayu Prasetio are Copyright (C) 2008 Bayu Prasetio.
All Rights Reserved.
-----------------------------------------------------------------------------}
unit MultipleMainFormUnit;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls;
type
TMainForm = class(TForm)
btnShowResult: TButton;
mmoLegend: TMemo;
stbMain: TStatusBar;
btnLoadSecondary: TButton;
lblLoadTime: TLabel;
btnLoadAnotherForm: TButton;
procedure btnShowResultClick(Sender: TObject);
procedure btnLoadSecondaryClick(Sender: TObject);
procedure btnLoadAnotherFormClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
constructor Create(AOwner: TComponent); override;
end;
TGlobalFormHelper = class helper for TForm
class var
FStart, FEnd : Cardinal;
FOnActivateTemporary : TNotifyEvent;
public
constructor Create(AOwner: TComponent);
procedure CalculateLoadTime(Sender: TObject);
end;
var
MainForm: TMainForm;
implementation
{$R *.dfm}
uses
MultipleSecondaryFormUnit, MultipleAnotherFormUnit;
procedure TMainForm.btnLoadAnotherFormClick(Sender: TObject);
begin
AnotherForm := TAnotherForm.Create(nil);
AnotherForm.ShowModal;
AnotherForm.Free;
end;
procedure TMainForm.btnLoadSecondaryClick(Sender: TObject);
begin
SecondaryForm := TSecondaryForm.Create(nil);
SecondaryForm.ShowModal;
SecondaryForm.Free;
end;
procedure TMainForm.btnShowResultClick(Sender: TObject);
begin
lblLoadTime.Caption := ' Form Load Time: ' + IntToStr(FEnd - FStart) + ' ms';
btnShowResult.Enabled := False;
end;
constructor TMainForm.Create(AOwner: TComponent);
begin
inherited;
end;
procedure TGlobalFormHelper.CalculateLoadTime(Sender: TObject);
begin
if Assigned(FOnActivateTemporary) then FOnActivateTemporary(Sender);
FEnd := GetTickCount;
end;
constructor TGlobalFormHelper.Create(AOwner: TComponent);
begin
FStart := GetTickCount;
inherited;
FOnActivateTemporary := Self.OnActivate;
Self.OnActivate := CalculateLoadTime;
end;
end.
Kemudian untuk form yang lainya, deklarasi mirip dengan menggunakan interposer class,
yaitu cukup dengan menambahkan pada klausul uses dengan nama unit dimana class
helper dideklarasikan, seperti contoh kode berikut:
{-----------------------------------------------------------------------------
The contents of this file are subject to the Mozilla Public License
Version 1.1 (the "License"); you may not use this file except in compliance
with the License. You may obtain a copy of the License at
http://www.mozilla.org/MPL/MPL-1.1.html
Software distributed under the License is distributed on an "AS IS" basis,
WITHOUT WARRANTY OF ANY KIND, either expressed or implied. See the License for
the specific language governing rights and limitations under the License.
The Original Code is: MultipleAnotherFormUnit.pas, released on 2008-09-25
The Initial Developer of the Original Code is Bayu Prasetio
Portions created by Bayu Prasetio are Copyright (C) 2008 Bayu Prasetio.
All Rights Reserved.
-----------------------------------------------------------------------------}
unit MultipleAnotherFormUnit;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TAnotherForm = class(TForm)
btnShowResult: TButton;
procedure btnShowResultClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
AnotherForm: TAnotherForm;
implementation
{$R *.dfm}
uses
MultipleMainFormUnit;
procedure TAnotherForm.btnShowResultClick(Sender: TObject);
begin
ShowMessage('Load Time : ' + IntToStr(FEnd - FStart));
end;
procedure TAnotherForm.FormCreate(Sender: TObject);
begin
Sleep(200);
end;
end.
Selengkapnya mengenai kode sumber demo mengukur waktu tayang untuk banyak form
dengan menggunakan class helper dapat disimak pada kode sumber FormLoadProfiler-
ClassHelper.7z terlampir.
6. Meningkatkan Presisi Perhitungan Waktu
Dari beberapa variasi teknik pengukuran yang telah dibahas, semuanya menggunakan
metode pengukuran waktu yang sama, yaitu menggunakan fungsi GetTickCount.
Fungsi GetTickCount memiliki ketelitian hingga hitungan mili-detik (ms). Untuk
kebutuhan secara umum, GetTickCount sudah mencukupi, namun adakalanya
pengukuran yang dilakukan membutuhkan ketelitian yang lebih, misalnya dalam nano-detik. Disinilah GetTickCount tidak bisa memenuhinya.
QueryPerformanceCounter dan QueryPerformanceFrequency
Windows menyediakan 2 (dua) API yang berkaitan dengan pengukuran dengan ketelitian
tinggi, yaitu QueryPerformanceCounter dan QueryPerformanceFrequency.
Kedua fungsi ini digunakan saling melengkapi.
Berikut definisi API QueryPerformanceCounter yang diambil dari dokumentasi Delphi:
BOOL QueryPerformanceCounter(
LARGE_INTEGER *lpPerformanceCount // address of current counter
value
);
Parameters
lpPerformanceCount
Points to a variable that the function sets, in counts, to the current
performance-counter value. If the installed hardware does not support a
high-resolution performance counter, this parameter can be to zero.
Return Values
If the installed hardware supports a high-resolution performance
counter, the return value is nonzero.
If the installed hardware does not support a high-resolution
performance counter, the return value is zero.
Berikut definisi API QueryPerformanceFrequency yang diambil dari dokumentasi Delphi:
BOOL QueryPerformanceFrequency(
LARGE_INTEGER *lpFrequency // address of current frequency
);
Parameters
lpFrequency
Points to a variable that the function sets, in counts per second, to
the current performance-counter frequency. If the installed hardware
does not support a high-resolution performance counter, this parameter
can be to zero.
Return Values
If the installed hardware supports a high-resolution performance
counter, the return value is nonzero.
If the installed hardware does not support a high-resolution
performance counter, the return value is zero.
Dari kutipan diatas, sudah jelas bahwa QueryPerformanceCounter digunakan untuk
menampung nilai pencacah / penghitung pada saat API tersebut dipanggil, sedangkan
QueryPerformanceFrequency digunakan untuk mendapatkan besaran frekuensi dari
pencacah tersebut, berapa nilai cacah yang dihasilkan dalam 1 (satu) detik.
Sehingga untuk mendapatkan nilai pengukuran adalah dengan menghitung nilai cacah
setelah pengukuran dikurangi dengan nilai cacah sebelum pengukuran. Nilai tersebut
kemudian dibagi dengan frekuensi. Nilai ukur yang didapat adalah dalam satuan detik,
untuk mengkonversi dalam satuan lain tinggal disesuaikan. Misalnya untuk dihitung dalam
satuan mili-detik maka nilai tersebut dikalikan dengan 1000.
FElapsedTime := (FEnd - FStart) / FFrequency * 1000;
Integrasi ke Kode
Sekarang saatnya melakukan konversi dari penggunaan API GetTickCount ke
QueryPerformanceCounter dan QueryPerformanceFrequency. Disini dasar
kode sumber yang akan digunakan adalah teknik interposer class. Untuk penggunakan
teknik class helper silahkan disesuaikan sendiri sebagai latihan.
Pertama, deklarasi variabel FStart dan FEnd harus diubah tipe datanya dari Cardinal
menjadi Int64. Mengapa Int64? Karena nilai yang ditampung adalah sangat besar
mengingat ketelitian presisi yang dihasilkan sangat tinggi, sehingga dibutuhkan tipe data
yang lebih besar dari Cardinal (0..4294967295), yaitu Int64 atau LargeInt (-
263..263-1). Kemudian tambahkan variabel untuk menyimpan nilai frekuensi dari pencacah
tersebut, yaitu FFrequency, dengan tipe data In64. Selanjutnya tambahkan variabel
untuk menampung nilai hasil pengukuran, yaitu FElapsedTime, dengan tipe data
Double.
protected
FStart, FEnd : Int64;
FFrequency : Int64;
FElapsedTime : Double;
Perubahan kedua adalah pada konstruktor Create. Disini perlu dilakukan pemanggilan
fungsi QueryPerformanceFrequency untuk mengetahui frekuensi nilai pencacah.
constructor TForm.Create(AOwner: TComponent);
begin
QueryPerformanceFrequency(FFrequency);
QueryPerformanceCounter(FStart);
inherited;
end;
Ketiga, modifikasi method Activate, dan menambahkan perhitungan waktu ukur dalam
1 (satu) mili-detik.
procedure TForm.Activate;
begin
inherited;
QueryPerformanceCounter(FEnd);
FElapsedTime := (FEnd - FStart) / FFrequency * 1000;
end;
Modifikasi keempat adalah modifikasi pada unit - unit lain yang menggunakan unit
MultipleInterposerClassHP.pas. Bagian yang diubah adalah cara penyampaian
pesan informasi besarnya waktu tayang.
Jika sebelumnya menggunakan fungsi IntToStr karena waktu ukur berbasis pada tipe data Cardinal, maka sekarang menjadi FloatToStr karena waktu ukur, yaitu variabel
FElapsedTime bertipe data Double. Sebagai contoh unit yang dimodifikasi adalah unit
MultipleMainFormUnit.pas.
procedure TMainForm.btnShowResultClick(Sender: TObject);
begin
lblLoadTime.Caption := ' Form Load Time: ' + FloatToStr(FElapsedTime) + ' ms';
btnShowResult.Enabled := False;
end;
Sehingga rangkaian kode MultipleInterposerClassHP.pas menjadi sebagai
berikut:
{-----------------------------------------------------------------------------
The contents of this file are subject to the Mozilla Public License
Version 1.1 (the "License"); you may not use this file except in compliance
with the License. You may obtain a copy of the License at
http://www.mozilla.org/MPL/MPL-1.1.html
Software distributed under the License is distributed on an "AS IS" basis,
WITHOUT WARRANTY OF ANY KIND, either expressed or implied. See the License for
the specific language governing rights and limitations under the License.
The Original Code is: MultipleInterposerClassHP.pas, released on 2008-09-30
The Initial Developer of the Original Code is Bayu Prasetio
Portions created by Bayu Prasetio are Copyright (C) 2008 Bayu Prasetio.
All Rights Reserved.
-----------------------------------------------------------------------------}
unit MultipleInterposerClassHP;
interface
uses
Classes, Forms;
type
TForm = class(Forms.TForm)
protected
FStart, FEnd : Int64;
FFrequency : Int64;
FElapsedTime : Double;
public
{ Public declarations }
constructor Create(AOwner: TComponent); override;
procedure Activate; override;
end;
implementation
{ TForm }
uses
Windows;
procedure TForm.Activate;
begin
inherited;
QueryPerformanceCounter(FEnd);
FElapsedTime := (FEnd - FStart) / FFrequency * 1000;
end;
constructor TForm.Create(AOwner: TComponent);
begin
QueryPerformanceFrequency(FFrequency);
QueryPerformanceCounter(FStart);
inherited;
end;
end.
Dan sebagai contoh MultipleMainFormUnit.pas menjadi:
{-----------------------------------------------------------------------------
The contents of this file are subject to the Mozilla Public License
Version 1.1 (the "License"); you may not use this file except in compliance
with the License. You may obtain a copy of the License at
http://www.mozilla.org/MPL/MPL-1.1.html
Software distributed under the License is distributed on an "AS IS" basis,
WITHOUT WARRANTY OF ANY KIND, either expressed or implied. See the License for
the specific language governing rights and limitations under the License.
The Original Code is: MultipleMainFormUnit.pas, released on 2008-09-30
The Initial Developer of the Original Code is Bayu Prasetio
Portions created by Bayu Prasetio are Copyright (C) 2008 Bayu Prasetio.
All Rights Reserved.
-----------------------------------------------------------------------------}
unit MultipleMainFormUnit;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls, MultipleInterposerClassHP;
type
TMainForm = class(TForm)
btnShowResult: TButton;
mmoLegend: TMemo;
stbMain: TStatusBar;
btnLoadSecondary: TButton;
lblLoadTime: TLabel;
btnLoadAnotherForm: TButton;
procedure btnShowResultClick(Sender: TObject);
procedure btnLoadSecondaryClick(Sender: TObject);
procedure btnLoadAnotherFormClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
MainForm: TMainForm;
implementation
{$R *.dfm}
{ TSingleForm }
uses
MultipleSecondaryFormUnit, MultipleAnotherFormUnit;
procedure TMainForm.btnLoadAnotherFormClick(Sender: TObject);
begin
AnotherForm := TAnotherForm.Create(nil);
AnotherForm.ShowModal;
AnotherForm.Free;
end;
procedure TMainForm.btnLoadSecondaryClick(Sender: TObject);
begin
SecondaryForm := TSecondaryForm.Create(nil);
SecondaryForm.ShowModal;
SecondaryForm.Free;
end;
procedure TMainForm.btnShowResultClick(Sender: TObject);
begin
lblLoadTime.Caption := ' Form Load Time: ' + FloatToStr(FElapsedTime) + ' ms';
btnShowResult.Enabled := False;
end;
end.
Selengkapnya mengenai kode sumber demo mengukur waktu tayang dengan presisi tinggi
dapat disimak pada kode sumber FormLoadProfiler-HighPrecision-InterposerClass.7z
terlampir.
Penutup
Pada artikel ini telah dibahas bagaimana melakukan pengukuran sederhana waktu tayang suatu
form dari pembuatan hingga siap digunakan oleh pengguna. Berbagai implementasi teknik
pengukuran juga telah dipaparkan, mulai dari implementasi pada form tunggal hingga banyak
form, baik dengan metode interposer class maupun class helper. Kemudian juga telah
dipaparkan penggunaan teknik penghitung waktu yang lebih akurat dengan presisi tinggi dengan
menggunakan fungsi QueryPerformaceFrequency dan QueryPerformanceCounter.
Apa yang telah dipaparkan dalam artikel ini hanyalah sebagai pintu gerbang bagi Anda untuk
melakukan eksplorasi lebih mendalam dan mengembangkannya jauh lebih baik. Silahkan
gunakan logika, kreativitas dan imajinasi Anda. Tetap Semangat !
Referensi
1. Form Load Profiler: Single Form, Bayu Prasetio, http://blog.bprasetio.or.id/2008/09/01/
form-load-profiler-single-form/
2. Form Load Profiler: Multiple Form, Bayu Prasetio,
http://blog.bprasetio.or.id/2008/09/15/form-load-profiler-multiple-form/
3. Handbook Note 67/113: Interposer Classes, Marco Cantu,
http://blog.marcocantu.com/blog/handbook_note_67.html
4. Delphi Help, CodeGear
5. Form Load Profiler: Multiple Form: Class Helper, Bayu Prasetio,
http://blog.bprasetio.or.id/2008/09/26/form-load-profiler-multi-form-class-helper/
6. Form Load Profiler: High Precission Timer, Bayu Prasetio,
http://blog.bprasetio.or.id/2008/10/06/form-load-profiler-high-precision-timer/

Rabu, 04 Maret 2015

Contoh Program Delphi Sederhana

Sama halnya seperti Netbeans, Delphi adalah sebuah IDE Compiler yang menggunakan bahasa pemrograman pascal untuk pengembangan sebuah aplikasi. Artinya disini kita bisa membuat aplikasi dari sebuah IDE ini. Contoh program kali ini yakni mengenai penghitungan harga kamar hotel. Berikut tampilan programnya
Disini saya tidak akan menampilkan source code nya disini, tapi sobat bisa download file delphinya di " Download Program Delphi Sederhana " Berikut alur programnya : 1. Sobat klik button 'Mulai' terlebih dahulu untuk memulai aplikasi ini. 2. Sobat hanya mengisi Lama Menginap dan Harga saja, kemudian klik button Hitung maka semua text sudah terisi. 3. Text Jumlah dihitung dari Lama Menginap * Harga kamar 4. Keterangan diskon dan diskon diambil apabila Jumlah melebihi 1000000. 5. Terakhir, Total Bayar diambil dari Jumlah - Diskon

Fungsi - Fungsi pada MySQL


1.1 Mengaktifkan Direktori MySQL Server

Untuk dapat menggunakan MySQL terlebih dahulu aktifkan Server MySQL dengan
menghidupkan daemond MySQL. Program MySQL yang digunakan pada modul ini adalah XAMPP1.7, maka untuk menjalankan daemond MySQL terdapat pada direktori yaitu C:\Program
Files\Xampp\Mysql\Bin
Untuk masuk kedalam server MySQL, bukalah MS-DOS Prompt anda melalui Run kemudian
ketik Command atau cmd. Maka anda dapat masuk ke dalam direktori MySQL melalui MS-DOSPromtp

1.2 Masuk Keluar Server MySQL

MySQL adalah sebuah database server yang sangat aman. MySQL memiliki kemampuan
memanajemen user dalam mengakses. Jadi, tidak sembarang user dapat mengakses sebuah database
yang diciptakan MySQL. Maka sebelum anda memiliki User untuk mengakses MySQL anda juga dapat, Mengakses database MySQL menggunakan User Root.
Berikut adalah perintah yang digunakan untuk mengkoneksikan kedalam Server Mysql :
Shell > MySQL –u Root –p
Enter Password: *********
Keterangan : Tanda –u menerangkan bahwa kita akan masuk menggunakan User Name bernama
Root.
Tanda –p menyatakan kita akan masuk menggunakan Password.

Berikut adalah perintah yang digunakan untuk mengkoneksikan kedalam Server Mysql melalui Root :
Shell> Mysql –u root

Untuk dapat keluar dari Server MysQL kita dapat mengetikkan Intruksi quit ata \q :

Mysql> quit
Bye
Mysql> \q
Bye


1.3 Bantuan Dalam MySQL

Database MySQL menyediakan beberapa fasilitas bantuan yang berguna untuk
mendokumentasikan atau memanipulasikan server yaitu dengan cara mengetikan intruksi \h atau \?.

Mysql> \?

Semua Query harus diakhiri dengan tanda titik koma ( ; ). Tanda ini menunjukkan bahwa query telah
berakhir dan siap dieksekusi.

Help ( \h )      : Digunakan untuk menampilkan file bantuan pada MySQL
? ( \? )           : Perintah ini sama dengan perintah Help
Clear ( \c )     : Berguna untuk membersihkan atau menggagalkan semua perintah yang telah
                      berjalan dalam suatu prompt
Connect ( \r ) : untuk melakukan penyegaran koneksi ke dalam database yang ada pada
                      Server Host
Ego ( \G )      : berguna untuk menampilkan data secara horizontal.
Go ( \g )         : member perintah server untuk mengeksekusi
tee ( \T )        : mengatur tempat file yang akan didokumentasikan. 

Contoh :

mysql> \T d:\belajar mysql.doc

Logging to file ‘d:\data.doc;’

Note ( \t )       : akhir dari ( \T ) yang berguna untuk mendokumentasikan semua query.
Print ( \p )      : mencetak semua query yang telah kita perintahkan kelayar.
Prompt ( \R )  : Mengubah prompt standar sesuai keinginan.
Source ( \. )    : berguna untuk mengeksekusi query dari luar yang berbentuk defg
Use ( \u )       : berguna untuk memasuki database yang akan digunakan maupun mengganti
                       database yang akan di gunakan.



Selasa, 03 Maret 2015

Mengenal MySQL

1.1 Mengenal MySQL


MySQL adalah Sebuah program database server yang mampu menerima dan mengirimkan
datanya sangat cepat, multi user serta menggunakan peintah dasar SQL ( Structured Query Language).

MySQL merupakan dua bentuk lisensi, yaitu FreeSoftware dan Shareware. MySQL yang biasa kita
gunakan adalah MySQL FreeSoftware yang berada dibawah Lisensi GNU/GPL ( General Public License ).

MySQL Merupakan sebuah database server yang free, artinya kita bebas menggunakan database
ini untuk keperluan pribadi atau usaha tanpa harus membeli atau membayar lisensinya. MySQL
pertama kali dirintis oleh seorang programmer database bernama Michael Widenius . Selain database server, MySQl juga merupakan program yang dapat mengakses suatu database MySQL yang berposisi sebagai Server, yang berarti program kita berposisi sebagai Client. Jadi MySQL adalah sebuah database yang dapat digunakan sebagai Client maupun server.

Database MySQL merupakan suatu perangkat lunak database yang berbentuk database relasional
atau disebut Relational Database Management System ( RDBMS ) yang menggunakan suatu bahasa
permintaan yang bernama SQL (Structured Query Language ).

1.2 Kelebihan MySQL

Database MySQL memiliki beberapa kelebihan dibanding database lain, diantaranya :

• MySQL merupakan Database Management System ( DBMS )
• MySQL sebagai Relation Database Management System ( RDBMS ) atau disebut dengan
  database Relational
• MySQL Merupakan sebuah database server yang free, artinya kita bebas menggunakan
  database ini untuk keperluan pribadi atau usaha tanpa harus membeli atau membayar
  lisensinya
• MySQL merupakan sebuah database client
• MySQL mampu menerima query yang bertupuk dalam satu permintaan atau Multi-
  Threading.
• MySQL merupakan Database yang mampu menyimpan data berkapasitas sangat besar
   hingga berukuran GigaByte sekalipun.
• MySQL diidukung oleh driver ODBC, artinya database MySQL dapat diakses menggunakan
  aplikasi apa saja termasuk berupa visual seperti visual Basic dan Delphi.
• MySQL adalah database menggunakan enkripsi password, jadi database ini cukup aman
  karena memiliki password untuk mengakses nya.
• MySQL merupakan Database Server yang multi user, artinya database ini tidak hanya
  digunakan oleh satu pihak orang akan tetapi dapat digunakan oleh banyak pengguna.
• MySQL mendukung field yang dijadikan sebagai kunci primer dan kunci uniq ( Unique ).
• MySQL memliki kecepatan dalam pembuatan table maupun peng-update an table.

1.3  Mengenal SQL(Structured Query Language)

SQL ( Structured Query Language ) adalah sebuah bahasa permintaan database yang terstruktur.
Bahasa SQL ini dibuat sebagai bahasa yang dapat merelasikan beberapa tabel dalam database maupun merelasikan antar database.

SQL dibagi menjadi tiga bentuk Query, yaitu :

1.3.1 DDL ( Data Definition Language )

DDL adalah sebuah metode Query SQL yang berguna untuk mendefinisikan data pada
sebuah Database, Query yang dimiliki DDL adalah :

• CREATE   Digunakan untuk membuat Database dan Tabel
• Drop         Digunakan untuk menghapus Tabel dan Database
• Alter         Digunakan untuk melakukan perubahan struktur tabel yang telah
                   dibuat, baik menambah Field ( Add ), mengganti nama Field
                   ( Change ) ataupun menamakannya kembali ( Rename ),
                   dan menghapus Field ( Drop ).

1.3.2 DML ( Data Manipulation Language )DML adalah sebuah metode Query yang dapat digunakan apabila DDL telah terjadi,
sehingga fungsi dari Query DML ini untuk melakukan pemanipulasian database yang telah
dibuat. Query yang dimiliki DML adalah :

• INSERT       Digunakan untuk memasukkan data pada Tabel Database
• UPDATE      Digunakan untuk pengubahan terhadap data yang ada pada Tabel Database
• DELETE      Digunakan untuk Penhapusan data pada tabel Database

1.3.3 DCL ( Data Control Language )

DCL adalah sebuah metode Query SQL yang digunakan untuk memberikan hak
otorisasi mengakses Database, mengalokasikan space, pendefinisian space, dan pengauditan
penggunaan database. Query yang dimiliki DCL adalah :
• GRANT          Untuk mengizinkan User mengakses Tabel dalam Database.
• REVOKE       Untuk membatalkan izin hak user, yang ditetapkan oleh perintah GRANT
• COMMIT        Mentapkan penyimpanan Database
• ROLLBACK    Membatalkan penyimpanan Database


Pengertian Database & Macam - Macam Database

Pengertian DataBase 

Database adalah susunan record data operasional lengkap dari suatu organisasi atau perusahaan, yang diorganisir dan disimpan secara terintegrasi dengan menggunakan metode tertentu sehingga mampu memenuhi informasi yang optimal yang dibutuhkan olehpara pengguna.
Database server adalah sebuah program komputer yang menyediakan layanan database untuk program komputer lain atau komputer, seperti yang didefinisikan oleh model client-server. Istilah ini juga dapat merujuk ke komputer yang didedikasikan untuk menjalankan program seperti itu.

Jenis-jenis software program Database Server:

MySQL

MySQL merupakan sebuah perangkat lunak system manajemen basis data SQL (bahasa inggris : data management system) atau DNMS yang multithread, multi-user, dengan sekitar 6 juta instalasi di seluruh dunia. MySQL AB membuat MySQL tersedia sebagai perangkat lunak gratis di bawah lisensi GNU General Public Licenci (GPL), tetapi mereka juga menjual dibawah lisensi komersial untuk kasus-kasus dimana penggunaannya tidak cocok dengan penggunaan GPL . Tidak seperti Apache yang merupakan software yang dikembangkan oleh komunitas umum, dan cipta untuk code sumber dimiliki oleh penulisnya masing-masing, MySQL dimiliki dan disponsori oleh sebuah perusahaan komersial Swedia yaitu MySQL AB. MySQL AB memegang penuh hak cipta hampir atas semua kode sumbernya. Kedua orang Swedia dan satu orang Finlandia yang mendirikan MySQL AB adalah : david axmark, allan larsson, dan Michael “monthy widenius.

Kelebihan MySQL antara lain :
1. Portabilitas. MySQL dapat berjalan stabil pada berbagai sistem operasi seperti Windows, Linux, FreeBSD, Mac Os X Server, Solaris, Amiga, dan masih banyak lagi.
2. Free (bebas didownload) MySQL didistribusikan secara open source, dibawah lisensi GPL sehingga dapat digunakan secara cuma-cuma.
3. stabil dan tangguh, fleksibel dengan berbagai pemrograman 
4. Security yang baik & mendukung transaksi
5. dukungan dari banyak komunitas & perkembangan software yang cukup cepat
6. kemudahan management database 

ORACLE

Pengertian Oracle
Oracle adalah relational database management system (RDBMS) untuk mengelola informasi secara terbuka, komprehensif dan terintegrasi. Oracle Server menyediakan solusi yang efisien dan efektif karena kemampuannya dalam hal sebagai berikut:
·         Dapat bekerja di lingkungan client/server (pemrosesan tersebar)
  • Menangani manajemen space dan basis data yang besar
  • Mendukung akses data secara simultan
  • Performansi pemrosesan transaksi yang tinggi
  • Menjamin ketersediaan yang terkontrol
  • Lingkungan yang terreplikasi
Database merupakan salah satu komponen dalam teknologi informasi yang mutlak diperlukan oleh semua organisasi yang ingin mempunyai suatu sistem informasi yang terpadu untuk menunjang kegiatan organisasi demi mencapai tujuannya. Karena pentingnya peran database dalam sistem informasi, tidaklah mengherankan bahwa terdapat banyak pilihan software Database Management System (DBMS) dari berbagai vendor baik yang gratis maupun yang komersial. Beberapa contoh DBMS yang populer adalah MySQL, MS SQL Server, Oracle, IBM DB/2, dan PostgreSQL.

Kelebihan Dan Kekurangan Oracle
Fleksibilitas adalah kemampuan untuk menyesuaikan diri dengan berbagai kebutuhan dan kondisi khusus yang dapat berubah-ubah. Sebagai contoh, organisasi yang besar membutuhkan server yang terdistribusi dan memiliki redundancy sehingga pelayanan bisa diberikan secara cepat dan tidak terganggu jika ada server yang mati. Organisasi tersebut juga mempunyai berbagai macam aplikasi yang dibuat dengan beragam bahasa pemrograman dan berjalan di berbagai platform yang berbeda. Oracle memiliki banyak sekali fitur yang dapat memenuhi tuntutan fleksibilitas dari organisasi besar tersebut. Berbagai fitur tersebut membuat Oracle menjadi DBMS yang rumit dan sulit untuk dipelajari, namun itu adalah harga yang harus dibayar untuk mendapatkan fleksibilitas yang dibutuhkan dalam sistem informasi di organisasi yang berukuran besar.
Skalabilitas mengacu pada kemampuan untuk terus berkembang dengan penambahan sumber daya. Organisasi yang besar harus mampu melakukan transaksi data dalam volume yang besar dan akan terus bertambah besar. Jika dijalankan hanya pada satu server saja, MySQL memang bisa berjalan lebih cepat daripada Oracle. Namun jika satu server sudah tidak bisa lagi menangani beban yang terus bertambah besar, kinerja MySQL mengalami stagnasi karena keterbatasan server tersebut. Namun Oracle mendukung fitur Grid yang dapat mendayagunakan lebih dari satu server serta data storage dengan mudah dan transparan. Hanya dengan menambahkan server atau data storage ke dalam Oracle Grid, maka kinerja dan kapasitas Oracle dapat terus berkembang untuk mengikuti beban kerja yang terus meningkat.
Demikianlah salah satu (atau dua) keunggulan dari Oracle. Tidaklah mengherankan bahwa meskipun Oracle merupakan DBMS yang paling rumit dan paling mahal di dunia, perusahaan-perusahaan besar memilih Oracle dan tidak menggunakan DBMS seperti MySQL yang gratis karena mereka membutuhkan fleksibilitas dan skalabilitas dalam sistem informasi yang mereka gunakan

FIREBIRD


Sejarah Firebird
Firebird adalah salah satu aplikasi RDBMS (Relational Database Management System) yang bersifat open source. Awalnya adalah perusahaan Borland yang sekitar tahun 2000 mengeluarkan versi beta dari aplikasi database-nya InterBase 6.0 dengan sifat open source. Namun entah kenapa tiba-tiba Borland tidak lagi mengeluarkan versi InterBase secara open source, justru kembali ke pola komersial software. Tapi pada saat yang bersamaan programmer-progammer yang tertarik dengan source code InterBase 6.0 tersebut lalu membuat suatu team untuk mengembangkan source code database ini dan kemudian akhirnya diberinama Firebird.
Firebird (juga disebut FirebirdSQL) adalah sistem manajemen basisdata relasional yang menawarkan fitur-fitur yang terdapat dalam standar ANSI SQL-99 dan SQL-2003. RDBMS ini berjalan baik di Linux, Windows, maupun pada sejumlah platform Unix. Firebird ini diarahkan dan di-maintain oleh FirebirdSQL Foundation. Ia merupakan turunan dari Interbase versi open source milik Borland. Karena itulah Interbase dan Firebird sebenarnya mempunyai CORE yang sama karena awalnya sama” dikembangkan oleh Borland.
Kemampuan dan Kelebihan Firebird
Beberapa kemampuan dari open source DBMS ini antara lain:
Firebird support dengan transaksi layaknya pada database komersial lainnya. Sebuah transaksi bisa di-commit atau di-rollback dengan mudah. Bahkan Firebird support dengan savepoint pada suatu transaksi dan kita bisa melakukan rollback kembali ke savepoint yang kita tentukan tadi (ini mirip seperti fasilitas pada Oracle).
-Firebird menggunakan sintaks standard untuk menciptakan suatu foreign key
-Firebird support row level locks, secara default Firebird menggunakan apa yang disebut dengan multi-version concurrency system. Ini artinya bahwa semua session pada database akan melihat data yang lama sampai data yang baru sudah di-commit ke dalam database. Sebagai alternative untuk locking juga bisa digunakan perintah select… for update with lock
-Firebird support stored procedure dan triggers dengan bahasa yang standard sehingga tidak akan membingungkan bagi Anda yang ingin belajar. Triggers pada Firebird mirip seperti yang dijumpai dalam Oracle yaitu menggunakan before atau after insert, update atau delete. Ini berbeda dengan sistem trigger pada Sybase atau MS SQL Server yang menggunakan tabel virtual inserted dan deleted.
-Firebird bisa melakukan replikasi, solusi untuk replikasi kebanyakan dibuat oleh pihak ketiga, tetapi sebenarnya teknik replikasi ini seperti konsep trigger yang selalu memonitor adanya operasi insert, update atau delete ke dalam database.
-Firebird support dengan multiple data file, ya, Firebird bisa menggunakan lebih dari satu file sebagai single logic database. Ini sangat berguna bagi para DBA (Database Administrator) untuk mengadministrasi database.
-Software untuk mengadministrasi mudah didapat karena banyak sekali software untuk mengadministrasi database Firebird, misalnya saja EMS IB Manager, IBConsole, isql, FBManager, Marathon dan banyak lagi yang lainnya. Aplikasi tersebut ada yang komersial atau bahkan ada yang open source.
-Library connection untuk Firebird yang sudah tersedia ada banyak, ada driver untuk ODBC, JDBC bahkan .NET database provider. Bahkan dari PHP juga sudah disediakan library untuk koneksi ke database Firebird ini.
-Banyaknya fasilitas support dan maintenance karena banyaknya komunitas Firebird. Di Indonesia sendiri komunitas yang sering menggunakan Firebird biasanya adalah programmer Delphi. 

MICROSOFT SQL SERVER 2000



Microsoft SQL Server 2000 adalah perangkat lunak relational database management system (RDBMS) yang didesain untuk melakukan proses manipulasi database berukuran besar dengan berbagai fasilitas. Microsoft SQL Server 2000 merupakan produk andalan Microsoft untuk database server. Kemampuannya dalam manajemen data dan kemudahan dalam pengoperasiannya membuat RDBMS ini menjadi pilihan para database administrator.
DBMS merupakan suatu system perangkat lunak untuk memungkinkan user (pengguna) untuk membuat, memelihara, mengontrol, dan mengakses database secara praktis dan efisien. Dengan DBMS, user akan lebih mudah mengontrol dan mamanipulasi data yang ada. Sedangkan RDBMS atau Relationship Database Management System merupakan salah satu jenis DBMS yang mendukung adanya relationship atau hubungan antar table. RDBMS (Relational Database Management System) adalah perangkat lunak untuk membuat dan mengelola database, sering juga disebut sebagai database engine. Istilah RDBMS, database server-software, dan database engine mengacu ke hal yang sama; sedangkan RDBMS bukanlah database. Beberapa contoh dari RDBMS diantaranya Oracle, Ms SQL Server, MySQL, DB2, Ms Access.

VISUAL FOXPRO 6.0

Pada tahun 1984, Fox Software memperkenalkan FoxBase untuk menyaingi dBase II Ashton-Tate. Pada saat itu FoxBase hanyalah perangkat lunak kecil yang berisi bahasa pemrograman dan mesin pengolah data. FoxPro memperkenalkan GUI (Graphical Unit  Interface) pada tahun  1989.  FoxPro  berkembang menjadi Visul FoxPro pada tahun 1995. kemampuan pemrogrman prosural tetap dipertahankan dan dilengkapi dengan pemrograman berorietasi objek. Visual FoxPro  6.0 dilengkapi dengan kemampuan untuk berinteraksi dengan  produk desktop dan client/server lain dan juga dapat membangun aplikasi yang berbasis Web. Dengan adanya Visual Studio,  FoxPro  menjadi  anggotanya.  Sasaran  utama  Visual  Studio  adalah menyediakan alat bantu pemrogrman dan database untuk mengembangka perangkat lunak yang memenuhi tuntutan zaman.
Model data yang digunakan Visual FoxPro yaitu model relasional. Model Relasional merupakan model yang paling sederhana sehingga mudah di pahami oleh pengguna,  serta  merupakan  paling  popular  saat  ini.  Model  ini  menggunakan sekumpulan table berdimensi dua (yang disebut relasi atau table), dengan masing-masing relasi tersusun atas tupel atau   baris dan atribut. Relasi dirancang sedemikian rupa sehingga dapat menghilangkan kemubajiran data dan mengunakan kunci tamu untuk berhubungan dengan relasi lain.

DATABASE DEKSTOP PARADOX


Database desktop merupakan suatu program “Add-Ins”, yaitu program terpisah yang langsung terdapat pada Borland Delphi. Pada database desktop terdapat beberapa DBMS yang terintegrasi di dalamnya antara lain Paradox 7, Paradox 4, Visual dBase, Foxpro, Ms. SQL, Oracle, Ms. Acces, db2 dan interbase. Dari beberapa DBMS tersebut kita akan memilih salah satu yaitu Paradox yang akan dibahas lebih lanjut, khususnya Paradox 7. Dalam Paradox 7 ini, pada 1 file database hanya mengizinkan 1 tabel, berbeda dengan DBMS lain yang mengizinkan beberapa tabel pada 1 file database seperti pada Ms. Acces.

POSTGRE SQL
Postgre SQL merupakan tool untuk membuat database server yang bersifat open source yang memiliki licensi GPL (General Public License). Postgre SQL mendukung bahasa pemrograman seperti : SQL, C, C++, Java, PHP dan lainnya. Dengan lisensi GPL, PostgreSQL dapat digunakan, dimodifikasi dan didistribusikan oleh setiap orang tanpa perlu membayar lisensi (free of charge) baik untuk keperluan pribadi, pendidikan maupun komersil. Kebanyakan PostgreSQL tersedia untuk pengguna Linux.

MICROSOFT ACCESS



      Microsoft Access (atau Microsoft Office Access) adalah sebuah program aplikasi basis data komputer relasional yang ditujukan untuk kalangan rumahan dan perusahaan kecil hingga menengah. Aplikasi ini merupakan anggota dari beberapa aplikasi Microsoft Office, selain tentunya Microsoft Word, Microsoft Excel, dan Microsoft PowerPoint. Aplikasi ini menggunakan mesin basis data Microsoft Jet Database Engine, dan juga menggunakan tampilan grafis yang intuitif sehingga memudahkan pengguna. Versi terakhir adalah Microsoft Office Access 2007 yang termasuk ke dalam Microsoft Office System 2007.
Microsoft Access dapat menggunakan data yang disimpan di dalam format Microsoft Access, Microsoft Jet Database Engine, Microsoft SQL Server, Oracle Database, atau semua kontainer basis data yang mendukung standar ODBC. Para pengguna/programmer yang mahir dapat menggunakannya untuk mengembangkan perangkat lunak aplikasi yang kompleks, sementara para programmer yang kurang mahir dapat menggunakannya untuk mengembangkan perangkat lunak aplikasi yang sederhana. Access juga mendukung teknik-teknik pemrograman berorientasi objek, tetapi tidak dapat digolongkan ke dalam perangkat bantu pemrograman berorientasi objek.