//honeypot demagogic

 Forum DhammaCitta. Forum Diskusi Buddhis Indonesia

Author Topic: Mohon bantuan untuk backspace  (Read 6045 times)

0 Members and 1 Guest are viewing this topic.

Offline dhammasiri

  • Sahabat
  • ***
  • Posts: 465
  • Reputasi: 44
  • Gender: Male
Mohon bantuan untuk backspace
« 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:
Code: [Select]
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
Kedamaian dunia tidak akan tercapai bila batin kita tidak damai

Offline dhammasiri

  • Sahabat
  • ***
  • Posts: 465
  • Reputasi: 44
  • Gender: Male
Re: Mohon bantuan untuk backspace
« Reply #1 on: 12 April 2010, 12:26:57 PM »
Code: [Select]
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
Kedamaian dunia tidak akan tercapai bila batin kita tidak damai

Offline Indra

  • Global Moderator
  • KalyanaMitta
  • *****
  • Posts: 14.819
  • Reputasi: 451
  • Gender: Male
Re: Mohon bantuan untuk backspace
« Reply #2 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?
« Last Edit: 12 April 2010, 08:50:31 PM by Indra »

Offline seniya

  • Global Moderator
  • KalyanaMitta
  • *****
  • Posts: 3.469
  • Reputasi: 169
  • Gender: Male
  • Om muni muni mahamuni sakyamuni svaha
Re: Mohon bantuan untuk backspace
« Reply #3 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
"Holmes once said not to allow your judgement to be biased by personal qualities, and emotional qualities are antagonistic to clear reasoning."
~ Shinichi Kudo a.k.a Conan Edogawa

Offline dhammasiri

  • Sahabat
  • ***
  • Posts: 465
  • Reputasi: 44
  • Gender: Male
Re: Mohon bantuan untuk backspace
« Reply #4 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.
Kedamaian dunia tidak akan tercapai bila batin kita tidak damai

Offline dhammasiri

  • Sahabat
  • ***
  • Posts: 465
  • Reputasi: 44
  • Gender: Male
Re: Mohon bantuan untuk backspace
« Reply #5 on: 12 April 2010, 11:20: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.
Kedamaian dunia tidak akan tercapai bila batin kita tidak damai

Offline Forte

  • Sebelumnya FoxRockman
  • KalyanaMitta
  • *****
  • Posts: 16.577
  • Reputasi: 458
  • Gender: Male
  • not mine - not me - not myself
Re: Mohon bantuan untuk backspace
« Reply #6 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

« Last Edit: 13 April 2010, 04:57:49 AM by Forte »
Ini bukan milikku, ini bukan aku, ini bukan diriku
6 kelompok 6 - Chachakka Sutta MN 148

Offline dhammasiri

  • Sahabat
  • ***
  • Posts: 465
  • Reputasi: 44
  • Gender: Male
Re: Mohon bantuan untuk backspace
« Reply #7 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
Kedamaian dunia tidak akan tercapai bila batin kita tidak damai

Offline hatRed

  • KalyanaMitta
  • *****
  • Posts: 7.400
  • Reputasi: 138
  • step at the right place to be light
Re: Mohon bantuan untuk backspace
« Reply #8 on: 13 April 2010, 09:08:13 AM »
Code: [Select]
If index = -1 andalso txtfind.text.length > 0  Then
            Dim frm As New XtraMsgVocNot
            frm.ShowDialog()

        Else
            ListBox1.SetSelected(index, True)
        End If
i'm just a mammal with troubled soul



Offline dhammasiri

  • Sahabat
  • ***
  • Posts: 465
  • Reputasi: 44
  • Gender: Male
Re: Mohon bantuan untuk backspace
« Reply #9 on: 13 April 2010, 10:03:14 AM »
Code: [Select]
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.
« Last Edit: 13 April 2010, 10:10:50 AM by dhammasiri »
Kedamaian dunia tidak akan tercapai bila batin kita tidak damai

Offline hatRed

  • KalyanaMitta
  • *****
  • Posts: 7.400
  • Reputasi: 138
  • step at the right place to be light
Re: Mohon bantuan untuk backspace
« Reply #10 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 :|
i'm just a mammal with troubled soul



Offline dhammasiri

  • Sahabat
  • ***
  • Posts: 465
  • Reputasi: 44
  • Gender: Male
Re: Mohon bantuan untuk backspace
« Reply #11 on: 13 April 2010, 10:12:21 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.
Kedamaian dunia tidak akan tercapai bila batin kita tidak damai

Offline syncmetal

  • Bukan Tamu
  • *
  • Posts: 2
  • Reputasi: 1
  • Gender: Male
  • Semoga semua mahluk berbahagia
Re: Mohon bantuan untuk backspace
« Reply #12 on: 13 April 2010, 10:29:58 AM »
Bro, boleh tau gak message errornya seperti apa.
biar letak masalahnya lebih jelas dimana.
 _/\_
Sabbe Sankhara Anicca..
Sabbe Sankhara Dukkha..
Sabbe Sankhara Anatta..

Offline dhammasiri

  • Sahabat
  • ***
  • Posts: 465
  • Reputasi: 44
  • Gender: Male
Re: Mohon bantuan untuk backspace
« Reply #13 on: 13 April 2010, 10:45:49 AM »
Bro, boleh tau gak message errornya seperti apa.
biar letak masalahnya lebih jelas dimana.
 _/\_

Saya kirim PM bro. Mohon dicek.
Kedamaian dunia tidak akan tercapai bila batin kita tidak damai

Offline dhammasiri

  • Sahabat
  • ***
  • Posts: 465
  • Reputasi: 44
  • Gender: Male
Re: Mohon bantuan untuk backspace
« Reply #14 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.
Code: [Select]
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
Kedamaian dunia tidak akan tercapai bila batin kita tidak damai

 

anything