Forum Dhammacitta

Komunitas => Ilmu Pengetahuan dan Teknologi => Teknologi Informasi => Topic started by: dhammasiri on 12 April 2010, 12:08:45 PM

Title: Mohon bantuan untuk backspace
Post by: dhammasiri on 12 April 2010, 12:08:45 PM
Teman-teman,
Digital Universal Buddhist Dictionary yang saya design sudah mendekati tahap akhir tetapi saya mendapatkan masalah baru setelah masalah slow loading di listbox terselesaikan. Masalah yang saya hadapi adalah kalau saya ingin mendelet huruf terakhir dalam seacrhbox, messegebox selalu muncul. Saya sudah mutar-mutar mencari solusi lewat Mbah Google tetapi tidak ketemu. Saya melihat caranya adalah dengan keypress event handler tetapi tidak ada yang cocok. Saya berharap teman-teman ada yang bisa membantu.
Berikut ini ada kodenya:
Private Sub txtfind_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtfind.TextChanged
        Dim combo As String = ComboBox1.SelectedItem
        Dim find As String = txtfind.Text
        sql = "SELECT * FROM Entry WHERE Entrylists LIKE '" + CStr(find) + "%' and DictLists LIKE '" + CStr(combo) + "%'"
        Call listLoad()
        If txtfind.TextLength = -1 Then
            txtfind.Focus()
        End If
        Dim curItem As String = txtfind.Text.ToString()
        Dim index As Integer = ListBox1.FindString(curItem)
        ' If the item was not found in ListBox 2 display a message box, otherwise select it in ListBox2.
        If index = -1 Then
            Dim frm As New XtraMsgVocNot
            frm.ShowDialog()

        Else
            ListBox1.SetSelected(index, True)
        End If

    End Sub
Title: Re: Mohon bantuan untuk backspace
Post by: dhammasiri on 12 April 2010, 12:26:57 PM
Private Sub txtfind_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtfind.TextChanged
        Dim combo As String = ComboBox1.SelectedItem
        Dim find As String = txtfind.Text
        sql = "SELECT * FROM Entry WHERE Entrylists LIKE '" + CStr(find) + "%' and DictLists LIKE '" + CStr(combo) + "%'"
        Call listLoad()
     
        Dim curItem As String = txtfind.Text.ToString()
        Dim index As Integer = ListBox1.FindString(curItem)
        ' If the item was not found in ListBox 2 display a message box, otherwise select it in ListBox2.
        If index = -1 Then
            Dim frm As New XtraMsgVocNot
            frm.ShowDialog()

        Else
            ListBox1.SetSelected(index, True)
        End If

    End Sub

Yang saya bold seharusnya tidak diikutkan karena itu adalah percobaan.
If txtfind.TextLength = -1 Then
            txtfind.Focus()
        End If
Title: Re: Mohon bantuan untuk backspace
Post by: Indra on 12 April 2010, 08:47:14 PM
apakah memang perlu melakukan pencarian pada setiap kali TextChanged? apakah tidak lebih baik pencarian dilakukan pada saat OnPressEnter atau Button.OnClick saja?
Title: Re: Mohon bantuan untuk backspace
Post by: seniya on 12 April 2010, 11:01:14 PM
Sepertinya masalahnya terletak di query sql-nya: "select * from tb where kondisi like '%str%'". Jika str = '' (blank/kosong) atau length(str) = 0,maka hasil query-nya akan blank (kalau tidak error) karena like '%%' itu tidak bisa dijalankan (sintaks salah).

Mungkin lebih baik dibuat:
If str = blank maka sql = "select * from tb" (ambil semua data)
Else
sql = "select * from tb where kondisi like '%str%'"
Setelah itu baru dilakukan eksekusi query utk pencarian data.

Maaf,cuma pakai psedocode,gak pakai sintaks vb.net karena basic saya bukan di vb.net.

