çok Parametreli Sql Sorgusu
#7
(02-04-2021, 00:07)halily demiş ki: aklıma gelen bir yöntem var ama henüz tam oturtamadım kafamda
siz çalışmanıza 5-10 alan için form ekleyin çalışma mantığını anlamamızı sağlayacak ona göre bir yöntem oluşturmaya çalışalım
temel olarak seçilen her checkbox için ilgili alanı ekleyecek bir sorgu tasarlamayı düşünüyorum ama belirttiğim gibi henüz tam oturtamadım

Hocam basit bir form yaptım. 10 adet alan için işaret kutucuğu koydum. Birde sorguyu form içine alt form olarak atadım.


Eklenti Dosyaları
.rar   Örnek.rar (Boyut: 2,16 MB / İndirilme: 30)



  Alıntı
Bu mesajı beğenenler:
#8
çalışmanıza checkboxları yerleştirmek için bir sekme eklendi aslında olmayabilirdi ama formdaki tüm nesneler yerine sadece gerekli olanlara kod eklensin diye ekleyip seçim kutularını ona ekledim, diğer seçim kutuları da bu sekmede olmalı
Not: checkbox adları alan adıyla aynı olmalı yoksa hata verir.

eklenen kodlar
1 - formun en başına eklenmesi gereken değişken ve sabitler
Visual Basic
  1. Dim Krtr As String
  2. Const SqlSbt As String = "SELECT * " & _
  3.                         "FROM Tablo1"


2 - form açılırken seçme kutularına olay ekleme yordamı
Visual Basic
  1. Private Sub Form_Open(Cancel As Integer)
  2. Dim ctl As Control
  3. Dim TabAdi As String
  4. TabAdi = "TabChck"
  5. For Each ctl In Controls(TabAdi)
  6.    ctl.OnClick = "=ChkClick([" & ctl.Name & "])"
  7. Next ctl
  8.  
  9. End Sub


3 -  seçme kutularının olayı
Visual Basic
  1. Public Function ChkClick(ByRef ctl As Control)
  2. EkKrt = " and ([" & ctl.Name & "] In (select [" & ctl.Name & "] from [Tablo2]))"
  3. If ctl.Value = True Then Krtr = Krtr & EkKrt Else Krtr = Replace(Krtr, EkKrt, "")
  4. 'hy__________________________________________Sorgu Güncelle
  5. SqlSon = SqlSbt
  6. If Len(Replace(Krtr, " ", "")) > 0 Then SqlSon = SqlSbt & " where " & Mid(Krtr, 5)
  7. SqlSon = SqlSon & ";"
  8.  
  9. Dim qd As QueryDef
  10. Set qd = CurrentDb.QueryDefs("Sorgu")
  11. qd.SQL = SqlSon
  12.  
  13. Me.Afrm.Form.RecordSource = ""
  14. Me.Afrm.Form.RecordSource = "Sorgu"
  15. End Function




Eklenti Dosyaları
.rar   AdnaFrm_in select_hy.rar (Boyut: 2,32 MB / İndirilme: 41)



  Alıntı
Bu mesajı beğenenler:
#9
(02-04-2021, 11:51)halily demiş ki: çalışmanıza checkboxları yerleştirmek için bir sekme eklendi aslında olmayabilirdi ama formdaki tüm nesneler yerine sadece gerekli olanlara kod eklensin diye ekleyip seçim kutularını ona ekledim, diğer seçim kutuları da bu sekmede olmalı
Not: checkbox adları alan adıyla aynı olmalı yoksa hata verir.

eklenen kodlar
1 - formun en başına eklenmesi gereken değişken ve sabitler
Visual Basic
  1. Dim Krtr As String
  2. Const SqlSbt As String = "SELECT * " & _
  3.                         "FROM Tablo1"


2 - form açılırken seçme kutularına olay ekleme yordamı
Visual Basic
  1. Private Sub Form_Open(Cancel As Integer)
  2. Dim ctl As Control
  3. Dim TabAdi As String
  4. TabAdi = "TabChck"
  5. For Each ctl In Controls(TabAdi)
  6.    ctl.OnClick = "=ChkClick([" & ctl.Name & "])"
  7. Next ctl
  8.  
  9. End Sub


