Search This Blog

Fungsi untuk Mencegah Perintah SQL Error

Jika kita mengeksekusi perinah SQL atau query yang variablenya diambil dari entry user pada form input data, ada kemungkinan terjadi error karena adanya karakter khusus.

Misalnya pada form input data, user mengentry data-data:
1. Kode Suplier
2. Nama Suplier
3. Alamat
4. Kota
5. Nomor Telepon

Pada form entry data Suplier ada 5 text box seperti pada gambar berikut:


Setelah data diisi kemudia tombol Save di klik maka perintah sql akan dieksekusi. Event OnClick pada tombol Save untuk menyimpan data ke tabel Suplier adalah sebagai berikut:

Private Sub cmdSave_Click()
Dim strSql As String
strSql = "INSERT INTO SUPLIER " & _
"(KODE_SUPLIER,NAMA_SUPLIER,ALAMAT,KOTA,NOMOR_TELEPON) " & _
"VALUES ('" & Me.KODE_SUPLIER.Value & "','" & _
Me.NAMA_SUPLIER.Value & "','" & Me.ALAMAT.Value & _
"','" & Me.KOTA.Value & "','" & Me.NOMOR_TELEPON.Value & "');"
CurrentProject.Connection.Execute strSql
End Sub

Jika data-data yang dientry oleh user mengandung tanda petik tunggal (') misalnya suplier bernama AL-MA'SOEM seperti pada gambar berikut:


Setelah user meng-klik tombol Save maka akan muncul pesan error seperti gambar berikut:



Perintah SQL (query) megalami error jika dieksekusi karena adanya tanda petik tunggal pada data nama suplier sebagai berikut:
INSERT INTO SUPLIER ( KODE_SUPLIER, NAMA_SUPLIER, ALAMAT, KOTA, NOMOR_TELEPON ) VALUES ('A001', 'AL-MA'SOEM', 'JL GOLF NO 38', 'BANDUNG', '7838304');

Karena user mengisi nama suplier mengandung tanda petik satu (') maka perintah SQL dianggap ada operator yang tidak lengkap (missing operator).

Perintah SQL (query) yang benar adalah:
INSERT INTO SUPLIER ( KODE_SUPLIER, NAMA_SUPLIER, ALAMAT, KOTA, NOMOR_TELEPON ) VALUES ('A001', 'AL-MA''SOEM', 'JL GOLF NO 38', 'BANDUNG', '7838304');

Untuk mencegah terjadinya error saat mengeksekusi perintah sql atau query seperti kasus di atas, maka harus ada fungsi untuk menambahkan karakter tanda petik satu (') pada nama suplier AL-MA'SOEM menjadi AL-MA''SOEM.

Fungsi yang ini kita beri nama SQLEncrypt(), berikut kode program lengkapnya:

Public Function SQLEncrypt(sText)
Dim sTemp
If Not IsNull(sText) Then sTemp = Replace(sText, "'", "''")
SQLEncrypt = sTemp
End Function

Penjelasan fungsi SQLEncrypt
  • Fungsi menerima 1 buah parameter
  • Jika parameter ada isinya/tidak kosong maka akan dijalankan perintah Replace(sText, "'", "''") untuk mengganti karakter ' menjadi ''
  • Hasil dikembalikan ke pemanggil fungsi
Untuk itu kita perlu menggnati script program even OnClick pada tombol Save menjadi sebagai berikut:

Private Sub cmdSave_Click()
Dim strSql As String
strSql = "INSERT INTO SUPLIER " & _
"(KODE_SUPLIER,NAMA_SUPLIER,ALAMAT,KOTA,NOMOR_TELEPON) " & _
"VALUES ('" & Me.KODE_SUPLIER.Value & "','" & _
SQLEncrypt(Me.NAMA_SUPLIER.Value) & "','" & Me.ALAMAT.Value & _
"','" & Me.KOTA.Value & "','" & Me.NOMOR_TELEPON.Value & "');"
CurrentProject.Connection.Execute strSql
End Sub

Contoh file dengan kode program dapat didownload di sini.
Pada contoh file aplikasi access ini ada dua buah form dengan nama Form1 dan Form2. Form1 adalah form yang tidak menggunakan fungsi SQLEncrypt() sehingga akan mengalami error jika nama suplier mengandung karakter petik tunggal, sedangkan Form2 sudah menggunakan fungsi SQLEncrypt().
Selamat mencoba.

2 comments:

Anonymous said...

Izin numpang belajar bro

Anonymous said...

mas, nanya lagi nih..
bagaimana membuat aplikasi access kita bisa diakses bersamaan dengan user lain dalam satu jaringan LAN.

saya sudah coba split database, jadi access yg berisi data berada di PC Server, sedangkan form user berada di PC masing2 user.

1)bagaimana me-lock suatu record atau suatu tabel agar tidak bentrok dg user lain.
2)bagaimana membuat link data dari aplikasi di PC user secara otomatis mereferensikan table data PC Server dengan inisial IP PC Server, misal ://192.130.4.45\Aplikasi\Basisdata.accdb


terima kasih

Budhi