Skip to main content

AccessTr.neT


In Ve Like Operatörleri

In Ve Like Operatörleri

#7
yalnız dikkatimi çekti açıklama alanı uzun metin türünde ama yanılmıyorsam liste kutuları çok uzun metinleri alamaz diyelim ki açıklama alanının uzunluğu 255ten büyük ve aradığınız sayısal alanlar 240 tan 270'e kadar ozaman 255ten sonraki verileri alamaz o durumda veriler eksik gösterilir
Bu durumda update olayı aşağıdaki gibi düzenlenebilir
Private Sub liste_AfterUpdate()
kodu = liste.Column(6)
islemadı = liste.Column(7)
'acıklama = liste.Column(8)
islem_turu = liste.Column(1)
islem_grubu = liste.Column(4)
yıldızlı_islem = liste.Column(5)
yururluk_tarihi = liste.Column(3)

Dim SQLB As String
Dim Kosulum As String
'______________________________________________

Dim AciklamaRs As DAO.Recordset
Dim AciklamaSql As String
AciklamaSql = "SELECT srg_bakanlıkkodları.ID, srg_bakanlıkkodları.TÜR, srg_bakanlıkkodları.AÇIKLAMA " & _
"FROM srg_bakanlıkkodları " & _
" where ID=" & liste.Column(0) & " and TÜR='" & liste.Value & "';"

Set AciklamaRs = CurrentDb.OpenRecordset(AciklamaSql, dbOpenDynaset)
acıklama = Nz(AciklamaRs(2))
'_____________________________________________
Kosulum = Sayim(acıklama)

SQLB = "SELECT srg_bakanlıkkodları.ID, srg_bakanlıkkodları.TÜR, srg_bakanlıkkodları.YIL, srg_bakanlıkkodları.[YÜRÜRLÜK TARİHİ] AS YÜRÜRLÜK, srg_bakanlıkkodları.GRUBU AS GRB, srg_bakanlıkkodları.YILDIZLI AS [*], srg_bakanlıkkodları.KOD, srg_bakanlıkkodları.ADI, srg_bakanlıkkodları.AÇIKLAMA, srg_bakanlıkkodları.PUAN, srg_bakanlıkkodları.FİYATI FROM srg_bakanlıkkodları " & _
"WHERE (((srg_bakanlıkkodları.TÜR)=[Formlar]![FRM_ANA]![islem_turu]) And " & Kosulum & _
"ORDER BY srg_bakanlıkkodları.YIL DESC;"

ListeFaturaEdilemez.RowSource = SQLB
ListeFaturaEdilemez.Requery

End Sub
Cevapla
#8
2. liste kutusunun sadece seçilen tablodan veri aldığını fark ettim bu durumda tüm tabloların bileşkesi olan  srg_bakanlıkkodları sorgusunu kullanmaya gerek yok sadece ilgili tabloyu kontrol etmesi çalışmanızın hızını artırır bu nedenle  liste_AfterUpdate fonksiyonunun kodunu aşağıdaki ile değiştirebilirsiniz. Ayrıca açıklama alanı boşken yada sorguda kayıt yoksa 2. liste kutusunu boşaltma kodları da eklendi
Private Sub liste_AfterUpdate()
kodu = liste.Column(6)
islemadı = liste.Column(7)
'acıklama = liste.Column(8)
islem_turu = liste.Column(1)
islem_grubu = liste.Column(4)
yıldızlı_islem = liste.Column(5)
yururluk_tarihi = liste.Column(3)
If Len(liste.Column(8) & "") = 0 Then
acıklama = liste.Column(8)
    ListeFaturaEdilemez.RowSource = ""
    ListeFaturaEdilemez.Requery
    Exit Sub
End If

Dim SQLBx, TblAdi As String
Dim Kosulum As String

  Sqltbl_kamu = "SELECT tbl_kamu.id AS ID, tbl_kamu.tür AS TÜR, yili AS YIL, " & _
                "yururluk_tarihi AS [YÜRÜRLÜK TARİHİ], '' AS GRUBU, " & _
                "'' AS YILDIZLI, kodu AS KOD, islem_adi AS ADI, " & _
                "aciklama AS AÇIKLAMA, '' AS PUAN, Format([fiyat],'Currency') AS FİYATI " & _
                "FROM tbl_kamu"

