jump to navigation

Crack mdb password (Ms. Access 97, 2000) Wed - Jul 31, 2002

Posted by supriyatna in Programming, Windows.
Tags: , , , , , ,
add a comment

Berikut adalah source program untuk mengcrack pasword pada database Ms. Access 97. Gue sendiri belom pernah test apakah berhasil atau tidak. Hanya saja jika source code ini merupakan porting dari source code aslinya yg menggunakan bahasa C.

Saran:
Backup terlebih dahulu databas anda, sebelum mengimplemantasikannya pada production database. Segala kesalahan/kerusakan menjadi tanggung jawab saudara.

Ok! tanpa panjang lebar, berikut potongan source code-nya.

Dim n As Long, s1 As String * 1, s2 As String * 1
Dim lsClave As String
Dim mask As String

mask = Chr(78) & Chr(134) & Chr(251) & Chr(236) & _
  Chr(55) & Chr(93) & Chr(68) & Chr(156) & _
  Chr(250) & Chr(198) & Chr(94) & Chr(40) & Chr(230) & Chr(19)

  'Ini adalah file anda
  Open "c:\protected db.mdb" For Binary As #1
  Seek #1, &H42
  For n = 1 To 14
    s1 = Mid(mask, n, 1)
    s2 = Input(1, 1)
    If (Asc(s1) Xor Asc(s2)) <> 0 Then
      lsClave = lsClave & Chr(Asc(s1) Xor Asc(s2))
    End If
  Next
  Close 1
  MsgBox "The Password Is: " & lsClave

Jika anda masih tidak bisa ngakalin untuk menghilangkan password tersebut, coba gunakan software http://www.lostpassword.com/

VISUAL BASIC FAQ (Frequently asked questions) Mon - Jun 24, 2002

Posted by supriyatna in Programming, Windows.
Tags: , ,
add a comment

Tanggal update : Jun/24/2002, Jkt

Pertanyaan berikut disusun berdasarkan pertanyaan-pertanyaan yang muncul pada milis vb-indo yang saya ikuti dan juga berdasarkan email-email berupa pertanyaan ataupun konsultasi yang saya terima di supriyatna@mailandnews.com. Jika anda berminat untuk bergabung dengan milis ini silahkan anda kirimkan email kosong ke vb-indo-subscribe@egroups.com (semoga banyak memberikan manfaat untuk anda).

I.N.D.E.X G.E.N.E.R.A.L

  • Highlight (Select All) suatu text pada TextBox?, supriyatna (24, June, 2002)
  • Bagaimana merubah icon standar dari Form?, supriyatna (07, June, 2002)
  • Merubah fungsi suatu tombol, supriyatna (07, June, 2002)
  • Kapan sebaiknya App.Path diggunakan?
  • Bagaimana mendeklarasikan Variable dalam satu Baris?
  • Kenapa .Caption pada Label tidak berubah pada saat proses Looping?
  • Mengapa Data pada Crystal Report selalu menampilkan data yang lama, sehingga tidak sesuai dengan data terbaru?
  • Bagaimana caranya me-Register component yang belum ter-registrasi?
  • Memecah baris kode yang panjang pada VB, agar dapat menjadi beberapa baris?
  • menampilkan pesan pada MsgBox dalam beberapa baris?
  • Apa yang dimaksud dengan Pass By Referance
  • Kapan Option Base digunakan?
  • Apa beda Operator + dan & (Ampersand)?
  • Merubah/replace string pada File Text?, (June 6, 2001)

I.N.D.E.X D.A.T.A.B.A.S.E

  • Bagaimana mengakses database dengan menggunakan DAO?
  • Bagaimana membaca nilai pada suatu Field database?
  • Apa itu “Null”?
  • Bagaimana menghindari error “Invalid use of Null” saat membaca nilai NULL dari database?

G.E.N.E.R.A.L
Highlight (Select All) suatu text pada TextBox?

Untuk meng-highligh atau Men-select all text pada suatu textbox, anda bisa menggunakan perintah berikut:

txtName.SelStart = 0
txtName.SelLength = Len( txtName.Text )
txtName.SetFocus

Bagaimana merubah icon standar dari Form?

Untuk mengganti icon standar/default dari Form, yaitu cukup dengan merubah propery .Icon pada Object Form, pada saat mengclick Property .Icon akan muncul dialog Open, yang fungsinya adalah untuk memilih icon yang anda inginkan.

Sedangkan untuk menentukan icon apa yg akan digunakan oleh project, dalam hal ini jika anda ingin merubah icon dari .exe file yg dihasilkan. Yaitu dengan langkap-langkah sebagai berikut:

Merubah fungsi suatu tombol?

Mungkin anda pernah menginginkan merubah fungsi sebuah tombol, misalkan pada saat anda selesai mengetik/mengisikan suatu nilai pada sebuah control Text Box, kemudian anda mengetik tombol ENTER anda ingin agar kursor (focus) pindah Text Box berikutnya. Pernakah bukan, atau malah sering?

pertanyaan seperti yg diajukan oleh saudara zanto , dapat dijawab dengan satu kata.

Mudah! itu jawabannya. Karena sebenarnya Visal Basic sudah menyiapkan fungsi ini. Untuk menghadle masalah ini ada dua cara yg dapat dipakai.

Private Sub Text1_KeyPress(KeyAscii As Integer)
  If KeyAscii = 13 Then
    SendKeys "{TAB}"
  End If
End Sub

Atau dapat juga dengan menggunakan method SetFocus, Namun saya sendiri menganjurkan untuk menggunakan Procedure SendKeys.

Private Sub Text1_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
  Text2.SetFocus
End If
End Sub

Kapan sebaiknya App.Path digunakan?

App.Path Merupakan property aplikasi yang berisi path dari suatu program yang sedang dibuat, Apabila pertama kali kita membuat Program VB dan Project yang kita buat tersebut belum disimpan. Maka nilai App.Path akan menunjuk pada Default Directory dari Program VB berada. Sedangkan apabila telah disimpan, maka App.Path akan merujuk pada path dimana file Project (.vbp) berada.

Namun apabila Project tersebut sudah dicompile menjadi executeable (.exe) kemudian kita jalankan, maka App.Path akan merujuk pada Path dimana file executable (.exe) tersebut berada.

App.Path sering digunakan untuk menentukan Path dari suatu file database, sehingga Program yang dibuat dapat Fleksibel, yaitu dengan mengacu kepada letak dari file executeable. Contoh penggunaannya:

