Meneliti Kesalahan Perintah SQL

Jika anda seorang programmer, tentu melakukan kesalahan penulisan tidak hal yang asing lagi. Kesalahan yang sering saya lakukan adalah ketika menuliskan baris-baru perintah SQL.  Dan jika ada kesalahan penulisan di baris string SQL yang sederhana sih, mungkin tidak menjadi masalah besar tetapi begitu perintah SQL nya kompleks tentu itu bukan pekerjaan yang mudah untuk meneliti letak kesalahannya. Dalam kasus ini saya menggunakan MySQL sebagai tulang punggung aplikasi saya.

Dan saya tahu setiap programmer mempunyai caranya sendiri-sendiri untuk trace kesalahan tersebut. Kalau saya pada intinya, setiap string SQL saya selalu letakan di sebuah variable dan variable inilah nantinya yang saya manipulasi melalui Immediate Window-nya Visual Basic.

Misalnya saya akan membuka data yang saya inginkan melalui satu procedure ini:

Private Sub refresh_grid()
Dim rs_grid As New ADODB.Recordset
Dim kode_pos As String
Dim str_open As String
'/set kode bengkel
kode_pos = Trim(lbl_kode_pos.Caption)
'/set string
str_open = "SELECT spos.pos_id, spos.kode_barang, mb.nama_barang, mb.satuan, spos.jumlah, spos.harga_jual, (spos.jumlah*spos.harga_jual) AS sub_total "
str_open = str_open & "FROM tbl_sub_pos AS spos INNER JOIN tbl_data_induk_barang AS mb ON spos.kode_barang=mb.kode_barang "
str_open = str_open & "WHERE spos.kode_pos='" & kode_pos & "'"
'/buka recordset
With rs_grid
    .CursorLocation = adUseClient
    .Open str_open, myconn, adOpenStatic, adLockReadOnly
    .Requery
End With
'/isi grid
With grid_pos
    .DataSource = rs_grid
    .ReBind
    .Refresh
End With
'/jumlahkan sub total
jumlahkan_sub_total
'/hapus memory
Set rs_grid = Nothing
End Sub

Dan jika terjadi kesalahan langkah berikut yang saya ambil:

  1. Saya sekali lagi selalu meletakan string SQL saya ke sebuah variable dan tidak langsung di buka di dalam blok pembukaan recordset. Misalnya: rs_grid.Open "SELECT mb.kode_barang FROM tbl_master_barang". Karena jika terjadi kesalahan akan susah melacaknya di Immediate Window.
  2. Jika ketika anda me-run coding anda dan anda di beritahukan ada kesalahan dari SQL anda, maka klik tombol Debug.
    pesan kesalahan
  3. Maka anda akan ‘dikembalikan’ ke layar Visual Basic anda dan Visual basic akan menunjukkan letak baris kesalahan,
    letak kesalahan
    lalu secara otomatis Immediate Window akan muncul, lalu di Immediate Window ketikkan ?nama_variable_sql. Jadi misalnya string SQL saya tampung di variable str_open, maka saya ketik ?str_open untuk melihat isi dari variable tersebut.
    Immediate Window
  4. Dan langkah berikutnya yang saya ambil adalah meng-copy seluruh baris SQL tersebut dan saya paste ke SQL editor kesayangan saya.
    MySQL Query Browser
  5. DI MySQL Query Browser saya akan terbantu karena Query Browser akan membedakan antara string, sintaks dasar, dll sehingga saya jauh lebih terbantu untuk menemukan kesalahan SQL saya. Dan jika kesalahan sudah saya temukan, maka akan saya benahi di Visual Basic saya.

Nah, kira-kira apa langkah yang biasa anda lakukan jika terjadi kesalahan di baris SQL anda?

2 comments

  1. Kalo cara saya begini mas… misalnya baris code nya seperti punya mas diatas..

    With rs_grid
    .CursorLocation = adUseClient
    .Open str_open, myconn, adOpenStatic, adLockReadOnly
    .Requery
    End With

    maka saya menambahkan kode ini ‘debug.print str_open’ diatas .open stropen… dan jadinya akan seperti dibawah ini

    With rs_grid
    .CursorLocation = adUseClient
    debug.print str_open
    .Open str_open, myconn, adOpenStatic, adLockReadOnly
    .Requery
    End With

    maka isi dari variabel str_open langsung akan muncul di Imediate windows begitu kita mendapatkan error dari query tsb…

    begitulah masukkan dari saya.. terimakasih.. ^_^

  2. @puing: Bang puing, dulu saya memakai debug.print untuk melakukan debuging string sql saya, sayang saya selalu lupa menghapus baris tersebut ketika semua sudah berjalan…

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.