Sqltbl_sut_2b = "SELECT tbl_sut_2b.id AS ID, tbl_sut_2b.tür AS TÜR, yili AS YIL, " & _
                "yururluk_tarihi AS [YÜRÜRLÜK TARİHİ], '' AS GRUBU, " & _
                "'' AS YILDIZLI, kodu AS KOD, islem_adi AS ADI, " & _
                "aciklama AS AÇIKLAMA, islem_puani AS PUAN, Format([islem_puani]*0.593,'Currency') AS FİYATI " & _
                "FROM tbl_sut_2b"

Sqltbl_sut_2c = "SELECT tbl_sut_2c.id AS ID, tbl_sut_2c.tür AS TÜR, yili AS YIL, " & _
                "yururluk_tarihi AS [YÜRÜRLÜK TARİHİ], islem_grubu AS GRUBU, " & _
                "yildizli_islem AS YILDIZLI, kodu AS KOD, islem_adi AS ADI, " & _
                "aciklama AS AÇIKLAMA, islem_puani AS PUAN, " & _
                "Format([islem_puani]*0.593,'Currency') AS FİYATI " & _
                "FROM tbl_sut_2c"
 
Sqltbl_turist = "SELECT tbl_turist.id AS ID, tbl_turist.tür AS TÜR, yili AS YIL, " & _
                "yururluk_tarihi AS [YÜRÜRLÜK TARİHİ], '' AS GRUBU, " & _
                "'' AS YILDIZLI, kodu AS KOD, islem_adi AS ADI, " & _
                "aciklama AS AÇIKLAMA, '' AS PUAN, Format([fiyat],'Currency') AS FİYATI " & _
                "FROM tbl_turist"
       
SQLBx = Switch(islem_turu = "Kamu", Sqltbl_kamu, _
              islem_turu = "Ek-2B", Sqltbl_sut_2b, _
              islem_turu = "Ek-2C", Sqltbl_sut_2c, _
              islem_turu = "Turist", Sqltbl_turist)
             
TblAdi = Switch(islem_turu = "Kamu", "tbl_kamu", _
              islem_turu = "Ek-2B", "tbl_sut_2b", _
              islem_turu = "Ek-2C", "tbl_sut_2c", _
              islem_turu = "Turist", "tbl_turist")

'______________________________________________

Dim AciklamaRs As DAO.Recordset
Dim AciklamaSql As String
AciklamaSql = "SELECT " & TblAdi & ".id, " & TblAdi & ".aciklama " & _
"FROM " & TblAdi & _
" where " & TblAdi & ".id=" & liste.Column(0)

Set AciklamaRs = CurrentDb.OpenRecordset(AciklamaSql, dbOpenDynaset)
acıklama = Nz(AciklamaRs(1))
'_____________________________________________
Kosulum = Sayim(acıklama)
SQLBx = SQLBx & Kosulum & " ORDER BY yili DESC;"
SQLBx = IIf(Len(Kosulum & "") = 0, "", SQLBx)

ListeFaturaEdilemez.RowSource = SQLBx
ListeFaturaEdilemez.Requery

End Sub
Sayim fonksiyonun kodu:
Function Sayim(Aciklama As String) As String
Dim RegEx As Object, metin As String
Set RegEx = CreateObject("VBScript.RegExp")

RegEx.Pattern = "[a-zA-Z]{0,3}[0-9]{6}" '"[a-zA-Z]{0,3}[0-9]+"
RegEx.Global = True
RegEx.MultiLine = True
'RegEx.Execute (Aciklama)
Set eslesmeler = RegEx.Execute(Aciklama)
    KelimeSayisi = eslesmeler.Count
For Each Kelime In eslesmeler
    Kosulum = Kosulum & "','" & Kelime.Value
Next
   
If Kosulum <> "" Then Kosulum = " where ((KODU) IN (" & Mid(Kosulum, 3) & "'" & ")) " Else Kosulum = ""
    Sayim = Kosulum

