sql sorgusu problemi

Katılım
11 Ocak 2007
Mesajlar
42
Excel Vers. ve Dili
office 2003
sql sorgusu- 4 Sütundan veri çekip dizi halinde combobox'ta alt alta listelemek

Merhabalar,

Üstesinden gelemediğim bir sorun var. Siz ustalara danışmak durumundayım.

Sorumu basite indirgeyerek açıklamaya çalışayım.



Access'te 4 adet Görüşülen Kişi sütunum var. Excel userformda da 4 adet combobox var.

Aşağıdaki komutla combobox'lara bu sütunlardaki verileri almaya çalışıyorum.

Örneğin ComboBox4'e veri almak için:

rs.Open "SELECT GorusulenKisi1,GorusulenKisi2,GorusulenKisi3,GorusulenKisi4 FROM[Tablo1]Where CariAdi = '" & ComboBox5 & "'", cn, 1, 3

With rs

.MoveLast
Satir = .RecordCount
.movefirst
End With


ComboBox4.ColumnCount = 1
ComboBox4.Column = rs.GetRows(Satir)


1. Sorun: Bu kod combobox4'e sadece GorusulenKisi1 sütununun verilerini alıyor. 4 sütundaki tüm verileri nasıl alabilirim? (ColumnCount'u 4 yapınca combobox dörtlü tablo şeklinde açılıyor, demekki sorgu sonucu dizi halinde değil tablo halinde dönüyor)

2. Sorun: 4 combobox var demiştim, atıyorum 1. combobox'da veya 1. ve 2. comboboxlarda seçtiğim verinin diğer comboboxlarda görünmemesi için nasıl bir yöntem izlemeliyim?

Şimdiden teşekkürler.
 
Son düzenleme:
Katılım
15 Haziran 2006
Mesajlar
3,704
Excel Vers. ve Dili
Excel 2003, 2007, 2010 (TR)
Merhabalar,

1. Sorun: Bu kod combobox4'e sadece GorusulenKisi1 sütununun verilerini alıyor. 4 sütundaki tüm verileri nasıl alabilirim? (ColumnCount'u 4 yapınca combobox dörtlü tablo şeklinde açılıyor, demekki sorgu sonucu dizi halinde değil tablo halinde dönüyor)
ColumnCount "1" (bir) olması durumunda; Combobox, sorgu ile elde ettiğiniz Recordset içindeki -sadece- ilk alanın (GorusulenKisi1) değerlerini gösterir.

Recordset'teki kayıt sayısının -atıyorum- 100 olduğu durumlarda 100x4 (satırxsütun) lük bir matris tahayyül edin. Böylece ComboBox'ın ColumnCount'unu "1" kabul edersek, verinin 100x1'lik kısmını görebilirsiniz. 2 olduğu durumda 2x100'lük kısmı gösterilir. Velhasılı böyle gider.

Aslında, sorunuzun içinde cevabı da bulmuşsunuz gibi geldi bana ...

Evet sorgu sonucu oluşan RecordSet; tablo halinde (çok boyutlu) geliyor diyebiliriz. Burada nerde takıldığınız anlayamadım. ComboBox'ta sütunlar halinde görünmesini istemiyor musunuz yani?

2. Sorun: 4 combobox var demiştim, atıyorum 1. combobox'da veya 1. ve 2. comboboxlarda seçtiğim verinin diğer comboboxlarda görünmemesi için nasıl bir yöntem izlemeliyim?
Burada benim aklıma gelen yöntem şu şekilde.

1. ComboBoxların herbirine veri yüklerken, recordset harici boş bir veri de ilave edin. Bu size geri dönüş için lazım olacaktır.

2. ComboBox'ların change olaylarını kodlayın. Birinci ComboBox'ta seçilen elemanı diğer üç ComboBox'tan silin. Bu durumda ComboBox'ların ilk yükleme değerlerini elde edebilmek için, ilerde sorguları yeniden çalıştırmak zorunda kalacaksınız. Bu durum, çalışma esnasında bir miktar yavaşlamayı da beraberinde getirecektir ama DB'deki verinin büyüklüğü burada belirleyici olacaktır.

veya sorguları bir defa çalıştırıp Comboların hepsini bir defa doldurursunuz. Birinci Combo'da seçileni, diğer combolarda görür ama bir uyarı verdirerek seçtirmezsiniz. Bu daha hızlı olur. Yine de Combo'ların Change olaylarını kodlamanız gerekir.



.
 
Katılım
11 Ocak 2007
Mesajlar
42
Excel Vers. ve Dili
office 2003
Ferhat Bey teşekkür ederim. 2. soruma verdiğiniz cevabı anladım gibi, yarın işyerinde deneyeceğim. İlk sorumu tekrar açıklayayım:

Combobox'ı seçtiğimde bu 4 sütundaki verileri tablo halinde değilde alt alta dizili şekilde görmek istiyorum ve ister 1. ister 3. sütundaki bir veriyi seçebilmeliyim.

Umarım açıklayabilmişimdir.
 
Katılım
15 Haziran 2006
Mesajlar
3,704
Excel Vers. ve Dili
Excel 2003, 2007, 2010 (TR)
Bunun için aklıma iki yöntem geliyor. Ama çalışma hızları konusunda bir ayrım yapamam.

1) "AddItem" yöntemi ile, Recordset'in tüm değerlerini teker teker okutur ve Combo'ya tek tek eklersiniz.

2) 4 x kayıtsayısı (RecordCount) içeriği sahip Recorset'teki tüm değerleri okutup 1 x (kayıtsayısı x 4) tek tek diziye alırsınız. Bu diziyi Combo'da gösterirsiniz. Bu dizi, dinamik bir dizi de olabilir ("Redim" ve "Preserve" kullanımını inceleyiniz)

Not : 2.Yöntemde, kayıtları bir diziye aktarabileceğiniz gibi, Collection veya başka bir ADO Recordset nesnesine de aktarabilirsiniz. Bu alternatiflerin hepsi, elinizdeki recordset'i, sadece tek boyutlu bir veri kümesine dönüştürme işlemidir.

Not-2 : Mükerrerlik kontrolü (veya benzersiz liste çabanız) var ise, Collection nesnesini kullanmanızı tavsiye ederim.


.
 
Katılım
11 Ocak 2007
Mesajlar
42
Excel Vers. ve Dili
office 2003
Teşekkürler Ferhat Bey,

Bahsettiğiniz yöntemleri hiç bilmiyorum malesef. Araştırayım biraz.
 
Üst