Merhabalar Değerli Hocalarım.
Vesileniz ile öğrendiklerimi uygulayarak işlerimi pratikleştirdiğim ve tek elde toplamaya başladığım bir veritabanı oluşturuyorum. Ancak yine karşınıza boyumu aşan bir soru ile çıkmak zorunda kaldım affınıza sığınarak yine bana öğretebileceklerinize ihtiyacım var.
Ekte göndermekte olduğum örnekte bir adet tablo, bir sorgu ve bir form mevcut.
Tablodaki alanların çokluğuna bakmayın lütfen asıl çalışmamdaki tablolarımdan birtakım verileri tek tabloda soruma örnek oluşturması için birleştirdim.
Form sorgum için kriterlerin belirlendiği yer. Burada iki tarih arası sorgulamada ya da kriterlere göre sorgulamada bir sorun yaşamıyorum. Formda textbox veya combobox şeklinde kriter alanları var. Burada textboxlar -Like "*"- temelinde comboboxlar ise seçilen veri bazında sorgu kriterlerini teşkil ediyor. Yapmak istediğim ise şu:
"Bu alanların herhangi birisine kriter girilmez ise o alan ile ilgili herşeyi sorgulasın, kriter var ise o bazda sorgulama yapsın. "
Ne yaptıysam bunu beceremedim. Nasıl yapabileceğim hususunda bana yol gösterip açıklayabilecek Hocalarımdan desteklerini rica ediyorum.
Göstermiş olduğunuz sabır ve ilginize çok teşekkür eder, saygılar sunarım.
Murtaza AF
Murtaza Bey merhabalar. Azimle çalışmaya devam ediyorsunuz, tebrikler, aynen devam....
Örneğinizi inceleyemedim ancak çok acil değilse sabaha karşı veya yarın bakma şansım olabilir.
Murtaza Bey
Sorunuzun çözümü basit. Doğru ifadeler ile arama yapamadınız sanırım yoksa bunun çözümü ile ilgili yüzlerce örnek var. Kısaca şöyle ifade edeyim:
Sorgunuzda örneğin Firma alanı için kriter belirlemek üzere bir metin kutusu kullanmışsınız ve
Like "*" & [Forms]![FRM_RPT_KodIslemOldOzel]![TXT_Firma] & "*"
olarak ölçüt belirtmişsiniz. Bu sorgunuzda Firma için formunuzdaki Firma metinkutusuna yazacağınız ve benzeri değerleri sorgulayıp listeliyor. Hatanız bu alanın boş bırakılması durumunu planlalamamış olmanızdan kaynaklanıyor. Burada yapacağınız şey ölçüt alanına alanına yazdığınız değerin haricinde bu alanın boş olması durumunu değerlendirmek. Bunun için ölçüt satırının altındaki veya alanına
Like [Forms]![FRM_RPT_KodIslemOldOzel]![TXT_Firma] Is Null
ifadesini girmek. Yalnız ölçüt ifadenizdeki gibi "*"& olmadığına dikkat edin! Bu formunuzdaki alan boş ise herşeyi listelemenizi sağlar.
Çalışmaya ve öğrenmeye devam, onun için kodların düzenlenmiş hali ile örneğinizi değiştirmiyorum kendiniz deneyerek yapın takıldığınız yerde sormaktan çekinmeyin. Hepimizin birbirimizden öğreneceği ve öğretecekleri var.
İyi çalışmalar.
Merhaba, sayın @atoykan'ın cevabına ek olarak, formdan seçilen veriye göre sorguyu yenileyen örnek uygulama ektedir. İnceleyip olumlu-olumsuz bildirimde bulununuz.
@
atoykan ve @sledgeab Hocalarım çok teşekkürler ilginize.
@
atoykan hocamın söylediği şekilde uygulamaya çalıştım firma adında başarılı oldum ancak çoklu parametrede beceremedim.
@sledgeab hocam sizin yüklediğiniz örnek dosya tam istediğimi yapıyor çok teşekkür ederim ancak zahmet olmaz ise bir ricam daha olacak. Dosyanızdaki kodları tam anlayamadım ve amacım öğrenmek. Hem bana hem benim gibi düşünen arkadaşlara yol göstermesi açısından kodlarınızın mantığını işleyişini biraz açıklamanız mümkün mü? Henüz çok yeni olduğum için sorarak yorumlayarak ve deneyerek öğreniyorum. Belki çok şey istemiş oluyorum ama inanın bu siteden öğrendiklerimi katıldığım kursta öğrenemiyorum, sitemiz vasıtası ile şöyle birşey öğrendim şöyle bir tavsiye aldım dediğimde kurs hocaları ya umursamıyor ya buralara gelmenize çok uzun zaman var deyip geçiştiriyor.
Tekrar çok teşekkür ederek ricamı da kırmayacağınızı umuyorum.
Saygılarımla
Murtaza AF
If Not IsNull(Me.txt_Kalinlik) Then
strWhere = strWhere & "([KALINLIK] Like ""*" & Me.txt_Kalinlik & "*"") AND "
End If
şeklinde 8 tane if bloğu var. Üstteki kodda txt_Kalinlik metin kutusu boş değil ise strWhere değişkenine veri tanımlıyor. Yani ölçüte ([KALINLIK] Like ""*" & Me.txt_Kalinlik & "*"") AND kodu ekleniyor. Her if kodu için aralarda AND olarak ekleme yapılıyor.
lngLen = Len(strWhere) - 5
bu kod strWhere, yani sorgudaki ölçütün uzunluğunu hesaplıyor, -5 olmasının sebebi en sona eklenen " AND " şeklindeki 5 karakter harici uzunluğun hesaplanması.
If lngLen <= 0 Then kodu ile, hiç ölçüt eklenmemiş ise tüm verilerin görünebilmesi için çalışacak kodlar.
DoCmd.DeleteObject acQuery, "QRY_KIOLD_FirmaOzel"
' önceki "QRY_KIOLD_FirmaOzel" isimli sorguyu siler
strsql = "SELECT * FROM KODISLEM_old "
Set qdf = CurrentDb.CreateQueryDef("QRY_KIOLD_FirmaOzel", strsql)
' strsql değişkenine tanımlanan sorguyu "QRY_KIOLD_FirmaOzel" adında yeniden oluşturur.
DoCmd.OpenQuery qdf.Name
'oluşturulan sorguyu açar
elseden sonraki kodlar hesaplanan IngLen değeri 0'dan büyük veya 0'a eşit değil ise çalışır.
strWhere = Left$(strWhere, lngLen) ' Sorguya eklenecek ölçütü en sondaki " AND " olmadan tanımlar.
DoCmd.DeleteObject acQuery, "QRY_KIOLD_FirmaOzel"
' önceki "QRY_KIOLD_FirmaOzel" isimli sorguyu siler
strsql = "SELECT * FROM KODISLEM_old WHERE " & strWhere
Set qdf = CurrentDb.CreateQueryDef("QRY_KIOLD_FirmaOzel", strsql)
' strsql değişkenine tanımlanan sorguyu "QRY_KIOLD_FirmaOzel" adında yeniden oluşturur. Sorguda ölçüt olduğu için strWhere değerindeki ölçütü sorguya ekler.
DoCmd.OpenQuery qdf.Name
' önceki "QRY_KIOLD_FirmaOzel" isimli sorguyu siler