End Function
Dilerim işinize yarar
iyi çalışmalar)
.rar RegEx3_hy.rar (Dosya Boyutu: 598,95 KB | İndirme Sayısı: 2)
Cevapla
#9
3 farklı yöntem kullanarak çözmeye çalıştım
RegExp, InStr ve Like karşılaştırma için hepsini aynı sayfada göstermeye çalıştım bu nedenle biraz ağır çalışabilir siz bir yöntemi seçeceğinizden  sorun çıkarmaz
her yöntem için başına yöntemin adını yazdım gereksizleri silerseniz belirgin bir hızlanma olabilir
1 - sadece RegExp için gerekli Modüldeki fonksiyon:
Function Sayim(Aciklama As String) As String
Dim RegEx As Object, metin As String
Set RegEx = CreateObject("VBScript.RegExp")

RegEx.Pattern = "[a-zA-Z]{0,3}[0-9]{6}" '"[a-zA-Z]{0,3}[0-9]+" '-->[0-9]{6} : 6 rakam ard arda,[0-9]+:en az bir rakam, [a-zA-Z]{0,3} 0 yada en fazla 3 harf
RegEx.Global = True 'Tüm değerleri bul
RegEx.MultiLine = True 'tüm satırlarda ara

Set eslesmeler = RegEx.Execute(Aciklama)
    KelimeSayisi = eslesmeler.Count
For Each Kelime In eslesmeler ' bulunana tüm değerleri döngüye sokar
    Kosulum = Kosulum & "','" & Kelime.Value
Next
   
If Kosulum <> "" Then Kosulum = Mid(Kosulum, 3) Else Kosulum = ""
    Sayim = Kosulum
End Function
2 - hem RegExp hem de diğer yöntemler için gerekli modüldeki kod bu modül sadece sorgu değerlerini saklayan sabitler modülüdür :
Global Const SqlBos As String = "SELECT '' AS ID,'' AS  TÜR, '' AS YIL, " & _
                "'' AS  [YÜRÜRLÜK TARİHİ], '' AS GRUBU, " & _
                "'' AS YILDIZLI, '' AS KOD, '' AS ADI, " & _
                "'' AS AÇIKLAMA, '' AS PUAN,'' AS FİYATI " & _
                "FROM tbl_secilenhizmetler"

Global Const Sqltbl_kamu As String = "SELECT tbl_kamu.id AS ID, tbl_kamu.tür AS TÜR, yili AS YIL, " & _
                "yururluk_tarihi AS [YÜRÜRLÜK TARİHİ], '' AS GRUBU, " & _
                "'' AS YILDIZLI, kodu AS KOD, islem_adi AS ADI, " & _
                "aciklama AS AÇIKLAMA, '' AS PUAN, Format([fiyat],'Currency') AS FİYATI " & _
                "FROM tbl_kamu"

Global Const Sqltbl_sut_2b  As String = "SELECT tbl_sut_2b.id AS ID, tbl_sut_2b.tür AS TÜR, yili AS YIL, " & _
                "yururluk_tarihi AS [YÜRÜRLÜK TARİHİ], '' AS GRUBU, " & _
                "'' AS YILDIZLI, kodu AS KOD, islem_adi AS ADI, " & _
                "aciklama AS AÇIKLAMA, islem_puani AS PUAN, Format([islem_puani]*0.593,'Currency') AS FİYATI " & _
                "FROM tbl_sut_2b"

Global Const Sqltbl_sut_2c As String = "SELECT tbl_sut_2c.id AS ID, tbl_sut_2c.tür AS TÜR, yili AS YIL, " & _
                "yururluk_tarihi AS [YÜRÜRLÜK TARİHİ], islem_grubu AS GRUBU, " & _
                "yildizli_islem AS YILDIZLI, kodu AS KOD, islem_adi AS ADI, " & _
                "aciklama AS AÇIKLAMA, islem_puani AS PUAN, " & _
                "Format([islem_puani]*0.593,'Currency') AS FİYATI " & _
                "FROM tbl_sut_2c"

