Favorilerine Ekle | Giriş Sayfan Yap | Tavsiye Et

 

Kurs Tanıtım Sayfası | Süper Üye Kimdir? | Menü Tasarımı Konulu Örnek Ders
Kod İndir| Hazır Kodlar | Makaleler| İpuçları | VB .NET Kursu | Dersler | Forum | Alt Bölümler | Servisler
    Merhaba Misafir
    anasayfa » visual basic makaleleri » Instr Fonksiyonu
Üye Girişi
Kullanıcı Adı:  
Şifre : 
Kaydet ?
Siteden tam olarak faydalanabilmek için üye olmalısınız.
Unuttuğunuz şifrenizi öğrenebilmek için kayıt sırasında verdiğiniz Hatırlatma Cevabı'nı bilmeniz gereklidir.
Şifre hatırlatma işlevini sadece 3 defa kullanma hakkınız vardır.
Kullanıcı adını ve şifresini unutan üyelere email ile yardım verilmez.

Aktivasyon Gelmedi mi?Aktivasyon mesajınız email adresinize gelmedi mi?
Buraya tıklayarak bir kez daha aktivasyon mesajı gönderilmesini sağlayabilirsiniz.
Lütfen email hesabınızın BULK ve SPAM klasörlerini de kontrol ediniz.
Rastgele Makale

splıt fonksiyonu

Yazar: ozdas

Webmasterlar
Sitenize Ekleyin!
Sitenizde "Son Eklenen 10 Visual Basic Yazısı"'nı göstermek ve içeriğini zenginleştirmek için buraya tıklayınız.

Vbasicmaster.com'a link verin!
Aşağıdaki minik banneri sitenize eklemek için tıklayın!

Üye Sayısı:
Ziyaretçiler nerede?
Yayın № : 24
Yayın Tar:20.02.2002
Yazar : Webmaster
Hit :18738

Bu Yazarın Yazıları Sadece bu yazarın  göster
Bu Yazıyı Tavsiye Et

Sizlere "bir text dizini içinden birden fazla sözcüğü seçme" işlemini anlatayım. Öncelikle şunu bilelim: "Bir kişinin birden fazla adı olabilir" Ali Osman Taşçı vs gibi. Tek adı olan kişi için adı ve soyadı ayırmak daha kolay. Gerçi her iki iş için de tek bir VB fonksiyonu kullanılıyor : INSTR( )
Bu fonksiyon bir text dizini içinde belli bir karakter(leri) aramak ve yerini (sıra numarası olarak) belirlemek için kullanılır. Yani fonksiyon bir sayı verir, bu sayı da aradığın karakter(ler) in başlangıç sırasıdır. Beraber yazılmış bir ad+soyadı ayırmak için "boşluk" karakterini kullandım: " "  . Bu boşluk mutlaka kişinin adı ve soyadı arasında yazılmış olmalıdır. İkinci bir ad var mı diye arama yaptırırsın, bir boşluk daha bulursan bu da ikinci addır.

Bir programcı olarak kullanıcılara kolaylıklar sunmak görevimizdir. Bu yüzden, peşpeşe iki inputbox çıkarıp öncekine "Adı yazınız" sonrakine de "Şimdi de soyadı yazınız" demek pek iyi olmazdı bu yüzden kullanıcı tek bir inputbox içine ad ve soyadı yazar. Daha sonra biz ad ve soyadı ayırırız:

a = InStr(Trim(isim), " ")      Bu isim değişkeni içinde ilk boşluk karakterini arıyor

i = InStr(a + 1, isim, " ", vbTextCompare)  yukarıdaki satırda a değeri sıfır olmazsa, bu satır  ile isim içinde başka bir boşluğun olup olmadığı araştırılıyor.

