A.S.C Filtre, Grafik ve Raporlama Eklentisi

ç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: 10)



  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: 21)



  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] Ilk Ve Son Tarih Sorgusu sdurg 1 144 20-03-2021, 17:51
Son Mesaj: dsezgin
  [SORGU] 2 Tablo Arasında Güncelleme Sorgusu lemoncher2 6 324 17-01-2021, 22:33
Son Mesaj: lemoncher2
  Veritabanından Tarih Sorgusu yahyamacit 7 250 06-12-2020, 15:30
Son Mesaj: halily
  [SORGU] Ekleme Ve Silme Sorgusu blumanx 2 300 16-06-2020, 17:01
Son Mesaj: blumanx
  [VBA] Dizi Parametreli Sorgu Hatası salcasel 6 361 11-02-2020, 18:20
Son Mesaj: salcasel
access-sql-9 [SORGU] Excel Vba Access Arama Sorgusu Yavuzmumcu 1 686 01-02-2020, 14:10
Son Mesaj: userx53
  Il Ve Ilçe Sorgusu Satir 16 873 09-12-2019, 10:28
Son Mesaj: Satir
  [SORGU] Run-time Error '3340' "sorgusu Bozuk Hatası ÜmitSamlı 8 846 02-12-2019, 10:22
Son Mesaj: ÜmitSamlı

Foruma Git:


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