5 Objektif : Memahami ADOCE & Database Pada Pocket PC Mengaplikasikan Penggunaan Database Pada Aplikasi Pocket PC Memahami Penggunaan Perintah SQL 5.1. Mengenal ADOCE Microsoft ActiveX Data Object for Windows CE (kemudian disingkat ADOCE) adalah sebuah kontrol pada Embedded Visual Basic yang fungsinya adalah untuk menghubungkan aplikasi dengan sebuah sumber data (yang selanjutnya kita sebut database). Dengan menggunakan ADOCE ini kita dimungkinkan untuk menciptakan suatu koneksi pada sebuah Pocket PC database, lalu membuat dan memodifikasi database tersebut. Koneksi atau perubahan database dilakukan dengan cara menciptakan suatu variabel object yang mewakili kontrol ADOCE yang kemudian akan dipanggil fungsi-fungsi dan prosedur-prosedur untuk melaksanakan pekerjaannya. Fungsi dan prosedur yang terdapat pada ADOCE memiliki syntax yang kurang lebih sama dengan ADO yang biasa digunakan dalam pembuatan program Desktop PC. Secara default terdapat dua jenis object yang dimiliki oleh ADOCE, yaitu Connection dan Recordset dimana kedua object tersebut dapat membuat suatu koneksi antara aplikasi yang akan dibuat dengan sumber data. Object Connection digunakan untuk menjalankan perintah yang diharapkan tidak mengembalikan data. Sedangkan object Recordset digunakan untuk menjalankan perintah y ang dapat mengembalikan data untuk memodifikasi isi database yang telah dikoneksikan tersebut, baik itu menyangkut table, field maupun masingmasing recordset. Secara default, Microsoft Embedded Visual Basic mengikut sertakan ADOCE versi 3.0, tapi file yang membuat ADOCE ini berjalan belum tentu sudah terdapat pada Pocket PC device. Sehingga, apabila seorang programmer membuat aplikasi yang menggunakan kontrol Halaman 48
ADOCE, terdapat 9 file yang harus disertakan untuk mengaktifkan kontrol ADOCE. Cara yang paling mudah agar aplikasi yang mengandung kontrol ADOCE dapat berjalan dengan lancar adalah dengan membuat paket instalasinya, dan mengikut sertakan kontrol ADOCE dalam paket instalasi tersebut, sehingga ketika proses instalasi dilakukan, maka file utama ADOCE akan di-copy dan diregistrasikan secara otomatis. Sembilan file tersebut adalah, Adoce30.dll, Adocedb30.dll, Adoceoledb30.dll, Adosync.dll, Fileosp.dll, Msdadc.dll, Msdaer.dll, Msdaeren.dll dan Msdaosp.dll. Pada ADOCE versi 3.0 kita dimungkinkan mengakses data dengan menggunakan perintah SQL dan memungkinkan juga mengakses data menggunakan provider OLE DB. Selain itu ADOCE versi 3.0 juga memiliki beberapa object tambahan yang hampir sama digunakan oleh ADO yaitu Field, Fields, dan Error selain yang dimiliki oleh ADOCE secara default Connection dan Recordset. Cara menggunakan ADOCE pada Micorosft Embedded Visual Basic adalah : Pilih menu Project lalu References. Pada dialog box References, pilih Microsoft CE ADO Control 3.0. Tekan OK. Gambar 5.1 Tampilan References Window Halaman 49
Untuk membuat sebuah variabel merujuk pada kontrol ADOCE 3.0, caranya adalah seperti berikut ini : Dim objconnection Dim objrecordset Set objconnection = CreateObject("ADOCE.Connection.3.0") Set objrecordset = CreateObject("ADOCE.Recordset.3.0") Kedua object diatas tersebut dapat dibuat sendiri-sendiri atau secara bersamaan sesuai dengan kebutuhannya. 5.2. Database Pada Pocket PC Lain halnya dengan database yang digunakan pada Desktop PC, database yang digunakan pada Pocket PC adalah database dengan ekstension *.cdb. Database dengan ekstension *.cdb tersebut merupakan database yang dapat dibaca dan dimanipulasi oleh ADOCE. Database dengan ekstension *.cdb dibuat dengan melakukan proses konversi yang dapat dilakukan oleh program Microsoft ActiveSync atau dengan menggunakan program pihak ketiga. Sumber datanya bisa berasal dari database Microsoft Access (*.mdb) atau bisa juga berasal dari Open Database Connectivity (ODBC). Karena tingkat kekuatan (robust) database Pocket PC lebih rendah dibandingkan database Micorosft Access atau ODBC, maka kadang-kadang terdapat kehilangan informasi (bukan data) pada proses konversi tersebut. Proses pengkonversian data akan gagal dilakukan bila : Semua tipe data pada field tidak didukung oleh tipe data *.cdb. Terdapat table dengan nama sama dengan table sistem (nama MSYS). Berikut ini merupakan tipe data yang didukung oleh *.cdb dan tipe data hasil konversi dari Microsoft Access atau ODBC. MDB ODBC CDB Text sql_varchar Varchar Memo sql_longvarchar Text LongInt sql_integer Integer sql_bigint Integer Byte sql_tinyint Smallint Int sql_smallint Smallint Single sql_real Double Double sql_double Double Halaman 50
sql_float Double ReplID sql_varbinary Varbinary Date/Time sql_timestamp Datetime Currency sql_numeric Double AutoNumber sql_integer Integer YesNo sql_bit Boolean OleObject sql_longvarbinary Varbinary HyperLink sql_longvarchar Text Lookup sql_varchar Varchar Pocket PC juga memiliki database internal yang menyimpan data-data mengenai sistem operasi, program-program dan lain-lain yang dibutuhkan untuk melaksanakan pekerjaannya. Apabila dalam pembuatan koneksi menggunakan Object Recordset dan kita tidak menyebutkan nama database *.cdb yang akan dibuka, maka secara otomatis kita disambungkan pada database internal tersebut. Pada database internal tersebut, kita juga dapat membuat table, fields dan lain-lain sama halnya pada database *.cdb. 5.3. Mengkoneksikan Database Sebelum kita menggunakan sebuah database untuk dibuka atau dimanipulasi datanya, kita harus membuat suatu koneksi dengan file database tersebut. Koneksi tersebut diwakili oleh sebuah variabel yang difungsikan dengan menggunakan pernyataan Set dan CreateObject, caranya adalah seperti berikut ini : Dim conndatabase Set conndatabase = CreateObject( ADOCE.Connection.3.0 ) Setelah object koneksi itu dibuat, file database *.cdb dibuka dengan menggunakan metode Open. Bentuk umumnya adalah sebagai berikut : connection.open [ConnectionString As String], [UserID As String], [Password As String] Keterangan : ConnectionString ConnectionString ini merupakan string informasi proses pembukaan database, bisa juga hanya diisi sumber datanya (data source). UserID Halaman 51
UserID yang digunakan untuk proses verifikasi sumber data. Password Passwod yang digunakan untuk proses verifikasi sumber data. Berikut ini merupakan beberapa metode lainnya yang terdapat pada object Connection : EXECUTE Metode ini digunakan untuk mengeksekusikan perintah SQL yang mengembalikan hasil berupa data. Misalnya digunakan untuk pembuatan table baru, penghapusan table dan lain sebagainya connection.execute [CommandText], [RecordsAffected] Keterangan : CommandText Perintah yang akan diberlakukan. RecordsAffected Tempat perintah diberlakukan. CLOSE Metode ini digunakan untuk menutup koneksi yang telah selesai digunakan. connection.close Contoh untuk membuka database MyDatabase.cdb : conndatabase.open data source = \MyDatabase.cdb atau conndatabase.open MyDatabase.cdb Sedangkan, untuk membuka database SQL Server CE edition, caranya adalah : conndatabase.open "Provider = SQLOLEDB; Data Source = DATBTEST; Initial Catalog = TEST; User Id = sa; Password =;" Halaman 52
Perlu diingat bahwa connection string pada metode open diatas tidak bisa langsung membuka table, baik table pada database *.cdb maupun table pada database internal Pocket PC. Aktifitas yang menyangkut table dilakukan pada metode Execute setelah database tujuannya dibuka pada metode Open, itupun sebatas pada perintah DDL (Data Definition Languange). Contoh : conndatabase.execute "CREATE TABLE tablebaru(fieldsatu TEXT, fielddua INTEGER)" Apabila koneksi yang telah dibuat itu tidak digunakan lagi, untuk menghemat memori dan menghindari terjadinya kesalahan pada penggunaan variabel yang sama, maka sebaiknya koneksi tersebut ditutup dengan menggunakan metode Close. conndatabase.close Set conndatabase = Nothing 5.4. Bekerja Dengan Recordset Segala pekerjaan yang menyangkut pada table dilaksanakan pada object Recordset. Caranya adalah dengan membuat koneksi ke Recordset dengan menggunakan variabel yang mewakili object ADOCE.Recordset. Dim connrecordset Set connrecordset = CreateObject( ADOCE.Recordset.3.0 ) Untuk membuka table agar dapat dimanipulasi datanya, metode yang digunakan adalah Open. connrecordset.open App.path & "\mytable.cdb" Pada metode Open tersebut juga dapat digunakan perintah SQL untuk proses manipulasi data lebih lanjut. Bentuk umumnya adalah sebagai berikut : recordset.open Source, [ActiveConnection], [CursorType], [LockType], [Options] Halaman 53
Keterangan : Source Nama table yang akan dibuka, atau perintah SQL yang digunakan untuk melakukan proses pada database. ActiveConnection File database (*.cdb) atau database internal yang akan dibuka. CursorType Tipe kursor yang akan digunakan dalam proses pengambilan data pada database. Konstanta Nilai Keterangan adopenforwardonly 0 Hanya memperbolehkan proses pembacaan data record dengan pergerakan kursor maju. adopenkeyset 1 Hanya memperbolehkan proses pembacaan data record dengan arah pergerakan kursor yang tidak bisa ditentukan oleh kita. adopendynamic 2 Kursor dinamis, yang memperbolehkan penambahan, penghapusan dan perubahan data record. adopenstatic 3 Kursor statis, yang hanya digunakan untuk membaca data. Fungsi lainnya tidak diperbolehkan. LockType Tipe proses penguncian data yang akan digunakan pada database. Konstanta Nilai keterangan adlockreadonly 1 Hanya boleh membaca. adlockpessimistic 2 Proses penguncian data dilakukan pada setiap record. Sehingga setiap perubahan yang dilakukan langsung terekam pada database. Pada mode ini kita bisa menambah, menghapus atau membuat record. adlockoptimistic 3 Proses penguncian data dilakukan apabila metode Update dipanggil. Pada mode ini kita bisa menambah, menghapus atau membuat record. Options Menentukan proses pembacaan source oleh recordset, apakah berupa query SQL atau hanya nama table atau lain sebagainya. Halaman 54
Konstanta Nilai Keterangan adcmdtext 1 Menyatakan parameter Source sebagai perintah SQL. adcmdtable 2 Menyatakan parameter Source sebagai nama table sistem system MsysTables. adcmdstoredproc 4 Menyatakan parameter Source sebagai sebuah prosedur pada table sistem MsysProcs. adcmdunknown 8 Default. Menyatakan parameter Source sebagai nilai yang tidak diketahui jenisnya. Berikut ini merupakan beberapa metode lainnya yang terdapat pada object recordset : ADDNEW Metode ini digunakan untuk menambahkan record baru pada database. Recordset.AddNew [Fields], [Values] Keterangan : Fields Nama field tempat data baru tersebut diberlakukan. Values Data yang akan ditambahkan. CLOSE Metode ini digunakan untuk menutup recordset yang telah selesai digunakan. Recordset.Close DELETE Metode ini digunakan untuk menghapus record pada kursor yang sedang aktif. Recordset.Delete MOVE Metode ini digunakan untuk menambahkan record baru pada database. Halaman 55
Recordset.Move NumRecords, [Starts] Keterangan : NumRecords Jumlah perpindahan record. Starts Nilai awal prmberlakuan metode ini. 0 untuk record saat ini, 1 untuk record pertama dan 2 untuk record terakhir. MOVEFIRST Metode ini digunakan untuk memindahkan kursor pada record pertama. Recordset.MoveFirst MOVELAST Metode ini digunakan untuk memindahkan kursor pada record terakhir. Recordset.MoveLast MOVENEXT Metode ini digunakan untuk memindahkan kursor pada record berikutnya. Recordset.MoveNext MOVEPREVIOUS Metode ini digunakan untuk memindahkan kursor pada record sebelumnya. Recordset.MovePrevious UPDATE Metode ini digunakan untuk menyimpan proses perubahan record pada database. Halaman 56
Recordset.Update [Fields], [Values] Keterangan : Fields Nama field tempat data baru tersebut diberlakukan. Values Data yang akan ditambahkan. Berikut ini merupakan contoh proses pemanggilan data table : connrecordset.open App.path & \tablebaru Sedangkan contoh proses pengambilan data table dengan menggunakan perintah SQL adalah sebagai berikut : connrecordset.open SELECT * FROM tablebaru Karena parameter ActiveConnection diatas tidak diisi maka metode Open diatas berlaku pada database internal Pocket PC, lain halnya bila ActiveConnection diatas diisikan seperti contoh berikut ini : connrecordset.open SELECT * FROM tablebaru, mydatabase.cdb Maka perintah SQL tersebut berlaku pada database mydatabase.cdb Sama halnya dengan object Connection, apabila koneksi ke Recordset tersebut telah selesai digunakan, maka sebaiknya koneksi tersebut ditutup dengan menggunakan metode Close. connrecordset.close Set connrecordset = Nothing 5.5. Manipulasi Data Manipulasi data (kemudian disebut record) yang dimaksud disini adalah termasuk proses pembacaan record, perubahan nilai record, penghapusan atau pembuatan record baru. Sebelum sebuah record dilakukan proses manipulasi, table tempat record tersebut disimpan Halaman 57
harus dibuka terlebih dahulu dengan melakukan proses pemanggilan recordset (recordset query). Proses pemanggilan recordset tersebut dapat dilakukan secara utuh (tanpa dilakukan filtering) maupun dengan proses filtering dengan syarat-syarat sesuai keinginan kita. Karena object recordset diimplementasikan melalui sebuah variabel, maka setelah proses pemanggilan data tersebut dilakukan, data yang berhasil dipanggil akan tersimpan pada variabel object tersebut. Melalui variabel object recordset tersebut juga dapat diimplementasikan metode-metode lain yang memungkinkan dilakukan perubahan nilai, penghapusan atau pembuatan recordset baru. Untuk sekedar menampilkannya, kita tentunya membutuhkan sebuah control pada Embedded Visual Basic tempat nilai record tersebut akan ditulis. Agar lebih sedap dipandang, kontrol yang biasa digunakan adalah ListBox, ComboBox, ListView atau Grid walaupun tidak menutup kemungkinan record tersebut ditampilkan pada sebuah textbox, Label dan lain sebagainya yang memungkinkan sebuah text ditulis. Berikut ini merupakan contoh kode program untuk menampilkan record : Kode Program 4.1 1. Dim objrecordset 2. Set objrecordset= CreateObject("ADOCE.Recordset.3.0") 3. objrecordset.open "datateman", App.path & "\BukuTelepon.cdb ", adopenkeyset, adlockoptimistic 4. If objrecordset.recordcount > 0 Then 5. Do While Not objrecordset.eof 6. List1.Additem objrecordset.fields("nama").value 7. objrecordset.movenext 8. Loop 9. End If 10. objrecordset.close 11. set objrecordset = Nothing Pada kode program diatas, file database yang dibuka adalah BukuTelepon.cdb. App.Path pada baris 3 diatas maksudnya adalah bahwa lokasi file BukuTelepon.cdb tersebut berada dalam satu direktori dengan aplikasinya. Setelah field datateman dibuka (baris 3), program akan mencari apakah jumlah record didalamnya lebih dari nol, artinya apakah ada data, jika ya maka program akan menjalankan perulangan dibawahnya (baris 5-8). Proses perulangan tersebut berisi penulisan record pada field nama pada kontrol List1 (ListBox). Halaman 58
objrecordset.movenext digunakan untk menggerakkan kursor pada posisi berikutnya, sehingga proses looping bekerja dengan normal karena kursor terus bergerak. Perulangan tersebut akan berhenti apabila telah sampai pada akhir record (objrecordset.eof). Apabila ingin menggunakan perintah SQL untuk proses pengambilan data yang lebih kompleks, maka kita tinggal merubah nama table datateman pada objrecordset.open menjadi perintah SQL tersebut. Contoh : objrecordset.open "SELECT * FROM namateman WHERE nama LIKE %indra%", App.path & "\BukuTelepon.cdb ", adopenkeyset, adlockoptimistic Untuk proses perubahan nilai record, tipe pemanggilan recordset harus diatur sedemikian rupa sehingga kita diberi hak akses untuk melakukan perubahan (tidak hanya baca / read-only). Dengan proses pemanggilan recordset biasa sama seperti diatas, kita kemudian cukup menempatkan kursor pada record yang akan kita rubah dengan menggunakan metode Move. Untuk menentukan lokasi kursor dengan tepat, dapat dilakukan dengan menggunakan perintah SQL atau dengan proses pencarian yang dibuat pada kode program. Apabila lokasi kursornya sudah tepat, proses perubahan nilai cukup dilakukan dengan mengisi masing-masing field tersebut dengan nilai baru. Kemudian, nilai record yang telah diubah tersebut disimpan dengan menggunakan metode Update. Nilai record tersebut akan dirubah dengan cara menindihkan nilai record baru atas record yang lama. Berikut ini merupakan contoh programnya : Kode Program 4.2 1. Dim objrecordset 2. Set objrecordset = CreateObject("ADOCE.Recordset.3.0") 3. objrecordset.open "SELECT * FROM datateman WHERE id=15", App.Path & \BukuTelepon.cdb adopendynamic, adlockoptimistic, adcmdunknown 4. If objrecordset.recordcount > 0 Then 5. objrecordset.fields( nama ) = Indra Nugraha 6. objrecordset.fields( alamat ) = Jl. Kelapa Tiga No. 18 Jakarta 7. objrecordset.update 8. End If 9. objrecordset.close 10. set objrecordset = Nothing Halaman 59
Karena pada proses ini terjadi perubahan data (tidak hanya baca / read-only), maka parameter metode Open pada objrecordset diberi nilai adopendynamic, dan adlockoptimistic (baris 3). Proses perubahan data dilakukan dengan cara seperti berikut ini : objrecordset.fields( nama ) = Indra Nugraha objrecordset.fields( alamat ) = Jl. Kelapa Tiga No. 18 Jakarta Setelah semua data selesai diubah, jangan lupa disimpan dengan menjalankan metode Update. Pada kondisi diatas, karena proses filtering dilakukan dengan menggunakan perintah SQL, maka kursor-pun akan langsung berada pada posisi sesuai dengan hasil pengembalian perintah SQL yang diberlakukan tersebut. Dalam hal ini kursor akan bergerak pada posisi bila nilai record id sama dengan 15. Proses pemanipulasian data lainnya yang paling sering digunakan adalah, penambahan record. Pada proses penambahan ini digunakan metode AddNew. Dimana, pada metode ini, akan disiapkan sebuah record baru yang kosong pada setiap fieldnya yang siap diisikan nilai. Setelah nilai recordnya diisi jangan lupa juga untuk menyimpannya dengan menggunakan metode Update. Untuk menentukan dimana kita akan menambahkan record baru tersebut, kita juga harus tetap melakukan pemindahan kursor ke tempat yang kita inginkan. Berikut ini merupakan contoh kode programnya : Kode Program 4.3 1. Dim objrecordset 2. Set objrecordset= CreateObject("ADOCE.Recordset.3.0") 3. objrecordset.open "SELECT * FROM datateman", App.Path & \BukuTelepon.cdb adopendynamic, adlockoptimistic, adcmdunknown 4. objrecordset.movelast 5. objrecordset.addnew 6. objrecordset.fields( nama ) = Indri Ramadia 7. objrecordset.fields( alamat ) = Jl. R.E Martadinata Kuningan 8. objrecordset.update 9. End If 10. objrecordset.close 11. set objrecordset = Nothing Pada kode program diatas, proses penambahan record baru dilakukan setelah record terakhir, ditandai dengan objrecordset.movelast (baris 4). Artinya posisi kursor dipindahkan pada lokasi terakhir, lalu dibuat record kosong baru untuk diisi. Halaman 60
Proses manipulasi data terakhir adalah penghapusan recordset. Pada proses penghapusan recordset, cukup dijalankan metode Delete. Metode ini diberlakukan pada lokasi kursor yang sedang aktif, sehingga proses pemindahan lokasi kursor tetap diperlukan untuk menentukan recordset mana yang akan dihapus. 5.6. Menggunakan Perintah SQL Penggunaan ADOCE versi 3.0 memungkinkan kita untuk menggunakan perintahperintah Structured Query Languange (SQL) dalam melakukan proses pembuatan, penghapusan atau perubahan data. Pada dasarnya perintah tersebut dibagi menjadi 2, yaitu Data Definition Languange (DDL) dan Data Manipulation Languange (DML). DDL digunakan untuk melakukan proses perubahan struktur database, misalnya membuat table baru, merubah tipe data yang akan digunakan, menghapus table dan sebagainya. Sedangkan DML digunakan untuk melakukan proses atas data record pada table yang diaplikasikan, misalnya membaca, merubah, menghapus, menyusun data dan sebagainya. Data Manipulation Language SELECT Join SELECT Like SELECT - Order By SELECT Projection SELECT Restricted SELECT Simple Data Definition Language ALTER TABLE CREATE DATABASE CREATE INDEX CREATE TABLE DROP DATABASE DROP INDEX DROP TABLE Perintah SQL ini digunakan pada metode Open pada kontrol Recordset. rs.open psql, "", adopenkeyset, adlockoptimistic, adcmdtext Variabel psql diatas merupakan perintah-perintah SQL yang akan diterapkan. Berikut ini merupakan contoh perintah-perintah SQL yang biasa digunakan beserta keterangannya : SELECT * FROM daftarteman WHERE nama LIKE = %Indra% Memilih seluruh field dari table daftarteman dimana field nama mengandung kata Indra. Halaman 61
SELECT id, nama, alamat, telp FROM daftarteman WHERE prop = DKI Jakarta AND umur > 22 ORDER BY id ASC Memilih field id, nama, alamat dan telp dari table daftarteman dimana nilai field prop adalah (tepat) DKI Jakarta dan nilai field umur lebih besar dari 22, lalu ditampilkan dengan field id disusun berurut naik. CREATE TABLE stock (id INT, nama VARCHAR[25], jumlah INT, harga FLOAT) Membuat table baru dengan nama stock, dimana didalamnya terdapat field id bertipe integer, field nama bertipe VARCHAR[25] (karakter string dengan lebar 25), field jumlah bertipe integer dan field harga bertipe float. DROP TABLE daftarteman Menghapus table dengan nama daftarteman berikut isinya. DELETE daftarteman WHERE nama= Indri Ramadia Menghapus record pada table daftarteman dimana pada recordset tersebut field nama bernilai (tepat) Indri Ramadia. Halaman 62