Dim db as Database
Dim strPathDB As String
strPathDB = IIf( Right$(App.Path,1)<>"\", App.Path + "\", App.Path )
Set db = DBEngine.OpenDatabase(strPathDB + "Test.MDB")

Bagaimana mendeklarasikan Variable dalam satu Baris?

Salah satu cara pendeklarasian suatu variable adalah dengan keyword Dim, namum terdapat suatu kesalahan fatal yang dilakukan oleh programmer pada saat pendeklarasian variable. Terjadi yaitu pada kondisi dimana pendeklarasian suatu variable dilakukan pada satu baris, perhatikan contoh dibawah!

Dim var1, var2, var 3 As String

Para programmer biasanya terpengaruh oleh gaya dari bahasa pemrogramman lainnya, seperti Pascal ataupun C. Sehingga akan berfikir bahwa pada baris diatas telah disiapkan tiga buah varibale dengan tipe String. ternyata… SALAH!!!, kenyataan yang sebenarnya adalah tersedia 2 buah variable bertipe Variant (var1 dan var2), dan satu buah variable bertipe String (var3). Jika yang diinginkan adalah 3 buah variable bertipe string, maka pendeklarasian yang bernar terlihat dibawah ini:

Dim var1 As String, var2 As String, var3 As String

Kenapa .Caption pada Label tidak berubah pada saat proses Looping?

Pada beberapa property (Khususnya property yang berhubungan dengan tampil an pada screen, misalkan .Caption pada Label, ProgressBar dll), jika operasi assignment dilakukan pada saat Looping maka proses Refresh akan dilakukan pada saat proses Looping selesai. Untuk mengatasi hal ini, yaitu dengan memaksa Object untuk mengirimkan message Refresh atau memaksa Sistem Operasi Windows untuk menjalankan message yang lain, yaitu dengan Statement DoEvents. Contoh terlampir pada potongan program:

Private Sub Command1_Click()
Dim a As String
For i = 1 To 1000
  a = Str(i)
  Text1.Text = a : Text1.Refresh
  Label1.Caption = a '  : Label1. Refresh
  Form1.Caption = a '
  ' Atau gunakan DoEvents pada baris ini.
Next i
End Sub

Mengapa Data pada Crystal Report selalu menampilkan data yang lama, sehingga tidak sesuai dengan data terbaru?

Default dari Crystal Report adalah mencentang pilihan “Save data with Report” —Data disimpan dengan Report–, sehingga data yang ditampilkan adalah data yang disimpan bersama dengan report, pilihan ini juga menyebabkan file report (.rpt) menjadi membengkak. Agar data yang ditampilkan selalu uptodate anda harus menghilangkan pilihan “Save Data with Report” yang ada pada menu “File”, atau jika ingin melakukan secara programming, set property .DiscardSavedData menjadi True (defaultnya bernilai False, sehingga jika pada Report Data ikut tersimpan, maka data yang ditampilkan bukanlah data terbaru).

Berikut listing programnya:

With CrystalReport1
  .ReportFileName = App.Path & "\StatementOfAccounts.rpt"
  .WindowState = crptMaximized
  .WindowTitle = "Pengadaan Report"
  .DiscardSavedData = True ' Gunakan data yang terbaru!!!
  .Action = 1 ' Preview Report to Screen
End With

Bagaimana caranya me-Register component yang belum ter-registrasi?

Pada saat installasi terkadang proses registrasi suatu komponen mengalami kegagalan, atau setelah anda membuat suatu komponen kemudian ingin menggunakannya tapi bingung dengan caranya. Lalu bagaimana mengatasinya?

Gunakan file REGSVR32.EXE (biasanya terletak di folder WINDOWS). Contoh, jika ingin me-register komponen MYOCX.OCX gunakan command berikut:

c:\windows\regsvr32.exe c:\myfolder\MYOCX.OCX

Memecah baris kode yang panjang pada VB, agar dapat menjadi beberapa baris?

Gunakan spasi dengan di ikuti underscore (_), seperti contoh dibawah:

strKalimat = "FAQ ini dibuat untuk membantu " & _
   "para programmer pemula " & _
   "atau untuk yang sedang mengalami beberapa masalah" & _
   "Semoga ada manfaatnya, supriyatna@mailandnews.com"

Menampilkan pesan pada MsgBox dalam beberapa baris?

Yaitu dengan menggunakan Carriage return ( chr$(13)), atau LineFeed (CHR$(10)), dapat juga dengan menggunakan kombinasi keduanya yaitu Carriage Return dan LineFeed, untuk lebih mudah lagi dengan memanfaatkan konstanta vbCRLF (atau ekivalen dengan CHR$(13)+CHR$(10)).

MessageBox "Gunakan vbCRLF untuk membuat" + vbCRLF + _
  "Pesan pada fungsi MsgBox" + vbCRLF + _
  "menjadi beberapa baris", vbExclamation + vbOkOnly, "Informasi"

Apa yang dimaksud dengan Pass By Referance

Yaitu mengirimkan nilai suatu variable dengan berupa alamat memori, sehingga apabila terjadi perubahan nilai didalam sub/fungsi maka pada saat keluar varibale tersebut nilainya telah berubah, defaultnya adalah Pass by Reference.

Sedangkan jika dengan menggunakan Pass By Value, maka nilai yang dikirim akan di copy kan, sehingga apabila dilakukan operasi terhadap variable tersebut, maka setelah keluar dari sub/fungsi, variable pengirimnya tidak terpengaruh (nilainya tetap).

Kapan Option Base digunakan?

Yaitu apabila menginginkan awal index dari suatu array dimulai dari 1, secara default setiap array yang dibuat akan dimulai dari index 0. Untuk merubah ketentuan ini atau dengan kata lain ingin agar index pertama dari array diawali dari 1, maka tambahkan baris:

Option Base 1

Apa beda Operator + dan & (Ampersand)?

Perhatikan contoh dibawah:
a.) strVar1 = “Rp ” + 2000
b.) strVar2 = “Rp ” & 2000

Apa yang terjadi?, ya! pada contoh (a) akan terjadi error, ini disebabkan karena Operasi (+) dilakukan pada tipe data yang berlainan. Yang pertama beripe string dan yang satunya lagi bertipa numerik. Operator (+) tidak dapat berjalan pada tipe data yang berlainan.

Sedangkan pada contoh (b) tidak terjadi error. Karena walaupun operasi dilakukan pada tipe data yang berbeda namun Operator & (ampersand) akan melakukan konversi terlebih dahulu, yaitu merubah nilai 2000 kedalam string “2000”. Sehingga variable strVar2 akan bernilai “Rp 2000”.