Yukarıdaki iki satır ayırma işleminin ana damarlarıdır. a ve i değişkenlerinin aldığı değerlere göre işlemin nasıl devam ettiğini aşağıdaki kod bloğunda izleyebilirsin. Ben bu kodun aslında pek te iyi olmadığını söylemek zorundayım. Çünkü kullanıcılar her zaman hata yaparlar ve bu hatalar genelde senin hiç bir zaman aklına gelmeyecek hatalardır. Eğer kullanıcı ad ve soyad arasında iki boşluk bırakırsa arama yapılamaz... (İyileştirmek gerek...)

Sub Ad_Soyad_Ara(isim As String)
Dim adi
Dim soyadi As String
If isim = "" Then Exit Sub
a = InStr(Trim(isim), " ")
If a = 0 Then Exit Sub
i = InStr(a + 1, isim, " ", vbTextCompare)
If i = 0 Then
   adi = Left(isim, a - 1)
   soyadi = Mid(isim, a + 1)
Else
   adi = Left(isim, i - 1)
   soyadi = Mid(isim, i + 1)
End If
Ara "adsoyadidx", adi, soyadi
End Sub


Şimdi birden fazla alanda nasıl arama yaptırılır?

Yanıt: İndexler yaratarak. Veritabanı (mdb) içinde indexler vardır. Aramayı dilediğin alanlara bakarak yapmanı sağlar. İndex yaratma işlemini kendin öğrenmelisin.

Seek fonksiyonu mdb içinde arama yapar. Ancak bir index'e gereksinimi vardır. Örneğin sadece Ad araması yapılacaksa fonksiyon sadece mdb içindeki Ad field'ini filtreler ancak ad+soyad aranacaksa Seek fonksiyonu her iki field'i filtreler ve ancak ad ve soyad alanları kriterlere uyan kayıtları seçer. Yani aramada Hamdi Özkan adında bir kişiyi arıyor olalım ve diyelim ki mdb içinde 5 tane Hamdi kaydedilmiş. Önce bu Hamdi'ler seçilir ancak ikinci filtreleme 5 Hamdi arasında yapılır ve soyadı Özkan olan Hamdi seçilir ve böylece arama sonuçlanmış olur.

Aşağıdaki Sub üç tane eklenti alır. Bir index ve iki aranan. Eğer ikinci aranan (aranan1) yok ise o zaman sadece tek aranan var kabul edilir ve tekli arama yapılır (sadece ad gibi...) değilse ikili arama yapılır (ad+soyad gibi...) If bloğunu incelersen görürsün. Arama işlemi bir Recordset nesnesi içinde yapılır. Tabi ki sen bu Recordset'i nasıl oluşturacağını bilmelisin. Buradaki Recordset'in adı "recHastalar" dır.

İkinci If bloğu Recordset'in NoMatch özelliğini test ederek aramanın olumlu yada olumsuz olduğuna bakar. Bu iş standart olarak "If Not recSet.NoMatch" ile yapılır. Bunun anlamı "arama olumlu ise" demektir.

Aşağıdaki kodu inceleyin...

Sub Ara(ind As String, aranan As Variant, aranan1 As String)

With recHastalar
    .Index = ind   <= Burası önemli yapılacak aramanın index'i bildiriliyor...
    If aranan1 = "" Then
       .Seek "=", aranan
    Else
        .Seek "=", aranan, aranan1
    End If
    If Not .NoMatch Then
        .... aramanın olumlu olması halinde
             yazılacak kod buraya
    Else
        .... aramanın olumuz olması halinde
             yazılacak kod buraya (örnek olarak
             msgbox "Kayıt bulunamadı"  gibi)
    End If
End With
End Sub


Sonuç olarak birden fazla alanı taratarak arama yaptıracaksan indexler kullanabilirsiniz. Yada bir SQL sorgu da aynı işi görür:

strSQL = "Select * From Hastalar Where Ad = 'Hamdi' And Soyad = 'Özkan';"





Bu sayfa için henüz yorum eklenmemiş.

© Hakan Ersöz 2000-2013| Üyelik Sözleşmesi | | Ödeme Bildirimi
Sitemizden yenilikleri hemen öğrenin, pop upları engelleyin, chat yapın... ToolBarımızı indirin:
Vasicmaster Toolbar'ı indirin