Semoga bisa membantu
Title: Re: Mohon bantuan untuk backspace
Post by: dhammasiri on 12 April 2010, 11:15:17 PM
Saya melihat cara ini lebih cepat dalam pencarian. Kalau menggunakan OnPressEnter atau Button.OnClick kita harus klik button lebih dahulu atau press enter. Tetapi dengan cara yang ada di atas, begitu kita mengetik suatu huruf, apabila huruf itu ada di dalam database, huruf itu akan langsung ditampilkan di lixbox. Ini semacam autocomplate listbox begitu atau tidak tahu apa teknical termnya.
Title: Re: Mohon bantuan untuk backspace
Post by: dhammasiri on 12 April 2010, 11:20:14 PM
Quote from: seniya on 12 April 2010, 11:01:14 PM
Sepertinya masalahnya terletak di query sql-nya: "select * from tb where kondisi like '%str%'". Jika str = '' (blank/kosong) atau length(str) = 0,maka hasil query-nya akan blank (kalau tidak error) karena like '%%' itu tidak bisa dijalankan (sintaks salah).

Mungkin lebih baik dibuat:
If str = blank maka sql = "select * from tb" (ambil semua data)
Else
sql = "select * from tb where kondisi like '%str%'"
Setelah itu baru dilakukan eksekusi query utk pencarian data.

Maaf,cuma pakai psedocode,gak pakai sintaks vb.net karena basic saya bukan di vb.net.

Semoga bisa membantu
Cara yang saya bold akan menimbulkan slow loading di listbox karena entrynya cukup bayak.
Title: Re: Mohon bantuan untuk backspace
Post by: FZ on 13 April 2010, 04:46:50 AM
IMO.. ada beberapa metoda
jika ngotot tetep mo pake codingan di atas, maka kenapa gak coba pake try catch error ?
kalau gw seh prefer ubah method sql, bukan pake "%"+..+"%" tapi pake metoda preparation

ini cara di foxpro, pake method preparation.. di VB.NET ada juga.. coba cari buku2 VB.. (yang inggris aja) gw pernah baca.. ada koq penggunaan method preparation.. kalau gak salah pake  [at]

Code (visual foxpro) Select

* Product
IF LOWER(GETWORDNUM(mjudul,1,"/"))="product"
TEXT TO sqlcmd TEXTMERGE NOSHOW PRETEXT 3
SELECT kode_barang,kode_barcode,nama_barang,product.merk_barang,merk.nama_merk,merk.merk_departemen,departemen.nama_departemen,
satuan_kecil,harga_jual_kecil,satuan_medium,ekivalensi_medium,harga_jual_medium,satuan_besar,ekivalensi_besar,harga_jual_besar,
stok_min,stok_max,product.tanggal,product.author,product.jam,product.status from product
left join merk on product.merk_barang = merk.kode_merk left join departemen on merk.merk_departemen=departemen.kode_departemen
where <<nilcbo>> like ?niltxt order by kode_barang asc
ENDTEXT
ENDIF

IF !EMPTY(sqlcmd)
sqlopen(sqlcmd,this.tabelgrid," ")
ENDIF

Title: Re: Mohon bantuan untuk backspace
Post by: dhammasiri on 13 April 2010, 09:06:46 AM
 [at]  Forte: Apakah yang dimaksud adalah store procedure? Kalau yang dimaksud adalah store procedure, sqlite tidak mendukung store procedure.
Maaf nih, jujur saja saya tidak banyak mengerti istilah-istilah teknik. Saya hanya tabrak sana, tabrak sini dan jadi hahaha
Title: Re: Mohon bantuan untuk backspace
Post by: hatRed on 13 April 2010, 09:08:13 AM

If index = -1 andalso txtfind.text.length > 0  Then
            Dim frm As New XtraMsgVocNot
            frm.ShowDialog()

        Else
            ListBox1.SetSelected(index, True)
        End If
Title: Re: Mohon bantuan untuk backspace
Post by: dhammasiri on 13 April 2010, 10:03:14 AM
Quote from: hatRed on 13 April 2010, 09:08:13 AM