TIPS:
Karena Operator (&) akan melakukan konversi terlebih dahulu sebelum dilakukannya operasi, maka operator (&) membutuhkan waktu yang lebih lama dibandingkan dengan operator (+). Kesimpulannya, gunakan (+) jika akan nilai yang akan dioperasikan bertipe data sama.

Merubah/replace string pada File Text?

Jika pada suatu file text terdapat file sebagai berikut:

01 DEDE
02 SUPRIYATNA
03 VISUAL BASIC

Kemudian kita ingin merubah data SUPRIYATNA menjadi SYANDY, maka langkah yang dapat kita lakukan adalah;

' 01 DEDE
' 02 SUPRIYATNA
' 03 VISUAL BASIC

Dim sBaris As String
Dim sNoBaris As String

Open "c:\vbasic\text1.txt" For Input As #1
Open "c:\vbasic\text2.txt" For Output As #2

Do While Not EOF(1)
  ' Baca dari File TEXT1.TXT
  Input #1, sBaris
  sNoBaris = Left$(sBaris, 2)
  If sBaris= "02" Then
    sBaris = Replace( sBaris, "SUPRIYATNA", "SYANDY" )
  End If
  ' Tulis hasil-ny ke file TEXT2.TXT
  Print #2, sBaris
Loop

' Jangan lupa untuk menutup File yang sudah dibuka
Close #1
Close #2

Ok! Gitu aja kok repot……, Selamat mencoba dan salam

D.A.T.A.B.A.S.E
Bagaimana mengakses database dengan menggunakan DAO?

Untuk mengakses database dengan DAO, yang pertama kali adalah siapkan Object Database dan Recordset-nya, kemudian referensikan masing-masing Object tersebut. Perhatikan potongan program berikut:

Option Explicit
Dim db As Database
Dim rs As Recordset

Private Sub Form_Load()
Dim strPathDB As String

  If Right(App.Path, 1) <> "\" Then
    trPathDB = App.Path & "\" & "datatamu.mdb"
  Else
    trPathDB = App.Path & "datatamu.mdb"
  End If

  Set db = DBEngine.OpenDatabase(strPathDB)
  Set rs = db.OpenRecordset("GUESTBOOK", dbOpenDynaset)
End Sub

*Berikut penjelasan singkat dari listing diatas;
Database dibuka dengan menggunakan method .OpenDatabase dari Object Bulid-in DBEngine, sedangkan Recordset dengan memanfaatkan method .OpenRecordset. Yang harus anda INGAT adalah db dan rs merupakan variable Object sehingga untuk me-referensikan suatu object harus didahului dengan statement Set, berbeda dengan operasi assignment terhadap suatu variable, yang mana cukup hanya dengan varX = nilai_X.

Bagaimana membaca nilai pada suatu Field database?

Untuk membaca nilai suatu Field pada table dari Database, VB memiliki banyak cara. Diantaranya adalah dengan memanfaatkan Object Collection Fields, atau dengan memanfaatkan properti .Fields pada Object Recordset, dan bisa juga secara langsung dengan menggunakan Object Recordset. Untuk jelasnya perhatikan contoh dibawah, Anggap pada database PERUSAHAAN.MDB didalamnya terdapat tabel KARYAWAN dengan struktur sebagi berikut:

KARYAWAN
1. KARYAWAN_ID (Text, 10)
2. NAMA KARYAWAN (Text, 50)
3. ALAMAT KARYAWAN (Text, 256)

Berikut langkah untuk mengambil nilai dari suatu field;

Set db = DBEngine.OpenDatabase( "PERUSAHAAN.MDB" )
Set rs = db.OpenRecordset("KARYAWAN", dbOpenDynaset)

txtKaryawan_Id.Text = rs.Fields(0)
txtKaryawan_Id.Text = rs.Fields("KARYAWAN_ID")
txtKaryawan_Id.Text = rs(0)
txtKaryawan_Id.Text = rs("KARYAWAN_ID")
txtKaryawan_Id.Text = rs!KARYAWAN_ID

' Untuk nama Field yang mengandung SPASI, Contoh
' pada Field NAMA KARYAWAN
txtKaryawan_Id.Text = rs![NAMA KARYAWAN]

Pada Database Ms. Access penamaan suatu field diperbolehkan menggunakan karakter SPASI, hal ini menyebabkan dibutuhkannya penulisan khusus jika ingin menggunakan notasi “!” (Collection), yaitu dengan menggunakan “[” dan “]”.

Apa itu “Null”?

Null merupakan tipe data yang hanya memiliki satu nilai, yaitu Null itu sendiri, sama halnya dengan tipe data Boolean yang hanya memiliki nilai True atau False. Null digunakan untuk menyatakan bahwa suatu variable tidak memiliki nilai , dimana Null TIDAK sama dengan string kosong (empty-string) dan TIDAK sama dengan 0, serta Null TIDAK dapat dibandingkan. Ini kesalahan fatal dari pengertian Null yang diakibatkan kurangnya membaca dokumentasi VB.

CATAT:
Apabila hendak mengetahui suatu variable bernilai Null atau tidak, Operasi “sama dengan” tidak dapat dipakai, Lalu,… bagaimana caranya?. Disini VB menyediakan sebuah fungsi IsNull() yang akan mengembalikan nilai True jika berisi Null dan sebaliknya False jika bukan Null. Perhatikan Contoh;

If VariableIni = NULL Then KerjakanIni

Cara diatas akan selalu bernilai False, sehingga fungsi prosedur KerjakanIni tidak akan pernah dikerjakan. INGAT Null tidak apat dibandingkan, untuk mengatasi masalah diatas perhatikan potongan program dibawah;

If IsNull( VariableIni ) Then KerjakanIni

Bagaimana menghindari error “Invalid use of Null” saat membaca nilai NULL dari database?

“Invalid use of Null” atau error dengan kode Run-time error ’94’ adalah error yang terjadi apabila kontrol diberi nilai NULL. Salah satu contohnya yaitu apabila hendak memberikan nilai pada kontrol TextBox/ComboBox dari suatu Field pada database, namun Field tersebut bernilai NULL. Yang harus dilakukan untuk mengatasi hal ini yaitu dengan mengecek terlebih dahulu nilai dari Field tersebut, Null atau tidak?. Perhatikan kode dibawah;

txtTgl_Lahir.Text = IIf( rs("TGL_LAHIR") = Null , "", _
  rs("TGL_LAHIR")) ! SALAH karena Null tidak dapat dibandingkan