Global Const Sqltbl_turist  As String = "SELECT tbl_turist.id AS ID, tbl_turist.tür AS TÜR, yili AS YIL, " & _
                "yururluk_tarihi AS [YÜRÜRLÜK TARİHİ], '' AS GRUBU, " & _
                "'' AS YILDIZLI, kodu AS KOD, islem_adi AS ADI, " & _
                "aciklama AS AÇIKLAMA, '' AS PUAN, Format([fiyat],'Currency') AS FİYATI " & _
                "FROM tbl_turist"
3 - liste kutusu güncellendiğinde kodu :
Private Sub liste_AfterUpdate()

kodu = liste.Column(6)
islemadı = liste.Column(7)
islem_turu = liste.Column(1)
islem_grubu = liste.Column(4)
yıldızlı_islem = liste.Column(5)
yururluk_tarihi = liste.Column(3)

If Len(liste.Column(8) & "") = 0 Then
acıklama = ""
' InStr Kullanarak veri alma____________________________
    FaturaEdilemezInstr.RowSource = SqlBos
    FaturaEdilemezInstr.Requery
' Like Kullanarak veri alma____________________________
    FaturaEdilemezLike.RowSource = SqlBos
    FaturaEdilemezLike.Requery
' RegExp Kullanarak veri alma___________________________
    FaturaEdilemezRegExp.RowSource = SqlBos
    FaturaEdilemezRegExp.Requery
   
Exit Sub
End If

Dim SqlInStr, SqlLike, SqlRegExp, TblAdi As String
Dim KosulumInStr, KosulumLike, KosulumRegExp As String

'metin kutusundaki değere göre çağrılacak sorgu kodu ve tablo Adı________________
SQLBx = Switch(islem_turu = "Kamu", Sqltbl_kamu, _
              islem_turu = "Ek-2B", Sqltbl_sut_2b, _
              islem_turu = "Ek-2C", Sqltbl_sut_2c, _
              islem_turu = "Turist", Sqltbl_turist)
           
TblAdi = Switch(islem_turu = "Kamu", "tbl_kamu", _
              islem_turu = "Ek-2B", "tbl_sut_2b", _
              islem_turu = "Ek-2C", "tbl_sut_2c", _
              islem_turu = "Turist", "tbl_turist")

'hy Açıklama Alanını RecordSettn Alma_______
Dim AciklamaRs As DAO.Recordset
Dim AciklamaSql As String
AciklamaSql = "SELECT " & TblAdi & ".id, " & TblAdi & ".aciklama " & _
"FROM " & TblAdi & _
" where " & TblAdi & ".id=" & liste.Column(0)

Set AciklamaRs = CurrentDb.OpenRecordset(AciklamaSql, dbOpenDynaset)
acıklama = Nz(AciklamaRs(1))

' InStr Kullanarak veri alma____________________________
KosulumInStr = " WHERE (InStr(1,'" & acıklama & "',[kodu])>0)"  'Çalıştı
SqlInStr = SQLBx & KosulumInStr & " ORDER BY yili DESC;"
FaturaEdilemezInstr.RowSource = SqlInStr
FaturaEdilemezInstr.Requery

' Like Kullanarak veri alma____________________________
KosulumLike = " WHERE (('" & acıklama & "') like '*' & [kodu] & '*')"  'Çalıştı
SqlLike = SQLBx & KosulumLike & " ORDER BY yili DESC;"
FaturaEdilemezLike.RowSource = SqlLike
FaturaEdilemezLike.Requery

' RegExp Kullanarak veri alma____________________________
KosulumRegExp = " WHERE ([KODU] IN (" & Sayim(acıklama) & "'" & ")) "
SqlRegExp = SQLBx & KosulumRegExp & " ORDER BY yili DESC;"
If Len(Sayim(acıklama) & "") = 0 Then SqlRegExp = SqlBos
FaturaEdilemezRegExp.RowSource = SqlRegExp
FaturaEdilemezRegExp.Requery

End Sub
.rar InStr_Like_RegExp_FonkTekTablo_hy8.rar (Dosya Boyutu: 599,5 KB | İndirme Sayısı: 3)
Cevapla
#10
kodların sadeleştirilmiş hali
1 - Liste Güncellendiğinde kodu:
Private Sub liste_AfterUpdate()
Dim TblAdi As String