If index = -1 andalso txtfind.text.length > 0  Then
            Dim frm As New XtraMsgVocNot
            frm.ShowDialog()

        Else
            ListBox1.SetSelected(index, True)
        End If

Metode ini sudah hampir bisa menghindari pemanggilan msgbox tetapi masih memanggil listload [Call listLoad()]. Bagaimana caranya biar listboxnya juga tidak terpanggil? Maunya saya, kalau  txtfind.text.length > 0 then do nothing. Tetapi saya sulit menemukan kodenya.
Sorry ya saya selalu merepoti.
Title: Re: Mohon bantuan untuk backspace
Post by: hatRed on 13 April 2010, 10:09:43 AM
Quote
Dim find As String = txtfind.Text
        sql = "SELECT * FROM Entry WHERE Entrylists LIKE '" + CStr(find) + "%' and DictLists LIKE '" + CStr(combo) + "%'"
        if txtfind.text.length > 0 then Call listLoad()
       
If txtfind.TextLength = -1 Then
            txtfind.Focus()
        End If



itu yg diitalic buat apa yah ???

mank bisa yah panjang text sampe minus :|
Title: Re: Mohon bantuan untuk backspace
Post by: dhammasiri on 13 April 2010, 10:12:21 AM
Quote from: hatRed on 13 April 2010, 10:09:43 AM
Quote
Dim find As String = txtfind.Text
        sql = "SELECT * FROM Entry WHERE Entrylists LIKE '" + CStr(find) + "%' and DictLists LIKE '" + CStr(combo) + "%'"
        if txtfind.text.length > 0 then Call listLoad()
       
If txtfind.TextLength = -1 Then
            txtfind.Focus()
        End If



itu yg diitalic buat apa yah ???

mank bisa yah panjang text sampe minus :|
Sorry, kan saya selalu melakukan percobaan. so, saya pikir dengan cara itu akan dapat teratasi, tetapi nyatanya tidak.
Title: Re: Mohon bantuan untuk backspace
Post by: syncmetal on 13 April 2010, 10:29:58 AM
Bro, boleh tau gak message errornya seperti apa.
biar letak masalahnya lebih jelas dimana.
_/\_
Title: Re: Mohon bantuan untuk backspace
Post by: dhammasiri on 13 April 2010, 10:45:49 AM
Quote from: syncmetal on 13 April 2010, 10:29:58 AM
Bro, boleh tau gak message errornya seperti apa.
biar letak masalahnya lebih jelas dimana.
_/\_

Saya kirim PM bro. Mohon dicek.
Title: Re: Mohon bantuan untuk backspace
Post by: dhammasiri on 13 April 2010, 12:03:50 PM
Sudah dibantu oleh bro syncmetal. Berikut adalah solusinya. Sorry bro ga bisa kirim pm krn pm bro lagi penuh. Sekali lagi a lot of thanks. Saya akan publish kamusnya segera setelah selesai.
Private Sub txtfind_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtfind.TextChanged
Dim combo As String = ComboBox1.SelectedItem
   if textbox1.text<>"" then
        Dim find As String = txtfind.Text
        sql = "SELECT * FROM Entry WHERE Entrylists LIKE '" + CStr(find) + "%' and DictLists LIKE '" + CStr(combo) + "%'"
       
        Call listLoad()
        If txtfind.TextLength = -1 Then
            txtfind.Focus()
        End If
        Dim curItem As String = txtfind.Text.ToString()
        Dim index As Integer = ListBox1.FindString(curItem)
        ' If the item was not found in ListBox 2 display a message box, otherwise select it in ListBox2.
        If index = -1 Then
            Dim frm As New XtraMsgVocNot
            frm.ShowDialog()

        Else
            ListBox1.SetSelected(index, True)
        End If
   else
        listbox1.items.clear()
   end if
end sub
Title: Re: Mohon bantuan untuk backspace
Post by: syncmetal on 13 April 2010, 12:14:35 PM
hehe... iya baru nyadar klo messagenya penuh.  :o
ok bro sama2.  ;D

programnya keren.  8)