ADO ADO atau ActiveX Data Object merupakan metode pengaksesan data yang di kembangkan oleh Microsoft. Jika anda mengenal Boeland Database Engine untuk mengakses tabel paradox dan dBASE, maka dapat digambarkan seperti itulah ADO. Menggunakan Ado anda dapat mengakses database MS Access dan MS SQL Server tanpa harus menggunakan Borland Database Engine lagi. Dengan menggunakan ADO, maka hubungan antara aplikasi dengan database(RDBMS) dapat digambarkan sebagai berikut : Aplikasi ADO
Provider
RDBMS Gambar 1 Hubungan aplikasi, ADO, provider dan RDBMS.
Objek ADO Aristektur ADO dibangun dari beberapa objek yang dapat digambarkan seperti berikut:
Connection
Errors
Command
Properties
Parameters
Properties
Recordset Fields
Properties
Properties
Pemrograman Delphi By Sorang Pakpahan,S.Kom
1
Gambar 2. Model Objet ADO ADO teridiri dari tujuh object yaitu : 1. Connection Digunakan untuk membuat hubungan dengan provider. 2. Command Digunakan untuk mendefinidikan command atau perintah yang akan dijalnakan. 3. Recordset Berisi regord (recordset) hasil eksekusi dari sebuah perintah query. Anda dapat membuka recordset tanpa harus membuka objek Connection secara eksplisit. Akan tetapi jika anda membuat sebuah objek Connection terlebih dahulu, anda dapat membuka multiple recordset pada satu koneksi yangs sama. Dengan hanya menggunakan satu koneksi maka akan lebih meringankan beban client dan server. 4. Field Mempersentasikan kolom pada record 5. Parameter Merupakan parameter dari query atau stored procedure. 6. Error Berisi informasi tentang error atau kegagalan yang terjadi saat terjadi satu operasi (eksekusi perintah) tertentu pada provuder. Oleh karena satu operasi dapat mengakibatkan lebih dari satu error, maka errors collection pun dapat berisi lebih dari satu objek error. 7. Property Merupakan salah satu karateristik khusus dari objek ADO yang didefinisikan oleh provider. Komponen ADO Delphi telah menyediakan tujuh komponen yang diletakkan pada page ADO dan dapat digunakan intuk berhubungan dengan databse MS acces atau MS SQL ketujuh komponen tersebut adalah : 1. TADOConnection 2. TRDSConnection 3. TADODataSEt 4. TADOCommand 5. TADOTable 6. TADOQuery 7. TADOStoredProcedure Pemrograman Delphi By Sorang Pakpahan,S.Kom
2
Komponen dataset ADO mirip dengan komponen dataset pada BDE sbagai contoh jika pada BDE Sebagai contoh jika pada BDE terdapat komponen TTable dan Tquery, maka pada ADO terdapat komponen TADOTable dan TADOQuery. Menggunakan komponen-komponen pada page ADO berarti apliaksi yang anda buat tidak lagi membutuhkan BDE sebagai database engine-nya dan Anda tidak perlu menginstal ADO pada komputer client anda jika komputer telah menggunakan Windows 98 atau Windows 2000. hal ini disebabkan ADO secara otomatis terinstal ketika anda menginstal windows 98 atau Windows 2000. pada Windows 95 dan Windows NT 4 anda perlu menginstal ADO secara manual, karena ADO tidak terinstal secara otomatis. Untuk mendapatkan ADO
versi
terbaru
anda
dapat
mengunjungi
situs
resmi
Microsoft
di
http:/www.microsoft.com/data/ado.
Komponen TADOConnection Merupakan komponen yang dapat digunakan untuk melakukan koneksi ke data store ADO. Pada komponen TADOConnection ini anda dapat mengatur berbagai hal seperti penguncian record dan mengatur tipe dan letak kursor, menggunakan TADOConnection ini anda juga dapat meng implementasikan transaksi, me-retrieve nama tabel dan stored procedure pada database. Beberapa property dan method penting pada komponen TADOConnection adalah : 1. Property ConnectionTimeout:integer; Digunakan untuk menentukan sampai berapa lama (dalam satuan detik) sebuah koneksi dinyatakan gagal. Secara default ConectionTimeOut adalah 15 detik. 2. Property CommandTimeout:nteger; Digunakan untuk menentukan sampai berapa lama sebuah eksekusi (dengan method Execute) command dikatakan gagal. Secara default CommandTimeOut adalah 30 detik. 3. Property LoginPrompt:Boolean; Digunakan untuk menentukan apakah kotak dialog login ditampilkan pada saat user akan membuka koneksi ke database. Jika anda tidak ingin menampilkan kotak dialog login, anda harus mengisikan username dan password pada property ConnectionString. 4. Property CursorLocation:TCursorLocation; Digunakan untuk menentukan letak kursor. Kursor adalah sebuah pointer atau penunjuk yang mengarah kepada data yang diambil dari suatu server database. Type TCursorLocation=(cluseServer,clUseClient); •
ClUseClient Kursor dibuat dan diletakkan pada komputer client. Jika suatu client meminta data ke server, maka server mengembalikan lagi ke client. Dengan konsep
Pemrograman Delphi By Sorang Pakpahan,S.Kom
3
demikian, client akan menampung semua data yang tentunya akan membuat sibuk lalu lintas jaringan. Pada jaringan yang kurang baik (lambat) hal ini akan menjadi masalah yang mengganggu. •
ClUseServer Kebalikan dari ClUseClient, ClUseServer adalah jika suatu client meminta data ke server, maka data tersebut tetap diletakkan pada server (berupa file temporary). Sehingga hal ini akan mengurangi kepadatan lalu lintas jaringan.
Akan tetapi konsekuensi dari ClUseServer ini adalah membengkaknya resource pada server. Untuk itu sangat disarankan menggunakan server dengan spesifikasi yang cukup bagus. 5. Procedure GetTableNames(List: TStrings; SystemTables:Boolean=False) Digunakan untuk me-retrive tabel pada suatu database. Parameter pertama (List) digunakan untuk menyimpan nama tabel yang di-retrive dari database. Sedangkan parameter SystemTables yang bertipe Boolean digunakan untuk menentukan apakah nama tabel system pada database akan dimasukkan pada List atau tidak. Kode berikut ini dapat digunakan untuk mengisi ListBox2 dengan nama tabel pasa suatu database. Tabel system tidak akan dimasukkan karena property systemTables diset False ADOConnection1.GetTableNames(ListBox2.items,False); 6. Procedure GetProcedureNames(List:TSrings); Digunakan untuk me-retrive nama stored procedure pada suatu database.
Komponen TADOTable Merupakan komponen yang dapat digunakan untuk mengakses data pada tabel tunggal dari suatu database. Untuk melakukan koneksi ke database anda dapat menggunkan property ConnectionString atau menggunakan komponen TADOConnection yang dispesifikasikan pada property Connection. Jika anda menggunakan beberapa komponen dataset ADO seperti TADOTable, TADOQuery, TADOStoredProc atau TADODataset akan lebih baik jika anda menggunakan komponen TADOConnection untuk melakukan koneksi ke database. Jika tiap komponen menggunakan koneksi sendiri (dengan mengisi pada property ConnectionString), itu sama artinya dengan pemborosan resource komputer. Hal ini harus dihindari, kecuali untuk kasus-kasus tertentu. Beberapa property dan method penting pada komponen TADOTable: •
CursorType
Pemrograman Delphi By Sorang Pakpahan,S.Kom
4
Pemilihan tipe kursor akan sangat mempengaruhi performance dari aplikasi yang anda buat. ADO mempunyai empat macam tipe cursor, yaitu dynamic, keyset, forward-only dan static. Oleh karena masing-masing tipe kursor mempunyai karakter tersendiri, Anda harus memahami karakter masing-masing tipe kursor tersebut. Delphi membungkus tipe kursor ADO menjadi TCursorType. -
ctUnspecified Tipe kursor belum ditentukan
-
ctOpenForwardOnly Dengan tipe kursor ini pointer hanya dapat bergerak maju, misalnya membaca data dari awal sampai akhir
-
ctKeyset dengan tipe kursor ini anda tidak dapat melihat record baru yang ditambahkan oleh user lain, anda tidak dapat mengakses record yang dihapus oleh user lain. Tipe kursor ini mendukung penggunaan bookmark
-
ctDynamic Dengan tipe kursor ini anda dapat melihat perubahan (tambah, hapus, edit) yang dilakukan oleh user lain. Selain itu anda juga dapat melakukan bookmark jika provider yang anda gunakan memang mendukungnya. Untuk mengecek apakah provider yang anda gunakan mendukung bookmark, anda dapat memakai pernyataan : If ADOTable1.Supports(coBookmark) then…. Anda dapat menggunakan tipe kursor ini jika aplikasi yang anda buat digunakan oleh banyak user yang dapat melakuka insert
Data Modul Data modul digunakan untuk meletakkan komponen VCL, terutama komponen database yang akan dipanggil dari masung-masing unit program. Pencarian Data menggunakan Locate Mancari data dengan Locate lebih fleksibel karena dapatmelakukan pencarian data pada field yang tidak mempunyai indeks. Deklarasi dari Locate adalah :
function
Locate(const
KeyField:String;Const
KeyValues;Variant;Options;
TlocateOptions):Boolean;Override; Pemrograman Delphi By Sorang Pakpahan,S.Kom
5
Keterangan : -
KeyFields merupakan daftar field tempat data akan di cari, dapat menggunakan satu atau beberapa field sekaligus.
-
KeyValues merupakan nilai yang dicari pada field yang spesifikasinya pada keyfields.
-
Options a. loCasesensitive yaitu nama field dan nilai yang di cari tidak membedakan antara huruf besar dan huruf kecil b. liPartialKey yaitu untuk menyatakan bahwa data yang di cari dapat berupa bagian dari nilai pada field.
Function Locate ini akan mengembalikan nilai true jika data yang di cari ditemukan, dan memindahkan record aktif pada record yang ditenukan.
Contoh Program menggunakan Object ADO dengan Validasi Tabel Tunggal
Langkah-langkah : 1. Buatlah database dan tabel pada Ms. Access dengan struktur sebagai berikut :
Gambar 3. Struktur Tabel Data Mahasiswa
Pemrograman Delphi By Sorang Pakpahan,S.Kom
6
2. Rancanganlah modul seperti berikut :
Gambar 4. Data Modul Pada modul tambahkan komponen AdoTable namenya: ADOTMHS, Datasource Namenya : DSMHS, dan AdoQuery namenya : ADOQueryMHS. Kode programnya adalah sebagai berikut : //Koneksi ke database dilakukan melalui program dengan deklarasi pada konstanta const //Koneksi dengan Database Access conString='Provider=Microsoft.Jet.OLEDB.4.0; Data Source= Mahasiswa.mdb; mode=Share Deny None;';
//Koneksi dengan Database Sql Server ConString='Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=mahasiswa;Data Source=pcomp'; // pcomp adalah Name Server dari Sql Server dan Mahasiswa adalah nama databasenya.
var DataModulMHS: TDataModulMHS; implementation {$R *.dfm} procedure TDataModulMHS.DataModuleCreate(Sender: TObject); begin ADOTMHS.ConnectionString:=conString; ADOTMHS.TableName:='datamhs'; ADOTMHS.Active:=True; ADOQueryMHS.ConnectionString:=conString; //menampilkan data dengan Query with ADOQueryMHS do begin close; SQL.Add('select * from datamhs'); open; Active:=true; end; DSMHS.DataSet:=ADOTMHS; end; end. Pemrograman Delphi By Sorang Pakpahan,S.Kom
7
3.Rancanglah Form sesuai dengan struktur tabel di atas seperti berikut :
Gambar 5. Rancangan form untuk data Mahasiswa Pada form di atas tambahkan object berikut : 1. Pallette Pages Standart •
5 object label dengan caption : NIM, NAMA, ALAMAT, TANGGAL LAHIR DAN NO. TELPON.
• 4 object TextEdit dengan Name : EdNIM, EdNAMA, EdALAMAT dan EdTELP. • 2 object GroupBox dengan Caption : JENIS KELAMIN dan TOMBOL. • 2 object RadioButton dengan Name : RbPEREMPUAN dan RbLAKI 2. Pallette Pages Additional • 5 object BitBtn dengan Name : BitCARI, BitSIMPAN, BitEDIT, dan BitHAPUS 3. Pallette Pages Win32 • 1 object DateTimePicker dengan Name : DtLAHIR 4. Pallette Pages Additional • 1 object DbGrid dengan Name : DbGrid1, Datasource : DataModulMHS.DSMHS Pada masing-masing BitBtn tambahkan icon gambar dari properti Glyph dengan Load dari directory C:\Program Files\Common Files\Borland Shared\Images\Buttons 4. Tuliskan kode program berikut sesuai dengan event-event yang digunakan : //Procedure untuk merefresh data yang terdapat pada Dbgrid PROCEDURE TForm1.REFRES; BEGIN DataModulMHS.DSMHS.DataSet:=DataModulMHS.ADOTMHS; DBGrid1.DataSource:=DataModulMHS.DSMHS; END;
Pemrograman Delphi By Sorang Pakpahan,S.Kom
8
//Prosedur untuk mengisi data dari form ke tabel database procedure TForm1.isidb; begin WITH DataModulMHS.ADOTMHS DO BEGIN FieldByName('nim').AsString:=EdNIM.Text; FieldByName('nama').AsString:=EdNAMA.Text; FieldByName('alamat').AsString:=EdALAMAT.Text; IF RBPEREMPUAN.Checked THEN FieldByName('JENKEL').AsString:='P' ELSE FieldByName('JENKEL').AsString:='L'; FieldByName('TGLLAHIR').AsDateTime:=DTLAHIR.Date; FieldByName('TELP').AsString:=EdTELP.Text; end; end; //Program menyimpan data dengan validasi jika record berdasarkan field Nim belum ada procedure TForm1.BitSIMPANClick(Sender: TObject); begin if EdNIM.Text<>'' then with DataModulMHS.ADOTMHS do if not Locate('nim',EdNIM.Text,[]) then begin insert; isidb; DataModulMHS.ADOTMHS.Post; // memanggil prosedure refres REFRES; end else begin MessageBox(Handle,'Nim Sudah ada','Error',MB_ICONERROR); EdNIM.SetFocus; end else ShowMessage('Nim tidak bisa kosong'); end; //Program merubah data dengan validasi jika record berdasarkan field Nim sudah ada procedure TForm1.BitEditClick(Sender: TObject); begin if EdNIM.Text<>'' then with DataModulMHS.ADOTMHS do if Locate('nim',EdNIM.Text,[]) then begin DataModulMHS.ADOTMHS.Edit; isidb; Pemrograman Delphi By Sorang Pakpahan,S.Kom
9
DataModulMHS.ADOTMHS.Post; // memanggil prosedure refres REFRES; end else begin MessageBox(Handle,'Nim tidak Ada','Error',MB_ICONERROR); EdNIM.SetFocus; end else ShowMessage('Nim tidak bisa kosong'); end; //Program untuk mengambil data record dari DbGrid ke form procedure TForm1.DBGrid1CellClick(Column: TColumn); begin EdNIM.Text:=DBGrid1.Fields[0].Value; EdNAMA.Text:=DBGrid1.Fields[1].Value; EdALAMAT.Text:=DBGrid1.Fields[2].Value; DTLAHIR.Date:=DBGrid1.Fields[3].Value; if DBGrid1.Fields[4].Value='P' then RBPEREMPUAN.Checked:=true else RBLAKI.Checked:=true; EdTELP.Text:=DBGrid1.Fields[5].Value; end; //Prosedur untuk mengisi data dari tabel database ke form procedure TForm1.Tampil; begin with DataModulMHS do begin EdNIM.Text:=ADOTMHS['nim']; EdNAMA.Text:=ADOTMHS['nama']; EdALAMAT.Text:=ADOTMHS['alamat']; DTLAHIR.Date:=ADOTMHS['tgllahir']; if ADOTMHS['jenkel']='P' then RBPEREMPUAN.Checked:=true else RBLAKI.Checked:=true; EdTELP.Text:=ADOTMHS['telp']; end; end; //Prosedur untuk menghapus data dari tabel database berdasarkan pencarian data procedure TForm1.BitHapusClick(Sender: TObject); begin if EdNIM.Text<>'' then Pemrograman Delphi By Sorang Pakpahan,S.Kom
10
with DataModulMHS.ADOTMHS do if Locate('nim',EdNIM.Text,[]) then begin if MessageBox(Self.Handle,'Apakah Yakin Dihapus ? ','Peringatan',MB_YESNO or MB_ICONQUESTION)=idyes then DataModulMHS.ADOTMHS.Delete; // memanggil prosedure refres REFRES; end else begin MessageBox(Handle,'Nim Tidak ada','Error',MB_ICONERROR); EdNIM.SetFocus; end else ShowMessage('Nim tidak bisa kosong'); end; //Prosedur untuk mengakhiri eksekusi program procedure TForm1.BitKeluarClick(Sender: TObject); begin if MessageBox(Self.Handle,'Apakah Yakin Keluar MB_ICONQUESTION)=idyes then Application.Terminate; end;
?
','Peringatan',MB_YESNO
or
//Prosedur untuk pencarian data dari tabel database berdasarkan NIM procedure TForm1.BitCariClick(Sender: TObject); begin if EdNIM.Text<>'' then with DataModulMHS.ADOTMHS do if Locate('nim',EdNIM.Text,[]) then begin Tampil; // memanggil prosedure refres REFRES; end else begin MessageBox(Handle,'Nim tidak ditemukan','Error',MB_ICONERROR); EdNIM.SetFocus; end else ShowMessage('Nim tidak bisa kosong'); end;
Pemrograman Delphi By Sorang Pakpahan,S.Kom
11
Latihan : Berdasarkan Tabel dari database di atas tambahkanlah tabel Matakuliah yang terdiri dari field Kd_Mtkuliah, Nama_Mtkuliah,Semester. Kemudian rancanglah form berdasarkan struktur tabel matakuliah tersebut dan lanjutkan dengan program Aplikasi database untuk operasi Simpan, Cari, Rubah, Hapus dan Keluar.
Pemrograman Delphi By Sorang Pakpahan,S.Kom
12