txtTgl_Lahir.Text = IIf(IsNull(rs("TGL_LAHIR")), "", _
  rs("TGL_LAHIR")) ! BENAR

*TGL_LAHIR merupakan Field dengan tipe Date
Yang perlu anda catat dari contoh diatas adalah Nilai Null tidak dapat dibandingan dengan menggunakan operasi ‘=’, sehingga untuk mengetahui suatu variable bernilai Null atau tidak yaitu dengan menggunakan Fungsi IsNull(). Yang kemudian jadi pertanyaan adalah, Adakah cara lain selain cara diatas?.

Ada! yaitu dengan mengkonversi nilai Null menjadi string Kosong (Empty String), perhatikan contoh dibawah:

txtTgl_Lahir.Text = rs("TGL_LAHIR") & ""

Disable CTRL-ALT-DEL Thu - Mar 14, 2002

Posted by supriyatna in Programming, Windows.
Tags: , , ,
add a comment

Kadang kalanya kita menginginkan agar user tidak dapat sembarang menekan tombol sakti CTL-ALT-DEL, sehingga tidak mengganggu kerja sistem yang ada.

Trik untuk mengarasi hal ini yaitu dengan menggunakan API. Logika sebenarnya adalah memaksa window ke modus screen server, sehingga seolah-olah window sedang menjalankan screen server.

Option Explicit

Private Const SPI_SCREENSAVERRUNNING = 97&

Private Declare Function SystemParametersInfo Lib "User32" _
  Alias "SystemParametersInfoA" ( _
  ByVal uAction As Long, _
  ByVal uParam As Long, _
  lpvParam As Any, _
  ByVal fuWinIni As Long) As Long

Private Sub Command1_Click()
  ' Disable ctrl-alt-del dan alt-tab
  Dim lngRetVal    As Long
  Dim blnPrevValue As Boolean
  lngRetVal = SystemParametersInfo(SPI_SCREENSAVERRUNNING, _
    True, _
    blnPrevValue, 0&)
End Sub

Private Sub Command2_Click()
  'Enable ctrl-alt-del dan alt-tab
  Dim lngRetVal    As Long
  Dim blnPrevValue As Boolean
  lngRetVal = SystemParametersInfo(SPI_SCREENSAVERRUNNING, _
    False, _
    blnPrevValue, 0&)
End Sub

Mengakses Database dengan DAO (Insert, update, delete) Wed - Mar 13, 2002

Posted by supriyatna in Programming, Windows.
Tags: , , , , , ,
add a comment

