Skip to main content

AccessTr.neT


Tablodaki Satırlardaki Karakter Adedi Bulma

Tablodaki Satırlardaki Karakter Adedi Bulma

Çözüldü #1
Merhaba,resimde işaretlediğim yerde en çok virgül var yani 8 adet.Benim sorum şu tablodaki hangi satırda enfazla varsa onun adedi versin sonuç olarak 8 çıkacak çünkü 8 tane virgül var.Başka satırda 10 adet olsaydı 10 olacaktı sonuç.

Amacım sorguda virgülleri ayırmak.Daha sonra birleştirme işlemine el atacağım.
Adet bulma döngüsüz olması gerekmektedir.Garip bir soru lakin belki vardır bir hal çaresi.

Private Sub Komut0_Click() örnek olsun diye bu şekilde yaptım adet bulunursa döngüye sokacağım.


[Resim: do.php?img=9968]


Visual Basic Code
Private Sub Komut0_Click()
    
    Dim sql As String
    
    sql = "SELECT Alan1, SplitVeriBul([Alan1],0) AS [Ayir 1]," & _
                        "SplitVeriBul([Alan1],1) AS [Ayir 2]," & _
                        "SplitVeriBul([Alan1],2) AS [Ayir 3]," & _
                        "SplitVeriBul([Alan1],3) AS [Ayir 4]," & _
                        "SplitVeriBul([Alan1],4) AS [Ayir 5] FROM Tablo1;"

    CurrentDb.QueryDefs("Sorgu1").sql = sql
    DoCmd.OpenQuery "Sorgu1"
    
End Sub

Visual Basic Code
Public Function SplitVeriBul(GVeri As String, GSayi, Optional Ayrac As String = ",") As Variant
    On Error Resume Next
    Dim var As Variant
    Dim GAyrac As String
    GAyrac = Ayrac
    var = Split(GVeri, GAyrac)
    SplitVeriBul = var(GSayi)

End Function
.rar sorguda split ve function kullanimi SQL.rar (Dosya Boyutu: 62,48 KB | İndirme Sayısı: 4)
Son Düzenleme: 28/03/2020, 23:43, Düzenleyen: feraz.
Cevapla
#2
Dosyanızı indirip inceleyemedim  o nedenle soruyorum Gsayi neyi temsil ediyor? Neden 5 tane?
Cevapla
#3
Ben olsam satırdaki virgül haricinde ki tüm karakterleri siler sonra satırın uzunluğunu sayarım geriye virgüller kalır o da 8 sonucunu verir
Son Düzenleme: 28/03/2020, 18:10, Düzenleyen: accessman.
Cevapla
#4
Gsayi functionda var.Oraya mesela 0 yazılırsa ilk virgülden önceki veri için.Yani split olayı.

Kodu aldışım konuda zaten sizde mesaj yazmışınız.Ben komut0click içindekileri yapmaya çalıştım.
Yanini split("xx",",")(0)  burdaki sıfır gibi düşünebilirsiniz Gsayiyi

Accessman hocamızın dosyasında upraşırken merak salmıştım bu olaya.

(28/03/2020 18:09)accessman Adlı Kullanıcıdan Alıntı: Ben olsam satırdaki virgül haricinde ki tüm karakterleri siler sonra satırın uzunluğunu sayarım geriye virgüller kalır o da 8 sonucunu verir
Nasıl yapacaksınız peki bunu?

Asıl amacım tablo Alan1 dekileri bir alanda alt alta eklemek.

A,bc
Aa

Gibiyse 
Sonuç alttaki gibi olacak sorgu1 sorgusunda

A
bc
Aa
Son Düzenleme: 28/03/2020, 18:18, Düzenleyen: feraz.
Cevapla
#5
Eğer amacınızı yanlış anlamadıysam fonksiyonu değiştirmelisiniz
maksimum değeri bulmak için geri dönen değer ineteger olmalı ve GSayi silinmeli
Visual Basic Code
Public Function SplitVeriBul(GVeri As String, Optional Ayrac As String = ",") As integer
    On Error Resume Next
    Dim var As Variant
    Dim GAyrac As String
    GAyrac = Ayrac
    var = Split(GVeri, GAyrac)
    SplitVeriBul = ubound(var()) + 1
End Function
Bu fonksiyonla ile alanın kac parca olduğu bulunabilir
Sql kodu da bu alanın Max olduğu değer olmali
Cevapla
#6
Kodların tamamı nasıl olacak.Çünkü yapamadım.
Cevapla

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

Yorum yapmak için üye olmanız gerekiyor

ya da