kodu = liste.Column(6)
islemadı = liste.Column(7)
islem_turu = liste.Column(1)
islem_grubu = liste.Column(4)
yıldızlı_islem = liste.Column(5)
yururluk_tarihi = liste.Column(3)

'metin Kutusuna göre Tablo Adı seçme_______________
TblAdi = Switch(islem_turu = "Kamu", "tbl_kamu", _
              islem_turu = "Ek-2B", "tbl_sut_2b", _
              islem_turu = "Ek-2C", "tbl_sut_2c", _
              islem_turu = "Turist", "tbl_turist")
             
acıklama = Nz(DLookup("aciklama", TblAdi, "id=" & liste.Column(0))) 'açıklama alanını alma
sonuc = IIf(acıklama Like "*[0-9][0-9][0-9][0-9][0-9]*", 1, 0) ' Açıklama boşsa yada 6 haneli sayı yoksa
'yada --> sonuc = IIf(Not acıklama Like "*[0-9][0-9][0-9][0-9][0-9]*", 0, 1)
If sonuc = 0 Then

    'InStr Kullanarak veri alma____________________________
    FaturaEdilemezInstr.RowSource = SqlBos

    ' Like Kullanarak veri alma____________________________
    FaturaEdilemezLike.RowSource = SqlBos

    'RegExp Kullanarak veri alma___________________________
    FaturaEdilemezRegExp.RowSource = SqlBos
   
Exit Sub
End If

Dim SqlInStr, SqlLike, SqlRegExp As String
Dim KosulumInStr, KosulumLike, KosulumRegExp As String

'metin Kutusuna göre sorgu seçme_______________
SQLBx = Switch(islem_turu = "Kamu", Sqltbl_kamu, _
              islem_turu = "Ek-2B", Sqltbl_sut_2b, _
              islem_turu = "Ek-2C", Sqltbl_sut_2c, _
              islem_turu = "Turist", Sqltbl_turist)
           
'InStr Kullanarak veri alma____________________________
KosulumInStr = " WHERE (InStr(1,'" & acıklama & "',[kodu])>0)"  'Çalıştı
SqlInStr = SQLBx & KosulumInStr & " ORDER BY yili DESC;"
FaturaEdilemezInstr.RowSource = SqlInStr

'Like Kullanarak veri alma____________________________
KosulumLike = " WHERE (('" & acıklama & "') like '*' & [kodu] & '*')"  'Çalıştı
SqlLike = SQLBx & KosulumLike & " ORDER BY yili DESC;"
FaturaEdilemezLike.RowSource = SqlLike

'RegExp Kullanarak veri alma____________________________
xSayim = Sayim(acıklama & "")
KosulumRegExp = " WHERE ([KODU] IN (" & xSayim & "'" & ")) "
SqlRegExp = SQLBx & KosulumRegExp & " ORDER BY yili DESC;"
If Len(xSayim & "") = 0 Then SqlRegExp = SqlBos
FaturaEdilemezRegExp.RowSource = SqlRegExp

End Sub
2 - Sabitler Modülü:
Option Compare Database

Global Const SqlBos As String = "SELECT '' AS ID,'' AS  TÜR, '' AS YIL, " & _
                "'' AS  [YÜRÜRLÜK TARİHİ], '' AS GRUBU, " & _
                "'' AS YILDIZLI, '' AS KOD, '' AS ADI, " & _
                "'' AS AÇIKLAMA, '' AS PUAN,'' AS FİYATI " & _
                "FROM tbl_secilenhizmetler"

Global Const Sqltbl_kamu As String = "SELECT tbl_kamu.id AS ID, tbl_kamu.tür AS TÜR, yili AS YIL, " & _
                "yururluk_tarihi AS [YÜRÜRLÜK TARİHİ], '' AS GRUBU, " & _
                "'' AS YILDIZLI, kodu AS KOD, islem_adi AS ADI, " & _
                "aciklama AS AÇIKLAMA, '' AS PUAN, Format([fiyat],'Currency') AS FİYATI " & _
                "FROM tbl_kamu"