Kebanyakan pengembang akan menggunakan Visual Basic sebagai pemanipulasi dan pengolah data (Front End) sehingga data yang disimpan dapat dimanfaatkan untuk berbagai keperluan. Ini bukan berarti VB tidak dapat melakukan hal pekerjaan lainnya. Ya! Mungkin dengan alasan klasik bahwa setiap kegiatan yang berhubungan dengan manusia tidak terlepas dari deretan informasi yang membutuhkan pengolahan secara efisien dan akurat. Sehingga dari sekian banyak kemampuan yang ada hampir kebanyakan programmer akan selalu berurusan dengan Database. Disini tidak akan dijelaskan apa dan bagaimana suatu konsep Database. Saya menganggapnya anda yang sedang membaca artikel ini, sudah memahami, minimal pernah membacanya (;-(.

Sejauh yang saya ketahui, Visual Basic telah menyiapkan 3 macam cara pengaksesan kedalam database, yaitu DAO, RDO, dan ADO. Masing-masing secara singkat akan saya jelaskan sebagi berikut:

  • DAO, (Data Access Object). Pada umumnya digunakan untuk database Desktop, maksudnya?. Ya! hanya dapat mengakses Database desktop atau sering dikenal juga dengan istilah Single Database, standalone Database, Local Database. Contohnya adalah .DBF, Ms. Access (.MDB), Paradox. Kalaupun tetap menggunakan ODBC, dan database-nya diletakan pada server kemudian diakses melalui client tetap saja penggunaannya hanya bersifat Sharing database.
  • RDO, (Remote Data Object). Berbeda dengan DAO, secara khusus RDO digunakan untuk mengelola database Server secara remote. Contoh dari database Server adalah, SQL Server, MySQL, Oracle, InterBase (Biasanya include pada installasi Delphi). Walaupun RDO digunakan untuk mengakses Database Server bukan berarti RDO tidak dapat mengakses Database desktop. Kenyataannya adalah Database Desktop masih dapat diakses dengan bantuan ODBC. Secara “urakan” dengan tujuan untuk mempermudah pengenalan RDO khususnya untuk yang sudah terbiasa dengan DAO. Saya lebih sering menyamakan bahwa Object Database (DAO) digantikan dengan Object Connection (RDO) dan Object Recordset digantikan dengan Resultset. Walaupun sesungguhnya bukan sekedar dari pengalihan nama saja, namun lebih dari itu. (Informasi!!: Pada DAO, Object Connection dapat digunakan apabila Workspace yang dibuat dengan menggunakan Option dbUseODBC).
  • ADO, (ActiveX Data Object). Jika Local Database dapat diakses dengan menggunakan DAO, dan Database server dengan menggunakan RDO lalu untuk apa lagi dibuat ADO, apa programmer Microsoft sudah kurang kerjaan?. 😉 *smile*, no! dari masing-masing kegunaan yang ada pada ADO dan RDO, pada perkembangan selanjutnya, ternyata masih ada yang tidak dapat dilakukan oleh keduanya. Yaitu tidak dapat dipakai pada saat membangun Web-application (Internet application). ADO memperbolehkan Client Application untuk mengakses Database Server dengan melalui Provide OLE DB, sehingga memungkinkan untuk membangun aplikasi Client/Server dan Web Application.

Sekarang saatnya untuk membahas manipulasi database. Dalam “kerajaan database” Pengakses database secara umum terdiri dari INSERT, UPDATE dan DELETE, Penambahan, perubahan, serta penghapusan Data. Ketiganya akan dipakai dan akan kita bawa kemanapun kita pergi, baik dengan database ataupun bahasa pemrograman apapun. Untuk contoh kali ini seluruh proses dilakukan tidak dengan menggunkan SQL statement tetapi dengan memanfaatkan property dan Method yang ada pada object Recordset. Walaupun masih terdapat cara lain yaitu dengan menggunakan SQL Statement.

1. Menambah Data kedalam Database.

a. Siapkan tempat untuk menyimpan informasi.
b. Simpan informasi kedalam tempat yg sudah disiapkan sebelumnya.
c. Simpan secara permanent informasi tersebut kedalam suatu media.

' Contoh langsung proses tersebut diatas
' pada Visual Basic adalah
' Sebagai berikut:
rs.AddNew                        ' Langkah (a)
rs.Fields("NAMA") = txtNama.Text ' Langkah (b)
rs.Update                        ' Langkah (c)

2. Merubah informasi pada Database

a. Tentukan informasi yg akan dirubah.
b. Simpan informasi baru untuk menggantikan informasi yang lama.
c. Simpan secara permanent informasi tersebut kedalam suatu media.

' Syntak pada Visual Basic untuk memperbaharui data
rs.FindFirst "NAMA='" & txtNama.Text & "' " 'Langkah (a)
'
If rs.NoMatch Then
  MsgBox "Record tidak ditemukan!",vbCritical, "Error"
Else
  rs.Edit                          ' Langkah (a)
  '
  rs.Fields("NAMA") = txtNama.Text ' Langkah (b)
  rs.Update                        ' Langkah (c)
  MsgBox "Record telah diperbaharui", _
    vbInformation, "Informasi"
End If

3. Menghapus data pada Database

Proses ini adalah yang paling mudah, semudah kita menghancurkan sesuatu yang sudah kita buat dengan sudah payah, *smile*.

a. Tentukan informasi/record yang akan dihapus
b. Hapus secara permanent

' Proses diatas terlihat pada potongan program dibawah!
rs.FindFirst "NAMA='" & txtNama.Text & "'" ' Langkah (a)
'
If rs.NoMatch Then
  '
  MsgBox "Nama tersebut tidak ditemukan", _
    vbExclamation, "Error"
Else
  If MsgBox("Hapus record?", vbQuestion + _
    vbYesNo, "Konfirmasi") = vbYes Then
    '
    rs.Delete ' Langkah (b)
  End If
End If

Sedangkan program lengkap untuk contoh penggunaaan DAO terlihat pada listing dibawah. Adapun control-control yang digunakan pada Contoh dibawah adalah sebagai berikut:

  • ImageList1 : Untuk menyimpan Icon-icon yang digunakan pada ToolBar. Ingat~! Setiap icon ditentukan key-nya sesuai dengan fungsinya masing-masing karena ImageList ini akan digunakan pada Toolbar.
  • Image1 : Untuk menampilkan Banner, dimana Gambar yg digunakan berasal dari file Resourse (.RES).
  • ToolBar1 : Untuk menampilkan tombol-tombol operasi.
  • StatusBar1
  • Timer, TextBox, ComboBox, CheckBox serta Frame.
Option Explicit
Dim db As Database           ' Siapkan Object Database
Dim rs As Recordset          ' Siapkan Object Recordset
Dim rsImmediate As Recordset
Dim inOperation As String    ' Menentukan Modus Operasi
Dim nFlip As Byte            ' Untuk Animasi Banner
Dim gsGuest_Id As String     ' Varibel General ( berlaku
                             ' di form ini saja )

' Inisialiasi Form pada saat diload.
Private Sub InitForm()
  cbValid.Value = vbChecked
  cboGender.AddItem "Laki-laki"
  cboGender.AddItem "Perempuan"
  DB_Retrieve rs("GUEST_ID")
  Frame1.Enabled = False
End Sub

Private Sub Form_Load()
Dim strPathDB As String
Dim oPanel As Panel
  strPathDB = IIf(Right(App.Path, 1) <> "\", _
    App.Path & "\", App.Path) & _
    "datatamu.mdb"
  '
  Set db = DBEngine.OpenDatabase(strPathDB)
  Set rs = db.OpenRecordset("GUESTBOOK", dbOpenDynaset)

  nFlip = 0   ' Set animasi Banner
  Call InitForm

  With Toolbar1
    .ImageList = ImageList1
    .Buttons.Add .Buttons.Count + 1, "batas1", _
        , tbrSeparator
    .Buttons.Add .Buttons.Count + 1, "tambah", _
        , tbrDefault, "tambah"
    ' Parameter ke 4 digunakan untuk menentukan
    ' icon yang digunakan
    ' pada toolbar1 yang berasal dari ImageList1

    .Buttons(.Buttons.Count).ToolTipText = "Tambah data"
    '
    .Buttons.Add .Buttons.Count + 1, "ubah", , _
        tbrDefault, "ubah"
    .Buttons(.Buttons.Count).ToolTipText = "Ubah data"
    '
    .Buttons.Add .Buttons.Count + 1, "hapus", , _
        tbrDefault, "hapus"
    .Buttons(.Buttons.Count).ToolTipText = "Hapus"
    '
    .Buttons.Add .Buttons.Count + 1, "simpan", , _
        tbrDefault, "simpan"
    .Buttons(.Buttons.Count).ToolTipText = "Simpan"
    '
    .Buttons.Add .Buttons.Count + 1, "batas2", , _
        tbrSeparator
    .Buttons.Add .Buttons.Count + 1, "cancel", , _
        tbrDefault, "refresh"
    .Buttons(.Buttons.Count).ToolTipText = "Batal"
    '
    .Buttons.Add .Buttons.Count + 1, "batas3", , _
        tbrSeparator
    .Buttons.Add .Buttons.Count + 1, "keluar", , _
        tbrDefault, "keluar"
    .Buttons(.Buttons.Count).ToolTipText = _
        "Keluar dari program"
    '
    .Buttons.Add .Buttons.Count + 1, "batas4", , _
        tbrSeparator
    .Buttons.Add .Buttons.Count + 1, "first", , _
        tbrDefault, "first"
    .Buttons(.Buttons.Count).ToolTipText = _
        "Ke record pertama"
    '
    .Buttons.Add .Buttons.Count + 1, "previous", , _
        tbrDefault, "previous"
    .Buttons(.Buttons.Count).ToolTipText = _
        "Ke record sebelumnya"
    '
    .Buttons.Add .Buttons.Count + 1, "next", , _
        tbrDefault, "next"
    .Buttons(.Buttons.Count).ToolTipText = _
        "Ke record selanjutnya"
    '
    .Buttons.Add .Buttons.Count + 1, "last", , _
        tbrDefault, "last"
    .Buttons(.Buttons.Count).ToolTipText = _
        "Ke record terakhir"
    '
  End With

End Sub

Private Sub Form_Resize()
  StatusBar1.Panels(1).Width = Me.ScaleWidth
End Sub

Private Sub Timer1_Timer()
  nFlip = nFlip + 1
  ' Banner yang ditampilkan berasal dari File resource
  Image1.Picture = LoadResPicture(100 + nFlip, _
    vbResBitmap)
  If nFlip >= 7 Then
    nFlip = 0
  End If
End Sub

Private Sub Toolbar1_ButtonClick(ByVal Button As _
  MSComctlLib.Button)
Dim strGuest_Id As String
  Select Case Button.Key
    Case "tambah"
      '
      inOperation = "tambah"
      Toolbar1.Buttons("ubah").Enabled = False
      Toolbar1.Buttons("hapus").Enabled = False
      Frame1.Enabled = True
      Call DB_Blank
      txtGuest_ID = "**"
      '
    Case "ubah"
      Toolbar1.Buttons("tambah").Enabled = False
      Toolbar1.Buttons("ubah").Enabled = False
      inOperation = "ubah"
      Frame1.Enabled = True
      DB_Retrieve gsGuest_Id
    Case "cari"
      '
      strGuest_Id = InputBox( _
        "Masukan Guest ID yang " & _
        "akan di Edit?", "Kriteria")
      If strGuest_Id <> "" Then
        Toolbar1.Buttons("tambah").Enabled = False
        Toolbar1.Buttons("ubah").Enabled = False
        inOperation = "ubah"
        DB_Retrieve strGuest_Id
      End If
    Case "simpan"
      If inOperation = "tambah" Then
        '
        Call DB_Tambah
        Frame1.Enabled = False
        '
      ElseIf inOperation = "ubah" Then
        '
        If DB_Ubah Then
          Frame1.Enabled = False
        End If
      Else
        MsgBox "Please press Add button, " & _
            "Or Modify Button " & _
            vbCrLf & _
          "then you can save entire data", _
          vbExclamation, "Error"
        '
      End If
    Case "hapus"
      If inOperation = "ubah" And _
      txtGuest_ID.Text <> "" Then
        If MsgBox("Anda ingin menghapus " & _
          "Record dengan " &  _
          "Guest ID : " & _
          txtGuest_ID.Text & "?", _
          vbQuestion + vbYesNo, _
            "Konfirmasi") = vbYes Then
          '
          rs.Delete
          Call DB_Blank
          StatusBar1.Panels(1).Text = _
            "Record(s) deleted"
          Call DB_Cancel
        End If
      End If
    Case "cancel"
      Call DB_Cancel
    Case "keluar"
      Unload Me
      End ' Make sure all Object has
          ' been release from Memory

    ' Navigator Button Pressed!!!
    Case "first", "previous"
      '
      If inOperation = "ubah" Then
        If MsgBox("Cancel update data?", _
          vbYesNo + vbQuestion, _
          "Confirmation") = vbYes Then
          Call DB_Cancel
          '
        End If
      End If
      If Button.Key = "first" Then
        rs.MoveFirst
      Else
        rs.MovePrevious
      End If

      If rs.BOF Then
        rs.MoveFirst
      End If

      DB_Retrieve rs("GUEST_ID")
      '
    Case "next", "last"
      '
      If Button.Key = "next" Then
        rs.MoveNext
      Else
        rs.MoveLast
      End If
      If rs.EOF Then
        rs.MoveLast
      End If
      DB_Retrieve rs("GUEST_ID")
      Call DB_Cancel
      '
  End Select
End Sub
' Fungsi General
' --------------
Private Sub DB_Tambah()
Dim strLastRec As String

  If Not IsNull(txtTgl_Lahir.Text) Then
    If Not IsDate(txtTgl_Lahir.Text) Then
      MsgBox "Invalid Format Date", _
             vbExclamation, "Warning"
      txtTgl_Lahir.SetFocus
      Exit Sub
    End If
  End If

 ' Proses untuk Membuat Running Number, Auto Number
 ' Yaitu dengan men-select MAX field GUEST_ID
 ' kemudian ditambahkan
 ' dengan 1.
  Set rsImmediate = db.OpenRecordset( _
    " SELECT MAX(VAL(GUEST_ID))" & _
    " AS LAST_REC FROM GUESTBOOK", dbOpenDynaset)
  strLastRec = rsImmediate("LAST_REC")
  strLastRec = Format(Val(strLastRec) + 1, "00")
  rsImmediate.Close
  Set rsImmediate = Nothing

  rs.AddNew
  rs("GUEST_ID") = strLastRec
  rs("NAMA") = txtNama.Text
  rs("TGL_LAHIR") = txtTgl_Lahir.Text
  rs("TELEPON") = txtTelepon.Text
  rs("EMAIL") = txtEmail.Text
  rs("GENDER") = IIf(cboGender.ListIndex = 0, "L", "P")
  rs("KOMENTAR") = txtKomentar.Text
  rs("VALID") = IIf(cbValid.Value = vbChecked, "Y", "N")
  rs.Update
  '
  Toolbar1.Buttons("tambah").Enabled = True
  Toolbar1.Buttons("ubah").Enabled = True
  Toolbar1.Buttons("hapus").Enabled = True
  '
  DB_Retrieve strLastRec
  inOperation = ""
  '
End Sub

Private Function DB_Ubah() As Boolean
Dim strLastRec As String
  DB_Ubah = False
  '
  If Len(Trim(txtTgl_Lahir.Text)) = 0 Then
    MsgBox "Tanggal Lahir tidak boleh kosong!", _
        vbExclamation, "Peringatan"
    Exit Function
  Else
    If Not IsDate(txtTgl_Lahir.Text) Then
      MsgBox "Invalid Format Date", _
             vbExclamation, "Warning"
      txtTgl_Lahir.SetFocus
      Exit Function
    End If
  End If
  '
  rs.Edit
  rs("NAMA") = txtNama.Text
  rs("TGL_LAHIR") = txtTgl_Lahir.Text
  rs("TELEPON") = txtTelepon.Text
  rs("EMAIL") = txtEmail.Text
  rs("GENDER") = IIf(cboGender.ListIndex = 0, "L", "P")
  rs("KOMENTAR") = txtKomentar.Text
  rs("VALID") = IIf(cbValid.Value = vbChecked, "Y", "N")
  rs.Update
  '
  Toolbar1.Buttons("tambah").Enabled = True
  Toolbar1.Buttons("ubah").Enabled = True
  Toolbar1.Buttons("hapus").Enabled = True
  '
  DB_Retrieve txtGuest_ID.Text
  inOperation = ""
  DB_Ubah = True
  '
End Function

Private Sub DB_Retrieve(strIDRec As String)
Dim strSQL As String

  rs.FindFirst "GUEST_ID='" & strIDRec & "' "
  txtGuest_ID.Text = rs("GUEST_ID")
  gsGuest_Id = txtGuest_ID.Text
  txtNama.Text = rs("NAMA")

' Apabila field yang akan ditampilkan kedalam Control
' (contoh: TextBox) ternyata NULL, hal ini akan
' menyebabkan error, Oleh karena itu sebelum
' dimasukan kedalam Control, nilai pada field harus
' dicek terlebih dahulu. Saya biasanya menggunakan
' fungsi IsNull() yang digabung dengan penggunaan fungsi
' IIf( logikaExpression, ExpresiTrue, ExpresiFalse
' atau dgn menambahkan Empty String [rs("FIELD") & ""]

  txtTgl_Lahir.Text = IIf(IsNull(rs("TGL_LAHIR")), _
    "", rs("TGL_LAHIR"))
  txtTelepon.Text = IIf(IsNull(rs("TELEPON")), _
    "", rs("TELEPON"))
  txtEmail.Text = IIf(IsNull(rs("EMAIL")), _
    "", rs("EMAIL"))
  cboGender.ListIndex = IIf(rs("GENDER") = "L", 0, 1)
  txtKomentar.Text = rs("KOMENTAR")
  cbValid.Value = IIf(rs("VALID") = "Y", _
    vbChecked, vbUnchecked)
  '
End Sub

Private Sub DB_Cancel()
  '
  inOperation = ""
  Toolbar1.Buttons("tambah").Enabled = True
  Toolbar1.Buttons("ubah").Enabled = True
  Toolbar1.Buttons("hapus").Enabled = True
  Frame1.Enabled = False
  DB_Retrieve gsGuest_Id
  '
End Sub

Private Sub DB_Blank()
Dim strSQL As String
  txtGuest_ID.Text = ""
  txtNama.Text = ""
  txtTgl_Lahir.Text = ""
  txtTelepon.Text = ""
  txtEmail.Text = ""
  cboGender.ListIndex = -1    ' Tidak memilih satupun
  txtKomentar.Text = ""
  cbValid.Value = vbChecked
  '
End Sub

ADO Versus DAO/RDO Mon - Jan 15, 2001

Posted by supriyatna in Programming, Windows.
Tags: , , , , , , ,
add a comment

(….Puih….Tidak membingungkan seperti yang anda sangka.)
Di Buat : Mon, 15-Jan-2001 1:37 AM

Munculnya istilah-istilah/tehnikal dan konsep baru sering membuat kacau dan menjadi masalah terutama bagi para programmer yang baru akan belajar. Biasanya timbul kebingungan, Mana sebaiknya yang harus dipelajari dan mana yang lebih banyak memberikan keuntungan (Benefit side)?. Contohnya adalah yang berkaitan dengan Teknologi ADO versus DAO/RDO, hampir di setiap forum mailing list Visual basic para programmer pemula di bingung-kan dengan apa perbedaan dari keduanya dan dimana letak keuntunganya. Belum lagi terjawab kebingungan ini, muncul juga istiliah OLEDB, UDA dan lain sebagainya.

Tapi Insya Allah, lewat tulisan singkat ini, saya mencoba untuk menjawab kebingungan anda. Setidaknya ini karena saya pun pernah mengalami kesulitan pemahaman tentang istilah diatas.

Kita mulai saja dengan apa itu ODBC, (Upss…mahluk apa lagi ini). ODBC atau Open DataBase Connectivity merupakan API (Application Programming Interfaec) database yang khusus digunakan untuk mengakses database relasional.

API (Application Programming Interface) (baca epi-ay) merupakan kumpulan dari rutin-rutin program/modul/procedure/function yang bersifat reuseable dan yang menjadi jembatan antara aplikasi yang akan anda buat dengan Sistem Operasi, hardware atau dengan software lainnya (Istilah API hanya berlaku pada Sistem Operasi Window XXX, istilahnya mungkin akan menjadi berbeda jika digunakan pada sistem operasi lain).

Apakah selama ini anda sudah menggunakan API dalam pembuatan aplikasi? Ya! secara tidak langsung anda sebetulnya sudah menggunakan API, ratusan API sudah tersedia dalam sistem operasi Windows. Sadar atau tidak sadar anda sudah menjalankan API-API tersebut, sebutlah anda menjalankan fungsi MsgBox, secara automatis VB akan memanggil API MessageBox yang terletak pada library user32.dll, berikut prototype dari fungsi tersebut.

' Pada VB untuk mengakses API anda dapat
' menggunakan Declare yang dapat anda letakan
' pada level module atau Form tertentu.
int MessageBox(
  HWND hWnd,          // handle of owner window
  LPCTSTR lpText,     // address of text in message box
  LPCTSTR lpCaption,  // address of title of message box
  UINT uType          // style of message box
  );

' Coba bandingan dengan kemudahannya
' dengan, sintaks dibawah;
MsgBox "Ini tidak perlu pendeklarasian fungsi API", _
       "Informasi"

Lalu kenapa anda tidak menggunakan API saja dalam membangun sebuah aplikasi, apa bisa?. Jawabannya adalah! BISA! Tapi ini terlalu kompleks dan rumit. Akan banyak waktu terbuang hanya untuk berurusan dengan API-API tersebut. Kebanyakan programmer adalah menginginkan kemudahan dan kesederhanaan. Termasuk saya, biarlah programmer-programmer Microsoft membuat baru API-API tersebut, yang saya butuhkan sekarang adalah dapat membangun aplikasi dengan cepat, effective dan powerfull (Secara kenyataan Untuk mendapatkan program yang powefull tidak dapat dilakukan dengan cepat, 😉 ). Jadilah API-API tersebut di kemas dan dibungkus dengan dalam suatu library/komponen, dan biasanya terletak pada .DLL atau .OCX.

Begitupula dengan ODBC, terdiri dari fungsi-fungsi API yang tujuannya untuk mengakses database relasional. Suatu impian dari para programmer yang ingin agar dapat berhubungan secara langsung dengan database apa saja tanpa perlu memperhatikan database apa yang digunakan, entah itu Paradox, InterBase, SQLServer, Access, Oracle, MySql dan lain-lain sebagainya. Saya salut kepada anda yang mau menggunakan ODBC API dan selesai dalam waktu 1 hari, tapi bagaimana jika ada orang yang dapat menggantikan waktu kerja anda tersebut menjadi beberapa menit saja dengan menggunakan methoda berbeda???.

Karena kekompleks-an dan kerumitan-nya maka dikemaslah segala fasilitas yang ada pada ODBC kedalam bentuk yang lebih mudah untuk digunakan yaitu dengan melahirkan DAO/RDO suatu Objek ActiveX. ODBC yang merupakan impian para programmer untuk dapat mengakses bermacam database dengan satu cara (One way) dan sudah didukung oleh banyak vendor/third party pembuat database, menyebabkan para programmer Microsoft bermaksud untuk mengembangkan teknologi ini. “Mengakses banyak database hanya dengan satu cara” yang merupakan ide lama dan impian dari para programmer yang sudah terwujud dengan adanya ODBC, akhirnya melahirkan OLE DB suatu tehnologi baru Microsoft dalam pengakses-an database. OLE DB masih berbentuk API sehingga bentuk yang rumit inipun dikemas kembali kedalam bentuk yang lebih mudah digunakan dan berbentuk Objek ActiveX, yang dikenal kemudian dengan nama ADO (ActiveX Data Oject).

Untuk mudahnya adalah OLE DB ekivalen dengan ODBC yaitu sama-sama terdiri kumpulan rutin-rutin API yang membolehkan pengaksesan database relasional, sedangkan bagian untuk membungkus kerumitan tersebut menjadi bagian ADO yang ekivalen dengan DAO/RDO.

Kadang dengan adanya ADO, DAO dan RDO masih ada saja orang yang melihatnya rumit, sehingga dikemas kembali fungsi yang ada pada masing-masing kedalam bentuk visible component (Komponen yang terlihat pada saat waktu design) ADODC, DataControl, RDC.

Selanjutnya, adalah bagaimana menggunakan ADO dalam mengakses database?. Silakan anda lanjutkan membaca artikel ini.

1. Menambah Data kedalam Database.

Untuk proses pengakses-an suatu database dengan menggunakan ADO, sebenarnya tidak jauh berbeda dengan apabila kita menggunakan DAO. Hanya saja pada penjelasan dibawah ini diberikan alternative lainnya. Sehingga anda dapat memilih mana yang sebaiknya digunakan. Kita mulai saja dengan proses penambahan record/row baru.

a. Siapkan tempat untuk menyimpan informasi.
b. Simpan informasi kedalam tempat yg sudah disiapkan sebelumnya.
c. Simpan secara permanent informasi tersebut kedalam suatu media.

' Contoh langsung proses tersebut diatas
' pada Visual Basic adalah sebagai berikut:
rs.AddNew                        ' Langkah (a)
rs.Fields("NAMA") = txtNama.Text ' Langkah (b)
rs.Fields("ALAMAT") = txtAlamat.Text
rs.Update                        ' Langkah (c)

Alternatif lain selain cara diatas adalah dapat menggunakan;

rs.AddNew "NAMA", txtNama.Text
rs.AddNew "ALAMAT", txtAlamat.Text

Atau andapun dapat menggabungkan-nya menjadi satu baris yaitu dengan menggunakan Fungsi Array, perhatikan contoh dibawah:

rs.AddNew Array("NAMA", "ALAMAT"), _
          Array(txtNama.Text, txtAlamat.Text )

2. Merubah informasi pada Database.

Untuk merubah data yang ada, pada DAO kita dapat menggunakan Method .Edit. Tapi hal ini tidak dapat lagi dilakukan apabila menggunakan ADO. Karena pada ADO method .Edit sudah tidak ada lagi. Lalu bagaimana jika ingin merubah/memperbaiki/mengedit data yang sudah ada?.

Mudah!… ya, ada dapat menggunakan Method .Update, perhatikan contoh dibawah ini.

' Contoh langsung proses tersebut diatas

rs.Fields("NAMA") = txtNama.Text
rs.Fields("ALAMAT") = txtAlamat.Text
rs.Update

Langkah untuk mengedit data dapat dilakukan tanpa menggunakan Method .Edit (Pada ADO tidak terdapat Method .Edit). Alternatif lainnya dapat dilihat pada contoh berikut dibawah.

rs.Update "NAMA", txtNama.Text
rs.Update "ALAMAT", txtAlamat.Text

Atau andapun masih dapat menggunakan cara berikut;

rs.Update Array("NAMA", "ALAMAT"), _
          Array(txtNama.Text, txtAlamat.Text

3. Menghapus data dari Database.

Sederhana!… Cukup dengan menggunakan Method .Delete selesai semuanya. Ok!

' Hapus record/row yang aktif.
rs.Delete

Nah..Jika anda perhatikan dari contoh-contoh diatas, Tidak terlalu berbeda bukan? Apabila dibandingkan dengan menggunakan DAO. Untuk melihat contoh lengkap tentang bagaimana mengakses database dengan menggunakan ADO, silahkan anda lihat pada Artikel berjudul “Menggunakan Technologi ADO untuk mengakses database”

Satu lagi!. Selain dari langkah/cara diatas ternyata masih ada satu lagi cara untuk berkomunikasi dengan database. Ya! yaitu dengan menggunakan SQL Statement. Ulasaan lengkapnya dapat anda jumpai pada artikel berjudul “ADO, SQL dan ORACLE”

Kesimpulannya adalah…
Baik ADO ataupun DAO/RDO, dibuat memang dengan tujuan yang berbeda. Technologi ADO lahir untuk melengkapi kekurangan dari technologi sebelumnya yaitu DAO dan RDO. Saya sendiri menganjurkan kepada anda untuk menggunakan ADO. Mengapa ? Karena dengan menggunakan ADO anda dapat membangun aplikasi Client/server dan sekaligus dapat membuat aplikasi yang berbasis Internet, dan hanya dengan ADO (untuk saat ini) inilah teknologi OLEDB dapat digunakan.

Lagi pula untuk menggunakan technologi ADO tidaklah terlalu sulit. Hampir dipastikan apabila anda sebelumnya sudah pernah menggunakan DAO ataupun RDO, pasti dapat juga membangun suatu aplikasi dengan menggunakan ADO. Sedangkan dari segi kecepatan/performance, semuanya tinggal kepada anda. Dapatkah anda memanfaatkan technologi ADO (yang jelas lebih baik: Silahkan anda lihat di http://www.microsoft.com/data ) dengan semaksimal mungkin. Atau hanya sekedar menggunakan hanya dengan alasan teknologi ADO merupakan hal yang baru tanpa tahu sisi kelebihannya dan bagimana memaksimalkan-nya.