3 -  seçme kutularının olayı
Visual Basic
  1. Public Function ChkClick(ByRef ctl As Control)
  2. EkKrt = " and ([" & ctl.Name & "] In (select [" & ctl.Name & "] from [Tablo2]))"
  3. If ctl.Value = True Then Krtr = Krtr & EkKrt Else Krtr = Replace(Krtr, EkKrt, "")
  4. 'hy__________________________________________Sorgu Güncelle
  5. SqlSon = SqlSbt
  6. If Len(Replace(Krtr, " ", "")) > 0 Then SqlSon = SqlSbt & " where " & Mid(Krtr, 5)
  7. SqlSon = SqlSon & ";"
  8.  
  9. Dim qd As QueryDef
  10. Set qd = CurrentDb.QueryDefs("Sorgu")
  11. qd.SQL = SqlSon
  12.  
  13. Me.Afrm.Form.RecordSource = ""
  14. Me.Afrm.Form.RecordSource = "Sorgu"
  15. End Function


Hocam çözüm yöntemi tek kelime ile harika. Performans tatminkar. Elinize sağlık.

Hocam son korkum ben daha önceden ölçüt olarak 200 alanda basit bir ölçüte (örneğin >1 den gibi) göre test yaptığımda sorgu tarafı hata veriyordu. Çok fazla ölçüt olduğu için. 90 adete kadar çıkabiliyordum en fazla. Şimdi 200 alan için deneme yapıp sizlere de yazacağım. Yani X1 den X200 e kadar tüm alanlar için.

Saygılarımla



  Alıntı
Bu mesajı beğenenler:
#10
Olur mu bilmem ama eğer benzersiz alan varsa sorgunuzu 3 sorgunun birleşimi olarak kullanılabilir belki
Emin değilim bir olasılık sadece



  Alıntı
Bu mesajı beğenenler:
#11
Alternatif olarak geçici bir kopya tablo oluşturulup her kriter eklendiğinde not in () ile geriye kalanların silinmesi sağlanabilir



  Alıntı
Bu mesajı beğenenler:
#12
(02-04-2021, 16:18)halily demiş ki: Alternatif olarak geçici bir kopya tablo oluşturulup her kriter eklendiğinde not in ()  ile geriye kalanların silinmesi sağlanabilir

Ama hocam örneğin  X1 den X100 e kadar bir sorgudan işlem yaptırdık. X101 den X200 e kadar başka bir sorgudan işlem yaptırdık. Filtre kısmından da X1, X2, X105, X200 seçtik mesela her iki sorgunun sadece kesişimini almak gerekmez mi? Kesişimi de farklı bir sorgu ile çözdük diyelim ama bu seferde filtreleme tikini kaldırdığımız alanlarda nasıl bir tepki olur onu kafamda canlandıramadım. 

Hocam önce ben yine 200 alan için gerekli uyarlamayı yapayım. Belki aldığım hatanın çözümü farklı bir şekilde hallolur. Hiç diğer atraksiyonlara gerek kalmaz.



  Alıntı
Bu mesajı beğenenler:


Benzer Konular...
Konu: Yazar Cevaplar: Gösterim: Son Mesaj
  [SORGU] Farklı Tablolarda Yer Alan Satış Bilgilerini Toplama Sorgusu Lidervet 1 127 09-11-2023, 00:54
Son Mesaj: dsezgin
  Güncelleştirme Sorgusu omergenc7 2 153 01-10-2022, 02:13
Son Mesaj: omergenc7
  [SORGU] Toplu Il Sorgusu Satir 19 553 14-08-2022, 12:14
Son Mesaj: halily
  Sql Sorgusu Nasıl Oluşturulur? Pattinstew12 3 151 02-06-2022, 17:46
Son Mesaj: beab05
  [SORGU] Iki Tablodaki Veriyi Birleştirme Sorgusu alican60 5 290 10-03-2022, 10:16
Son Mesaj: dsezgin
  Access Sorgusu çalıştırıldığında Yeni Eklemeler Yada Veriler Değişmiyor. ofbayoglu61 1 240 03-11-2021, 21:17
Son Mesaj: onur_can
  [SORGU] Azalan Stok Sorgusu cozum@msn.com 12 603 29-10-2021, 10:33
Son Mesaj: halily
  Tekrarlı çalışan Sql Sorgusu Yerine Nasıl Bir çözüm Getirilebilir adnnfrm 4 271 23-10-2021, 02:17
Son Mesaj: adnnfrm

Foruma Git:


Bu konuyu görüntüleyen kullanıcı(lar): 1 Ziyaretçi