Global Const Sqltbl_sut_2b  As String = "SELECT tbl_sut_2b.id AS ID, tbl_sut_2b.tür AS TÜR, yili AS YIL, " & _
                "yururluk_tarihi AS [YÜRÜRLÜK TARİHİ], '' AS GRUBU, " & _
                "'' AS YILDIZLI, kodu AS KOD, islem_adi AS ADI, " & _
                "aciklama AS AÇIKLAMA, islem_puani AS PUAN, Format([islem_puani]*0.593,'Currency') AS FİYATI " & _
                "FROM tbl_sut_2b"

Global Const Sqltbl_sut_2c As String = "SELECT tbl_sut_2c.id AS ID, tbl_sut_2c.tür AS TÜR, yili AS YIL, " & _
                "yururluk_tarihi AS [YÜRÜRLÜK TARİHİ], islem_grubu AS GRUBU, " & _
                "yildizli_islem AS YILDIZLI, kodu AS KOD, islem_adi AS ADI, " & _
                "aciklama AS AÇIKLAMA, islem_puani AS PUAN, " & _
                "Format([islem_puani]*0.593,'Currency') AS FİYATI " & _
                "FROM tbl_sut_2c"

Global Const Sqltbl_turist  As String = "SELECT tbl_turist.id AS ID, tbl_turist.tür AS TÜR, yili AS YIL, " & _
                "yururluk_tarihi AS [YÜRÜRLÜK TARİHİ], '' AS GRUBU, " & _
                "'' AS YILDIZLI, kodu AS KOD, islem_adi AS ADI, " & _
                "aciklama AS AÇIKLAMA, '' AS PUAN, Format([fiyat],'Currency') AS FİYATI " & _
                "FROM tbl_turist"
3 - RegExp Modül kodu:
Option Compare Database

Function Sayim(Aciklama As String) As String
Sayim = ""
If Len(Aciklama & "") = 0 Then Exit Function 'GoTo 10
Dim RegEx As Object, metin As String
Set RegEx = CreateObject("VBScript.RegExp")

RegEx.Pattern = "[a-zA-Z]{0,3}[0-9]{6}" '"[a-zA-Z]{0,3}[0-9]+"
RegEx.Global = True
RegEx.MultiLine = True
'RegEx.Execute (Aciklama)
Set eslesmeler = RegEx.Execute(Aciklama)
    KelimeSayisi = eslesmeler.Count
For Each Kelime In eslesmeler
    Kosulum = Kosulum & "','" & Kelime.Value
Next
   
If Kosulum <> "" Then Kosulum = Mid(Kosulum, 3) Else Kosulum = ""
    Sayim = Kosulum
End Function
.rar InStr_Like_RegExp_FonkTekTablo_hy10.rar (Dosya Boyutu: 600,86 KB | İndirme Sayısı: 5)
Cevapla
#11
Sn. Berduş çok emek hqrcamışsınız ve ilginiz için teşekkür ederim. Açıklamaları sonradan uzun metin olarak değiştim. Liste nin 255 ten fazla almaması aklıma gelmemişti onu irdeleyeceğim. Şuan pc yok. Aslında meselenin özü mesela bir işlem seçiyorum açıklamasında şunlarla fatura edilemez diyor. Ben o hizmetleri altta görmek istiyorum. Kodlara gelince bütün kodlar 6 rakamsal koddan ibaret. Ancak kiminin başında S.. var kiminde SL kiminde L.. Kiminde de hiç yok. İşi karıştıranda burası. Right ile sadece numeric olanları aldım fakat bu seferde aynı numara olup S veya SL gibi farklı işlemler olduğunu gördüm. Bu çalışmanıza bakacağım pazartesi.
Cevapla
#12
Denemelerimde 10. mesajdaki kod bahsettiğiniz özelliklere sahip kayıtları gösteriyordu. Incelemelerimde Ister sadece 6 haneli sayı olsun ister başında 3 taneye kadar harf olsun sadece gerekli kayıtları  gosteriyordu liste kutusunda.
Not : lütfen sonuç ister olumlu ister olumsuz olsun muhakkak geri bildirimde bulunun.
Iyi çalışmalar.
Cevapla

Bir hesap oluşturun veya yorum yapmak için giriş yapın

Yorum yapmak için üye olmanız gerekiyor

ya da
Task