Skip to main content

AccessTr.neT


In Ve Like Operatörleri

In Ve Like Operatörleri

Çözüldü #1
Arkadaşlar sorgumun içinde In('1111','2222','3333') operatörü ile bu şekilde kodlar bölümünde filtreleme yapıyorum. Ancak bazı kodlarım AA999, AC6666 gibi. Bu şekilde olunca In('999','6666') çalışmıyor. Bunu Like mantığında olduğu gibi başında ve sonunda "*" karakteri ile veya başka bir yöntemle nasıl listeyebilirim.


ID    KOD
-------------------
1    1111
2    55555
3    AL6666
4    7777
5    CC9999


Sorgu içinde In('1111','7777','6666','55555','CC9999') bu şekilde kullandığımda AL6666 ve CC9999 gelmiyor. Bunlarıda dahil etmek istiyorum.
.rar 2020_4.rar (Dosya Boyutu: 1,4 MB | İndirme Sayısı: 2)
Son Düzenleme: 14/08/2020, 08:28, Düzenleyen: alperalper.
Cevapla
#2
Sayın @alperalper İn parantezinde sadece sabit değerler kullanılıyor, "*" veya "Like" kullanılmıyor. Ancak sabitleri in parantezine alınıp or işleci ile devam edilebilinir.

SQL Code
WHERE (((Tablo1.[kod]) In ('1111','55555', '7777','CC99999'))) or (((Tablo1.kod) Like "*6666"));

Son Düzenleme: 14/08/2020, 11:20, Düzenleyen: alicimri.
Cevapla
#3
(14/08/2020 11:19)alicimri Adlı Kullanıcıdan Alıntı: Sayın @alperalper İn parantezinde sadece sabit değerler kullanılıyor, "*" veya "Like" kullanılmıyor. Ancak sabitleri in parantezine alınıp or işleci ile devam edilebilinir.

SQL Code
WHERE (((Tablo1.[kod]) In ('1111','55555', '7777','CC99999'))) or (((Tablo1.kod) Like "*6666"));



İlgin için teşekkürler ama o yazmış olduğum bir örnek. sorgu içinde oluşan değerler değişken yani bildiğim bir değer değil. ekte bulunan örneği incelerseniz görürsünüz.
Cevapla
#4
Benim Access 2007, dosyanızı inceleyemiyorum. Formdan seçeceğiniz değerler ile Sql metni oluşturula bilinir. Dosyayı 2007 formatına dönüştürüp eklerseniz bir şeyler yapmaya çalışabilirim.
Cevapla
#5
aşağıdaki kodu dener misiniz?
sayim fonksiyonunun yapısı değişmiştir eğer bağımsız bir alanda denerseniz açıklama alanından sadece formata uygun veriyi aldığını görebilirsiniz. ama bu haliyle işinize yarar mı emin değilim
mesela açıklama kısmında Aciklama: SL100090, SL104780, SL104790, SL104800 ve SL104810 ile birlikte faturalandırılmaz yazıyorsa
sayim alanı sonuç olarak (srg_bakanlıkkodları.KOD) IN('SL100090','SL104780','SL104790','SL104800','SL104810')) verisini dönderiyor.

Visual Basic Code
Function Sayim(Aciklama As String)
Dim RegEx As Object, metin As String
Set RegEx = CreateObject("VBScript.RegExp")
 
RegEx.Pattern = "[a-zA-Z]{0,3}[0-9]+" '"[a-zA-Z]{0,3}[0-9]{6}"'aranacak format/desen : [a-zA-Z]{0,3}-->harf olmayacak yada en fazla 3 tane harf ve rakam olacak ({6} yazarsak 6 rakam olacak, ne az ne fazla tam 6
RegEx.Global = True' tüm metinde aranılacak
RegEx.MultiLine = True'çoklu satırda aranılacak

Set eslesmeler = RegEx.Execute(Aciklama)
'    sensayisi = eslesmeler.Count 'dizide kaç tane formata uygun kelime var onun sayısını verir
For Each Match In eslesmeler 'dizideki her elemanı hesaba katar
    Kosulum = Kosulum & "','" & Match.Value
Next

    If Kosulum <> "" Then
    Kosulum = "(srg_bakanlıkkodları.KOD) IN(" & Mid(Kosulum, 3) & "'" & "))"

Else
    Kosulum = vbNullString
End If
    Sayim = Kosulum

End Function


koddaki sayını kaç haneli olduğundan emin olamadım eğer kesinlikle 6 basamaklı ise
"[a-zA-Z]{0,3}[0-9]+"  yerine "[a-zA-Z]{0,3}[0-9]{6}" de yazılabilir
Son Düzenleme: 14/08/2020, 15:24, Düzenleyen: berduş.
Cevapla
#6
kodları düzeltip tekrar yükledim dilerim işinize yarar
RegEx fonksiyonuyla ilgili modüle eklediğim kodlar, isterseniz doğrudan ana forma da ekleyebilirsiniz

Visual Basic Code
Function Sayim(Aciklama As String)
Dim RegEx As Object, metin As String
Set RegEx = CreateObject("VBScript.RegExp") 'regexp nesnesini oluşturma istenirse referanslardan da eklenebilirdi
 
RegEx.Pattern = "[a-zA-Z]{0,3}[0-9]+" '"[a-zA-Z]{0,3}[0-9]{6}" 'aranacak metin kalıbı
RegEx.Global = True 'tümünde ara ilk bulduğunda durma
RegEx.MultiLine = True ' tüm satırlarda ara
'RegEx.Execute (Aciklama)
Set eslesmeler = RegEx.Execute(Aciklama)' açıklama alanında yazılanı [b]diziye(Array)[/b] dönüştürür
    Kelimesayisi = eslesmeler.Count' Bulunan kelime sayısı
For Each Match In eslesmeler'dizideki tüm elemanların arasında dolaşma
    Kosulum = Kosulum & "','" & Match.Value
Next
    
    If Kosulum <> "" Then
    Kosulum = "(srg_bakanlıkkodları.KOD) IN (" & Mid(Kosulum, 3) & "'" & ")) "

Else
    Kosulum = vbNullString
End If
    Sayim = Kosulum

End Function

liste after update olayındaki sorgu kodunda yapılan değişiklik sadece fazladan olan bir parantez silindi

SQL Code
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;"

.rar 2020_4_hy6Regxe.rar (Dosya Boyutu: 611,64 KB | İndirme Sayısı: 2)
Cevapla

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

Yorum yapmak için üye olmanız gerekiyor

ya da