18-06-2009, 01:13
![[Resim: spbanner5.png]](http://www.access-sql.com/resim/spbanner5.png)
Merhaba arkadaşlar;
Bugünkü konumuz MS Access üzerinden parametre göndererek Sql Server üzerinde Stored Procedures ( SP olarak anılacaktır) den veri almaktır.
Ayrıca bir önceki konumuzu da SP hakkında bilgi sahibi olmak için okumanızı öneririm.
http://www.access-sql.com/konu-ms-access...on-kontrol
Örnek konumuz ise şöyledir;
Access üzerinde sürekli formumuz vardır, bu forma kayıtlar yine SQL Server üzerinden ve SP ile gelmektedir. Bizim istediğimiz her alana ait filtre kullanmak ve o alana ya da alanlara göre kayıt çağırmak. Örneğin ismi “Ali” olanlar ya da ismi “A “ ile başlayanlar ya da ismi içinde “al” harfleri olanlar gibi. Access deki “like” fonksiyonu size çağrışım yapmıştır sanırım. Burda da like işlecini kullanacağız ama bu sefer SP içinde ve biraz daha farklı olarak.
Filtre alanlarımızın daha kullanışlı olması için de bir açılan kutu yapalım. İçindeki değerler, “ ..İle başlar”, “içerir”, “..ile biter” olsun. Yani biz filtre alanına bir değer girdiğimizde bu açılan kutudaki seçimimize göre davransın. Filtre alanına “b” yazarsak ve açılan kutudan içeriri seçersek içinde “b” harfi olan tüm isimleri bize versin. Bu açılan kutuyu soy ismi alanı içinde ortak kullanalım ve 2 alana göre seçim versin bize. Elbette tüm alanlar için kullanabiliriz sadece SP de değişiklik yapmamız gerekecektir. İsim ve soy isim alanları hariç alanlar içinse sadece eşitlik kullanacağım yani Doğum Tarihi, Giriş Tarihi ya da Maaş alanı filtresine ne yazarsanız o tarihe ait kayıtlar gelecektir. İsmi ve Soyismi “A” ile başlayıp maaşı “1.200 TL” olanları da görebilirsiniz tabii

Filtre alanlarını boş ya da dolu bırakmak size kalmış, sonuçlar ona göre değişecektir.
Şimdi SQL Server üzerinde Sp mizi yazalım.
SQL
- /****** Object: StoredProcedure sp_personel Script Date: 06/16/2009 21:01:07 – Berkant Öztürk ******/
- SET ANSI_NULLS ON
- GO
- SET QUOTED_IDENTIFIER ON
- GO
-
- CREATE PROCEDURE [sp_personel]
-
- @ad nvarchar(50) = NULL,
- @soyad nvarchar(50)= NULL,
- @DogumTarihi datetime= NULL,
- @GirisTarihi datetime= NULL,
- @maas MONEY = NULL,
- @sec INT = NULL
-
- AS
-
- SET NOCOUNT ON;
-
- IF @sec=1
- BEGIN
- SELECT * FROM personel WHERE ((@ad IS NULL) OR (ad LIKE @ad + '%' ))
- AND ((@soyad IS NULL) OR (soyad LIKE @soyad + '%'))
- AND ((@DogumTarihi IS NULL) OR (DogumTarihi = @DogumTarihi))
- AND ((@GirisTarihi IS NULL) OR (GirisTarihi = @GirisTarihi))
- AND ((@maas IS NULL) OR (maas = @maas ))
- END
-
- ELSE IF @sec=2 BEGIN
-
- SELECT * FROM personel WHERE ((@ad IS NULL) OR (ad LIKE '%' + @ad + '%' ))
- AND ((@soyad IS NULL) OR (soyad LIKE '%' + @soyad + '%'))
- AND ((@DogumTarihi IS NULL) OR (DogumTarihi = @DogumTarihi))
- AND ((@GirisTarihi IS NULL) OR (GirisTarihi = @GirisTarihi))
- AND ((@maas IS NULL) OR (maas = @maas ))
- END
-
- ELSE
-
- BEGIN
-
- SELECT * FROM personel WHERE ((@ad IS NULL) OR (ad LIKE '%' + @ad ))
- AND ((@soyad IS NULL) OR (soyad LIKE '%' + @soyad ))
- AND ((@DogumTarihi IS NULL) OR (DogumTarihi = @DogumTarihi))
- AND ((@GirisTarihi IS NULL) OR (GirisTarihi = @GirisTarihi))
- AND ((@maas IS NULL) OR (maas = @maas ))
-
- END
Gördüğünüz gibi bu SP mizde parametrelere NULL eşitliği de vererek varsayılan değerlerini null kabul ettik. Yani isim için bir filtre girerken diğer alanları boş bırakabiliriz. Yoksa tüm parametreleri vermek zorunda kalacaktık. Sp de “IF” ve ElSE” de kullandık ve @sec parametremize göre ( açılan kutudan gönderiyoruz parametreyi) ilgili SQL cümlesini çağırıyoruz. Elbette bu SP yi daha detaylı incelemek gerekir ama şu anki amacım SP nasıl yazılırdan çok SP den veri çekmek konusu. Umarım ilerleyen günlerde sadece SP konularına da gireriz.
SP den veri alan VBA kodlarımızı örnek üzerinde (MDB dosyasında) görebilirsiniz..
Bundan sonraki çalışmamız bir aksilik olmazsa yine Sql server ve üzerine yazacağımız SP ile bir lisans - demo çalışması olacaktır.
Bol SP li günler dilerim

Not: Örneği MDE ekleme sebebim içinde server bilgilerimizin yer almasıdır ama birebir aynısını MDB olarak da ekliyorum. İçinde sadece server bilgileri yoktur, dolayısıyla bağlantı gerçekleştirmez.
Berkant Öztürk
www.Access-Sql.com
Javascript
- this.setState({sign:"Here comes the sun...."})

