• 25-04-2014, 15:45:05
    #1
    Arkadaşlar comboBox'tan veritabanında bulunan kategori sütununu çektim. Yapmak istediğim combobox tan seçtiğim kategorinin alt kategorilerini listbox ta göstermek. Fakat bir türlü beceremedim..

    Dahada açmak gerekirse

    Combobox'tan A KATEGORİSİ'ni işaretleyip GİT butonuna tıklayınca A KATEGORİSİNİN ALT KATEGORİLERİNİ veritabanından çekip bana göstermesini istiyorum..

    İnternetten söyle bir kod buldum

      Dim baglanti As New OleDb.OleDbConnection("Provider = Microsoft.Jet.OLEDB.4.0; Data Source = Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\bt002\Documents\Visual Studio 2010\Projects\WindowsApplication2\urunler.accdb")
            Dim yonetici As New OleDb.OleDbCommand
            Dim okuyucu As OleDb.OleDbDataReader
            yonetici.Connection = baglanti
            yonetici.CommandText = "SELECT * FROM urunler WHERE (urun_pdf='" + ListBox1.SelectedItem + "' )"
            baglanti.Open()
            okuyucu = yonetici.ExecuteReader
            While okuyucu.Read
                urun_id.Text = okuyucu(0)
                urun_ad.Text = okuyucu(1)
                urun_kategori.Text = okuyucu(2)
                urun_pdf.Text = okuyucu(3)
            End While
            baglanti.Close()
            yonetici.Dispose()
            okuyucu.Close()
    fakat urun_id.text=okuyucu (0) alanının hepsinde hata almaktayım. Hata koduda

    'urun_id' is not declared. It may be inaccessible due to its protection level.
    'urun_ad' is not declared. It may be inaccessible due to its protection level.
  • 25-04-2014, 17:02:21
    #2
    Senin kodları incelemedim.
    try
                {
                   
                    baglan.Open();
                    komut.Connection = baglan;
                    komut.CommandText = "SELECT * FROM ilce WHERE ilce_id=" + cbil.SelectedIndex;
                    oku = komut.ExecuteReader();
                    ilce.Items.Clear();
                    while (oku.Read())
                    {
                         listBox1.Items.Add(oku[1]);
                         
                    }
                    baglan.Close();
                   
                   
                }
                catch (Exception ex)
                {
    
                    MessageBox.Show(ex.Message);
                }
  • 25-04-2014, 17:44:33
    #3
    kopyala yapıştır yaparsan öyle olur orada bir text kutusu var urun_id ve urun_ad isminde ama sende yok, bu sebepten hata veriyor. zaten adamın yazdığı kod da sakat..

    sorgun v.s. doğruysa bir tane listbox oluştur ismi ListBox2 olsun. kodunu şu şekilde yaparsan çalışması lazım. Ama sorgun ve veritabanı konumu v.s. hep doğru olması gerekiyor. Internetten bulduğun kod ile senin veritabanının yapısı aynı mı bu önemli..


      Dim baglanti As New OleDb.OleDbConnection("Provider = Microsoft.Jet.OLEDB.4.0; Data Source = Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\bt002\Documents\Visual Studio 2010\Projects\WindowsApplication2\urunler.accdb")
            Dim yonetici As New OleDb.OleDbCommand
            Dim okuyucu As OleDb.OleDbDataReader
            yonetici.Connection = baglanti
            yonetici.CommandText = "SELECT * FROM urunler WHERE (urun_pdf='" + ListBox1.SelectedItem + "' )"
            baglanti.Open()
            okuyucu = yonetici.ExecuteReader
            While okuyucu.Read
                ListBox2.Items.Add(okuyucu(1))
            End While
            baglanti.Close()
            yonetici.Dispose()
            okuyucu.Close()
  • 26-04-2014, 08:12:45
    #4
    ertan2002 adlı üyeden alıntı: mesajı görüntüle
    kopyala yapıştır yaparsan öyle olur orada bir text kutusu var urun_id ve urun_ad isminde ama sende yok, bu sebepten hata veriyor. zaten adamın yazdığı kod da sakat..

    sorgun v.s. doğruysa bir tane listbox oluştur ismi ListBox2 olsun. kodunu şu şekilde yaparsan çalışması lazım. Ama sorgun ve veritabanı konumu v.s. hep doğru olması gerekiyor. Internetten bulduğun kod ile senin veritabanının yapısı aynı mı bu önemli..


      Dim baglanti As New OleDb.OleDbConnection("Provider = Microsoft.Jet.OLEDB.4.0; Data Source = Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\bt002\Documents\Visual Studio 2010\Projects\WindowsApplication2\urunler.accdb")
            Dim yonetici As New OleDb.OleDbCommand
            Dim okuyucu As OleDb.OleDbDataReader
            yonetici.Connection = baglanti
            yonetici.CommandText = "SELECT * FROM urunler WHERE (urun_pdf='" + ListBox1.SelectedItem + "' )"
            baglanti.Open()
            okuyucu = yonetici.ExecuteReader
            While okuyucu.Read
                ListBox2.Items.Add(okuyucu(1))
            End While
            baglanti.Close()
            yonetici.Dispose()
            okuyucu.Close()
    Şöyle bir hata almaktayım..

    Operator '+' is not defined for string "SELECT * FROM urunler WHERE (uru" and type 'DataRowView'.
    Size form ve veritabanı fotolarını gönderiyorum hocam birdaha incelerseniz memnun olurum.



  • 26-04-2014, 10:48:10
    #5
    + yerine & işaretini kullan stringleri bağlamak için
  • 26-04-2014, 11:31:53
    #6
    ertan2002 adlı üyeden alıntı: mesajı görüntüle
    + yerine & işaretini kullan stringleri bağlamak için
    Sanırım düzeldi o tarafı geçti çünkü fakat şimdide baglanti open da başka bir hata almaktayım..

    Tanınmayan veritabanı biçimi 'G:\Kartal Dosyalar\program\WindowsApplication2\urunler.accdb'.
  • 26-04-2014, 12:26:10
    #7
    provider ı çok yanlış yazmışsın hocam

    Dim baglanti As New OleDb.OleDbConnection("Provider=Microsoft.ACE.OLED B.12.0; Data Source=C:\Users\bt002\Documents\Visual Studio 2010\Projects\WindowsApplication2\urunler.accdb; Persist Security Info=False;")


    bunu dene bakalım
  • 26-04-2014, 12:29:53
    #8
    ertan2002 adlı üyeden alıntı: mesajı görüntüle
    provider ı çok yanlış yazmışsın hocam

    Dim baglanti As New OleDb.OleDbConnection("Provider=Microsoft.ACE.OLED B.12.0; Data Source=C:\Users\bt002\Documents\Visual Studio 2010\Projects\WindowsApplication2\urunler.accdb; Persist Security Info=False;")


    bunu dene bakalım
    hocam db nın yolu pc degıstırdıgımden dolayı değişti. bu yuzden bende oradan degıstırdım. hdd den projeyı calıstırıyorum suanda. bu arada cok saol yardmcı oluyorsun
  • 26-04-2014, 13:32:12
    #9
    veritabanını exenin yanına kopyala hocam. bin->debug klasörü içinde olması lazım.
    sonra yukarıdaki kodu

    şöyle değiştir


    Dim baglanti As New OleDb.OleDbConnection("Provider=Microsoft.ACE.OLED B.12.0; Data Source=" & Application.StartupPath & "\urunler.accdb; Persist Security Info=False;")


    Application.StartupPath kodu exenin bulunduğu konumu veriyor. veritabanı da exenin yanında ise böyle uzun uzun yazmaya gerek yok.çünkü her bilgisayarda konum farklı olabilir. O yüzden bu tarz dinamik bir şey kullanmak gerek.