[SORGU] Access Query de String ifade kullanabilmek mümkün mü?!
#1
Merhabalar ,biraz uzun bir soru kusura bakmayın ;

Visual Basic
  1. Dim db As dao.Database
  2. Dim rst As dao.Recordset
  3. Dim sorgum As String
  4.  
  5. Dim ExtStrWhere As String
  6.  
  7. Call FuncStrWHERE(ExtStrWhere)
  8.  
  9. 'Önce "FuncStrWHERE" fonksiyonundan bahsedeyim,
  10.  
  11. 'Public Function FuncStrWHERE(StrWhere As String)
  12.  
  13. StrWhere = ""
  14.  
  15. If Format([Forms]![FaturaSorgula]![ComboFaturaTarihi1], "") <> "" And Format([Forms]![FaturaSorgula]![ComboFaturaTarihi2], "") <> "" Then
  16. StrWhere = " (FaturaSorgulalvwOnayliGirisSatirQ.FaturaTarihi Between # " & Format(Nz([Forms]![FaturaSorgula]![ComboFaturaTarihi1], #1/1/1800#), "mm dd yyyy") & " # " & _
  17. "AND # " & Format(Nz([Forms]![FaturaSorgula]![ComboFaturaTarihi2], #12/31/9999#), "mm dd yyyy") & " # ) "
  18. Else
  19. StrWhere = StrWhere
  20. End If
  21.  
  22. If Format([Forms]![FaturaSorgula]![ComboIrsaliyeTarihi1], "") <> "" And Format([Forms]![FaturaSorgula]![ComboIrsaliyeTarihi2], "") <> "" Then
  23. If StrWhere = "" Then
  24. StrWhere = "(FaturaSorgulalvwOnayliGirisSatirQ.IrsaliyeTarihi Between #" & Format(Nz([Forms]![FaturaSorgula]![ComboIrsaliyeTarihi1], #1/1/1800#), "mm dd yyyy") & "# " & _
  25. "AND #" & Format(Nz([Forms]![FaturaSorgula]![ComboIrsaliyeTarihi2], #12/31/9999#), "mm dd yyyy") & "# ) "
  26. Else
  27. StrWhere = StrWhere & " AND (FaturaSorgulalvwOnayliGirisSatirQ.IrsaliyeTarihi Between #" & Format(Nz([Forms]![FaturaSorgula]![ComboIrsaliyeTarihi1], #1/1/1800#), "mm dd yyyy") & "# " & _
  28. "AND #" & Format(Nz([Forms]![FaturaSorgula]![ComboIrsaliyeTarihi2], #12/31/9999#), "mm dd yyyy") & "# ) "
  29. End If
  30. Else
  31. StrWhere = StrWhere
  32. End If
  33.  
  34. If Format([Forms]![FaturaSorgula]![ComboFaturaNo], "") <> "" Then
  35. If StrWhere = "" Then
  36. StrWhere = "(FaturaSorgulalvwOnayliGirisSatirQ.FaturaNo = '" & [Forms]![FaturaSorgula]![ComboFaturaNo] & "' ) "
  37. Else
  38. StrWhere = StrWhere & " AND (FaturaSorgulalvwOnayliGirisSatirQ.FaturaNo = '" & [Forms]![FaturaSorgula]![ComboFaturaNo] & "' )"
  39. End If
  40. Else
  41. StrWhere = StrWhere
  42. End If
  43.  
  44. If Format([Forms]![FaturaSorgula]![ComboIrsaliyeNo], "") <> "" Then
  45. If StrWhere = "" Then
  46. StrWhere = "(FaturaSorgulalvwOnayliGirisSatirQ.IrsaliyeNo = '" & [Forms]![FaturaSorgula]![ComboIrsaliyeNo] & "' ) "
  47. Else
  48. StrWhere = StrWhere & " AND (FaturaSorgulalvwOnayliGirisSatirQ.IrsaliyeNo = '" & [Forms]![FaturaSorgula]![ComboIrsaliyeNo] & "' ) "
  49. End If
  50. Else
  51. StrWhere = StrWhere
  52. End If
  53.  
  54. '
  55. '
  56. ''olrak devam edip gidiyor.formdaki 12 combodan değişkenleri topluyor.
  57. '
  58. '
  59. '
  60. If StrWhere <> "" Then
  61. StrWhere = " WHERE " & StrWhere
  62. Else
  63. End If
  64.  
  65. 'End Function
  66.  
  67. 'Örneğin ExtStrWhere metin ifadesi fonksiyondan aşağıdaki gibi alınmış olsun;
  68.  
  69. 'ExtStrWhere = " WHERE (Tablo1.FaturaNo = '846726' ) " & _
  70. " AND (Tablo1.IrsaliyeNo = '882788' )" & _
  71. " AND (Tablo1.Firma = 'SQL & ACCESS' ) " & _
  72. " AND (Tablo1.GirisID = 5554 )"
  73.  
  74. Set db = CurrentDb()
  75. sorgum = "SELECT * FROM Tablo1 " & ExtStrWhere & ""
  76. Set rst = db.OpenRecordset(sorgum)
  77.  
  78. 'VBA da oluşturduğumuz bu sorguyu , normal sorguda (Query olarak) oluşturmak mümkün mü
  79. 'SQL ifadesi hakkında yardımcı olabilirmisiniz?Teşekkürler.
  80. 'Bunun üzerinde durmamın sebebine gelince ;ExtStrWhere ifadesi bir değişken,
  81. 'bu değişkenler IIf veya or ve end ifadeleriyle Query de ifade edilebiliyor,ama 12 değişkenin,
  82. 'varyasyonları ( zira bazıları boş da olabiliyor) 1000 lerce olasılıktan oluşuyor
  83. 'bu olasılıklar Query de sorgulandığı zaman sorgunun açılıp son kayda gitmesi dakikalarca olabiliyor .
  84. 'Bunun için bu ifadeyi ( ExtStrWhere ) bir fonksiyonla almak ve sorguda direk kullanmak sureyi birkaç saniyeye düşürüyor.
  85. 'Bunu Query deki SQL ifadeye uyarlayamadığım için yardımınızı rica ediyorum.





  Alıntı
Bu mesajı beğenenler:
#2
Merhaba..

Bu şekilde geçici bir sorgu oluşturabilirsiniz..:

Visual Basic
  1. Dim qd As DAO.QueryDef
  2. Dim vt As DAO.Database
  3. Const GeciciSorgu As String = "AccessAltay"
  4. Set vt = CurrentDb
  5. Set qd = vt.CreateQueryDef(GeciciSorgu, ExtStrWhere )



Sorguyu silmek için de devamında bu kullanılabilir isterseniz..:

Visual Basic
  1. DoCmd.DeleteObject acQuery, GeciciSorgu





  Alıntı
Bu mesajı beğenenler:
#3
merhaba Sayın Taruz,ilginize teşekkürler.
Daha önce böyle bir çalışmam olmadığı için sormak zorundayım.Access Querylerde oluşturduğum sorguyu comboların veri kaynağında kullanıyorum bu tür geçici sorguları da comboların veri kaynağı olarak kullanmam mümkün mü yada comboların veri kaynağı için başka bir çözüm olabilir mi.Ben gritlerdeki (ListViewlerdeki) verileri Vba-SQL sorgularla alıyorum ,ama combolarda hazır access queryler kullanma alışkanlığı var ,bu konudaki fikrinizi paylaşırsanız memnun olurum.Teşekkürler.



  Alıntı
Bu mesajı beğenenler:
#4
Combo ve Listeler için sorgu oluşturmanıza gerek yok.. String ifadeyi rowsource özelliğine göndermeniz yeterli..:

Visual Basic
  1. kutu.rowsource= ExtStrWhere





  Alıntı
Bu mesajı beğenenler:
#5
Sayın Taruz , İlginiz ve herzamanki gibi sade ve net bilginiz ve paylaşımınız için çok teşekkürler.



  Alıntı
Bu mesajı beğenenler:
#6
Merhaba Sayın Taruz
Visual Basic
  1. Private Sub kutu_Enter()
  2.  
  3. Dim ExtStrWhere As String
  4.  
  5. Call FuncStrWHERE(ExtStrWhere)
  6.  
  7. Me.kutu.RowSource = ExtStrWhere
  8.  
  9. Me.Refresh
  10.  
  11. End Sub


şeklinde ComboBox un Girildiğinde Olay Yordamına bu kodu ekledim.Uygun mudur veya
String ifadeyi rowsource özelliğine göndermede öneriniz var mı,kusura bakmayın meşguliyet için ,bu kod cevap veriyor ancak daha uygun ve doğru yöntemi atlamak istemedim ,zira projemde bu sorgu tekniği onlarca yerde var tekrar tekrar düzenleme yapmak pek kolay olmuyor,teşekkürler...



  Alıntı
Bu mesajı beğenenler:


Benzer Konular...
Konu: Yazar Cevaplar: Gösterim: Son Mesaj
  [VBA] Not (uzun Metin) Alanının Access Ile özetini çıkarabilmek Mümkün Müdür? abkbek 0 305 14-10-2024, 21:58
Son Mesaj: abkbek
  [SORGU] Sorgu Ifadesi Içindeki Fonksiyon Ifade Içinde Kullanılamaz Hatası Mecnun24 7 716 27-08-2024, 16:53
Son Mesaj: Mecnun24
  Sorguda String Değeri Date Değerine çevirme. orderyazbim 4 581 22-04-2022, 12:32
Son Mesaj: halily
  Form uzerinden Resim Ve Pdf Kaydetmek Icin Ayri Ayri Klasor Olusturmak Mumkun Mu? Murat007 39 3.959 01-02-2022, 03:37
Son Mesaj: rerdem1903
  [FORM] Ifade Yanlış Yazılmış Veya çalıştırmak Için çok Karmaşık.....hatası rerdem1903 1 525 27-12-2021, 19:15
Son Mesaj: onur_can
  [FORM] Denetim Kaynağına Ifade Yazamadım. M_Kemal_Askeri 3 520 04-06-2021, 01:05
Son Mesaj: M_Kemal_Askeri
  [TABLO] Tabloda Satırlara Müdahale Mümkün Müdür? muzafferemre 2 571 01-12-2020, 15:01
Son Mesaj: muzafferemre
  Ifade Oluşturucu Alanları Alt Alta Sıralama neco_can 1 692 12-03-2020, 23:53
Son Mesaj: neco_can

Foruma Git:


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