ya... sayang sekali.
Coba perhatikan baris ini (mumpung sempet ada jeda waktu untuk buka Excel)
RS.Open "select * from P1 WHERE P1.REF='" & REF & "'", CON, adOpenKeyset,
adLockOptimistic
Dari baris itu, permasalahan ada di query-nya, yaitu yang berbunyi :
"select * from P1 WHERE P1.REF='" & *REF *& "'"
select * :: artinya Pilih semua kolom untuk ditampilkan.
from P1 :: artinya data dari tabel bernama P1 dalam database
WHERE :: yang memenuhi suatu kondisi tertentu
P1.REF= :: kolom bernama REF di tabel P1 dalam database itu bernilai sama
dengan *suatu nilai tertentu*
"'" & *REF *& "'" :: nilai tertentu itu adalah nilai dalam variabel VBA
bernama *REF *yang berupa data teks (ada petik 1 yang mengapit nilai dari
variabel VBA bernama *REF *)
Padahal di database, yang namanya kolom REF dalam tabel P1 memiliki tipe
data Number Long Integer yang artinya hanya berisi angka dan bilangan bulat
lagi.
Terus harus dibandingkan sama dengan suatu nilai bertipe text (string)
Andai variabel VBA bernama *REF *itu berisi angka *1234*, maka query diatas
akan berbunyi :
"select * from P1 WHERE P1.REF='" & *1234 *& "'"
yang kalimat lengkap query yang dikirim ke database adalah :
select * from P1 WHERE P1.REF='*1234***'
Bahasa manusia :
"Pilih semua kolom untuk ditampilkan dari data tabel bernama P1 yang ada di
database, yang memenuhi suatu kondisi bahwa nilai angka bilangan bulat
dalam kolom REF dalam tabel P1 yang ada di database bernilai sama dengan
suatu teks berbunyi 1234"
Database sangat ketat dalam penggunaan tipe data.
Jadi, bagian yang membuat variabel VBA bernama *REF *menjadi nilai bertipe
text-lah penyebab error-nya.
Lalu bagaimana cara mengubahnya agar nilai variabel VBA bernama *REF *tidak
lagi dinyatakan sebagai suatu data teks tapi beneran sebagai nilai number ?
Bukankah hanya dengan menghilangkan tanda petik 1 (') yang mengapit
variabel VBA bernama *REF *?
agar bunyi query menjadi :
select * from P1 WHERE P1.REF=*1234*
Jadi ekspresi penyusun query :
"select * from P1 WHERE P1.REF='" & *REF *& "'"
harus diubah menjadi :
"select * from P1 WHERE P1.REF=" & *REF *
Wassalam,
Kid.
2012/12/20 Heru Safrudin <[email protected]>
> **
>
>
> Ya kalau begitu saya sok tahu banget setidaknya tentang type data, karena
> udah merasa type data di REF dan lainnya udah sama, tapi kalau ternyata
> belum sama ya mesti tanya ke siapa lagi ya.... atau Mr. punya referensi
> bacaan ttg data type ? Makasih banyak
>
> 1534,200001,'A1',#2012-01-02#,#2012-01-02#,0,150,792,19858,30,''
> nyerah deh kayaknya
>
>
>
> Pada 20 Desember 2012 08:50, Mr. Kid <[email protected]> menulis:
>
> **
>>
>>
>> Tuh kan...
>>
>> Kalau begitu, coba pahami tentang tipe data (data type) lagi. Mulai dari
>> apa itu datatype, guna, cara pilih, batasan tipe data, hubungan antar data
>> type, akibat perbedaan data type, data type dalam db (mis access aja dulu).
>>
>> Setelah itu baru tentang penyusunan query dan dampak perbedaan data type
>> dalam query.
>>
>> Inti permasalahan masih tentang data type.
>>
>> Coba cari tahi, di db kolom ref datatype nya apa. Kalau sudah dapat, cek
>> di query nya si data type itu dikenai proses terhadap data type apa. Ubah
>> agar sama datatypenya mengikuti yang di db.
>>
>> Kalau belum bersedia mendalami datatype, maka cenderung muncul error
>> query akibat datatype.
>>
>> Wassalam,
>> Kid.
>>
>
>