15-05-2012, 18:33
(En son düzenleme: 15-05-2012, 18:52 AccessAltay2010.)
Merhabalar ,biraz uzun bir soru kusura bakmayın ;
Visual Basic
- Dim db As dao.Database
- Dim rst As dao.Recordset
- Dim sorgum As String
-
- Dim ExtStrWhere As String
-
- Call FuncStrWHERE(ExtStrWhere)
-
- 'Önce "FuncStrWHERE" fonksiyonundan bahsedeyim,
-
- 'Public Function FuncStrWHERE(StrWhere As String)
-
- StrWhere = ""
-
- If Format([Forms]![FaturaSorgula]![ComboFaturaTarihi1], "") <> "" And Format([Forms]![FaturaSorgula]![ComboFaturaTarihi2], "") <> "" Then
- StrWhere = " (FaturaSorgulalvwOnayliGirisSatirQ.FaturaTarihi Between # " & Format(Nz([Forms]![FaturaSorgula]![ComboFaturaTarihi1], #1/1/1800#), "mm dd yyyy") & " # " & _
- "AND # " & Format(Nz([Forms]![FaturaSorgula]![ComboFaturaTarihi2], #12/31/9999#), "mm dd yyyy") & " # ) "
- Else
- StrWhere = StrWhere
- End If
-
- If Format([Forms]![FaturaSorgula]![ComboIrsaliyeTarihi1], "") <> "" And Format([Forms]![FaturaSorgula]![ComboIrsaliyeTarihi2], "") <> "" Then
- If StrWhere = "" Then
- StrWhere = "(FaturaSorgulalvwOnayliGirisSatirQ.IrsaliyeTarihi Between #" & Format(Nz([Forms]![FaturaSorgula]![ComboIrsaliyeTarihi1], #1/1/1800#), "mm dd yyyy") & "# " & _
- "AND #" & Format(Nz([Forms]![FaturaSorgula]![ComboIrsaliyeTarihi2], #12/31/9999#), "mm dd yyyy") & "# ) "
- Else
- StrWhere = StrWhere & " AND (FaturaSorgulalvwOnayliGirisSatirQ.IrsaliyeTarihi Between #" & Format(Nz([Forms]![FaturaSorgula]![ComboIrsaliyeTarihi1], #1/1/1800#), "mm dd yyyy") & "# " & _
- "AND #" & Format(Nz([Forms]![FaturaSorgula]![ComboIrsaliyeTarihi2], #12/31/9999#), "mm dd yyyy") & "# ) "
- End If
- Else
- StrWhere = StrWhere
- End If
-
- If Format([Forms]![FaturaSorgula]![ComboFaturaNo], "") <> "" Then
- If StrWhere = "" Then
- StrWhere = "(FaturaSorgulalvwOnayliGirisSatirQ.FaturaNo = '" & [Forms]![FaturaSorgula]![ComboFaturaNo] & "' ) "
- Else
- StrWhere = StrWhere & " AND (FaturaSorgulalvwOnayliGirisSatirQ.FaturaNo = '" & [Forms]![FaturaSorgula]![ComboFaturaNo] & "' )"
- End If
- Else
- StrWhere = StrWhere
- End If
-
- If Format([Forms]![FaturaSorgula]![ComboIrsaliyeNo], "") <> "" Then
- If StrWhere = "" Then
- StrWhere = "(FaturaSorgulalvwOnayliGirisSatirQ.IrsaliyeNo = '" & [Forms]![FaturaSorgula]![ComboIrsaliyeNo] & "' ) "
- Else
- StrWhere = StrWhere & " AND (FaturaSorgulalvwOnayliGirisSatirQ.IrsaliyeNo = '" & [Forms]![FaturaSorgula]![ComboIrsaliyeNo] & "' ) "
- End If
- Else
- StrWhere = StrWhere
- End If
-
- '
- '
- ''olrak devam edip gidiyor.formdaki 12 combodan değişkenleri topluyor.
- '
- '
- '
- If StrWhere <> "" Then
- StrWhere = " WHERE " & StrWhere
- Else
- End If
-
- 'End Function
-
- 'Örneğin ExtStrWhere metin ifadesi fonksiyondan aşağıdaki gibi alınmış olsun;
-
- 'ExtStrWhere = " WHERE (Tablo1.FaturaNo = '846726' ) " & _
- " AND (Tablo1.IrsaliyeNo = '882788' )" & _
- " AND (Tablo1.Firma = 'SQL & ACCESS' ) " & _
- " AND (Tablo1.GirisID = 5554 )"
-
- Set db = CurrentDb()
- sorgum = "SELECT * FROM Tablo1 " & ExtStrWhere & ""
- Set rst = db.OpenRecordset(sorgum)
-
- 'VBA da oluşturduğumuz bu sorguyu , normal sorguda (Query olarak) oluşturmak mümkün mü
- 'SQL ifadesi hakkında yardımcı olabilirmisiniz?Teşekkürler.
- 'Bunun üzerinde durmamın sebebine gelince ;ExtStrWhere ifadesi bir değişken,
- 'bu değişkenler IIf veya or ve end ifadeleriyle Query de ifade edilebiliyor,ama 12 değişkenin,
- 'varyasyonları ( zira bazıları boş da olabiliyor) 1000 lerce olasılıktan oluşuyor
- 'bu olasılıklar Query de sorgulandığı zaman sorgunun açılıp son kayda gitmesi dakikalarca olabiliyor .
- 'Bunun için bu ifadeyi ( ExtStrWhere ) bir fonksiyonla almak ve sorguda direk kullanmak sureyi birkaç saniyeye düşürüyor.
- 'Bunu Query deki SQL ifadeye uyarlayamadığım için yardımınızı rica ediyorum.

