Web service ve Access
#1
Merhaba arkadaşlar;
Access ile Web Servisler ve kullanımı ile ilgili yararlı olacağını düşündüğüm bazı bilgiler vermeye çalışacağım.
Aslında daha önce de bu konuya benzer bir konu yayınlamıştım. Şimdi daha farklı ve detaylı anlatmaya çalışacağım.
Web Servisleri ile alacağımız veriler bize ne sağlar, yararı nedir gibi bir soru aklınıza gelebilir. Kısaca özetlemek gerekirse hali hazırda bir çok veriyi kullanabiliriz. Örneğin, kimlik bilgileri, hava durumu, kur bilgileri, ülke telefon kodları vs. vs.. uzar gider.. Tabii bu tür verilere erişim yapabileceğiniz her servisi bulamayabilirsiniz ya da ücretlisini bulursunuz. Bu durumda kendiniz hazırlamanız gerekebilir. Mesela ben bugüne kadar il-ilçe-semt gibi verilerin bulunduğu bir web servisine hiç rastlamadım. Üzgünüm ama bunu şimdiki örneğimizde de bulamayacaksınız. Belki de sizler hazırlarsınız Wink
Ayrıca unutmamak gerekir ki kullanıcılar bizim web servisimizi kullanıyorsa tüm kontrol bizde demektir. Yani istersek onların alacağı verileri değiştirmek, engellemek gibi sınırlamaları dilediğimiz gibi yapabiliriz. Mesela basit bir fikir olarak tarih sınırlaması olan bir uygulamamızda tarihi bir servis ile kontrol edebiliriz. Böylece kullanıcının PC tarihiyle oynaması hiçbir anlam ifade etmeyecektir. Süresi dolan kullanıcıya da istediğimiz mesajı göndermek elimizde olacaktır gibi…
Web servislerimizi üstelik bir çok platformda rahatça kullanabiliriz. Aşağıda yazacağımız servisleri tüm .Net, vb6, Excel, Word, Access gibi platformlarda rahatlıkla kullanabiliriz.
Bu konuda Web Servisi nasıl yapılırdan çok Access ile nasıl kullanabiliriz buna değineceğim. Göreceğiniz ve kullanacağınız servisleri ben Visual Studio 2010 ile oluşturdum ve Windows sunucumda yayınlıyorum.
Önemli bir ayrıntı; bu servisleri Access gibi Office bileşenleri ile kullanmak için bilgisayarınıza aşağıdaki linkte bulunan Microsoft SoapToolkit’i mutlaka kurmanız gerekiyor. Zaten bana göre her pc de mutlaka kurulu olmalıdır. Boyutu da ufaktır merak etmeyin, 3,6 MB.
http://www.microsoft.com/download/en/det...x?id=13456

Artık örneğimize ve açıklamalarımıza geçebiliriz.
İlk servisimizi yazalım;
vb.net
  1. <WebMethod(Description:="Bir String Collection oluşturalım")> _
  2. Function TakimlarAl(ByVal kriter As String) As List(Of String)
  3.  
  4. Dim takimlar As New List(Of String)(New String() {"Access-Sql.com", "AccessCage.com",
  5. "Fenerbahçe", "Galatasaray",
  6. "Beşiktaş", "TrabzonSpor",
  7. "BursaSpor", "Barcelona",
  8. "Real Madrid", "LiverPool",
  9. "Arsenal", "Berkant Öztürk"
  10. })
  11.  
  12. Dim TakimFiltre = takimlar.FindAll(Function(b) b.ToLower().Contains(kriter.ToLower))
  13. 'Dim TakimFiltre = takimlar.FindAll(Function(b) b.Contains(kriter)) ' Küçük-Büyük Harf Duyarlı
  14.  
  15. If TakimFiltre.Count = 0 Then
  16. takimlar.Clear()
  17. takimlar.Add("Aradığınız kriter veriler içinde yok!")
  18. Return takimlar
  19. Else
  20. Return TakimFiltre
  21. End If
  22. End Function


Burada kendimiz bir string collection oluşturuyoruz. Gördüğünüz gibi bazı takım isimleri yazdım ve bir de kriter ekledim. Bu kritere göre (contains – içinde geçen) server tarafında filtre yapacaktır. Server tarafında yapmamız bize çok büyük fayda sağlayabilir. Yüzbinlerce verimiz olduğunu düşünürsek bunu daha iyi idrak edebilirsiniz. Bu fonksiyonumuzu Access tarafında nasıl kullandığımıza bakalım.
Visual Basic
  1. Private Sub BtnTakimAl_Click()
  2.  
  3. Dim oSOAPClient As New SoapClient30
  4. oSOAPClient.MSSoapInit Servisim
  5.  
  6. If IsNull(Me.TxtKriter) Then Me.TxtKriter = ""
  7. Listem = oSOAPClient.TakimlarAl(Me.TxtKriter)
  8. Dim bb As Variant
  9. Me.LstTakimlar.RowSource = ""
  10. For Each bb In Listem
  11. Me.LstTakimlar.AddItem (bb)
  12. Next
  13. Set oSOAPClient = Nothing
  14. End Sub


Örnekte de göreceğiniz gibi sol üsteki liste kutusunun yanında yer alan düğmeye basarak takımları liste kutusuna dolduruyoruz. Sarı filtre kutusuna yazacağımız karakterlere göre de tekrar düğmeye basarak server taraflı filtre edebiliriz. Boş olması halinde tüm takımlar gelecektir.

Şimdi biraz daha basit bir fonksiyon hazırlayalım ama yine parametreli olsun.
vb.net
  1. <WebMethod()> _
  2. Public Function Merhaba_De(Ad As String) As String
  3.  
  4. Return "Merhaba sayın " & Ad
  5.  
  6. End Function


Göreceğiniz gibi çok basit fonksiyon bize “Ad” değişkenimize göre bir string döndürecektir.
Access tarafına geçelim;
Visual Basic
  1. OzelMesaj = oSOAPClient.Merhaba_de(Environ("UserName"))
  2. MsgBox OzelMesaj



Bize pc kullanıcı ismimize göre yukarıdaki web metodumuzda dönen stringi verecektir. Siz isterseniz environ kullanmak yerine kendi belirlediğiniz şekilde bir değer atayabilirsiniz tabii..
Bir de olmazsa olmazlardan Merkez Bankası döviz kuru almaya bakalım. Merkez bankası bze bunu zaten xml servisi olarak veriyor ama biz burada bu servisten kendimize bir web servis metodu yaratacağız.
vb.net
  1. <WebMethod()> _
  2. Public Function KurAl() As String
  3.  
  4. Dim kurlar As XElement = XElement.Load("http://www.tcmb.gov.tr/kurlar/today.xml")
  5.  
  6.  
  7. Dim dolar As XElement = (From b In kurlar.Elements
  8. Where b.Attribute("CurrencyCode").Value = "USD").Single()
  9.  
  10.  
  11. Return "USD Alış: " & dolar.Element("ForexBuying").Value & " TL" &
  12. vbCrLf & vbCrLf &
  13. "USD Satış: " & dolar.Element("ForexSelling").Value & " TL"
  14.  
  15. End Function


Bu fonksiyonda sadece USD alış ve satış kurlarını aldırdım ve xml linq kullandım.
Access tarafına bakalım;

Visual Basic
  1. oSOAPClient.MSSoapInit Servisim
  2. Kurlarim = oSOAPClient.KurAl
  3. MsgBox Kurlarim


Mesaj kutusunda bize USD alış ve satış kurunu verecektir.
Şimdi biraz daha gelişmiş bir web methodu yazalım. Bu sefer amacımız bir veritabanında kayıtlı verileri almak olsun. Ben bunun için Sql Server da bulunan ve bizim AccessCage de yer alan son medyaları aldırdım. Medya ismi, medya türü ve medyayı ekleyen olarak 3 sütunda liste kutusunda yer alacaklardır.
vb.net
  1. Public Class SonMedyalar
  2.  
  3. Public Property KonuBaslik() As String
  4. Public Property KonuTur() As String
  5. Public Property KonuEkleyen() As String
  6. Public Property KonuTarih() As Date
  7.  
  8.  
  9.  
  10.  
  11. End Class
  12.  
  13. <WebMethod()> _
  14. Public Function SonMedyalarAl() As List(Of SonMedyalar)
  15.  
  16.  
  17.  
  18. Using bb As New MedyalarEntities
  19.  
  20. Dim Medyalarim As List(Of SonMedyalar) = (From b In bb.View_Medyalar Order By b.MedyaId Descending
  21. Select New SonMedyalar With
  22. {.KonuBaslik = b.MedyaBaslik,
  23. .KonuEkleyen = b.MedyaEkleyen,
  24. .KonuTarih = b.MedyaTarih,
  25. .KonuTur = b.GrupAd}).Take(20).ToList
  26.  
  27.  
  28.  
  29. Return Medyalarim
  30.  
  31. End Using
  32.  
  33. End Function


Ben veritabanından Entity Framework kullanarak aldırdım. Bu detaya şimdi girmek istemiyorum ama sizler çeşitli yollarla bu verileri aldırabilirsiniz.
Access tarafı bizi bekler;
Visual Basic
  1. Listem = oSOAPClient.SonMedyalarAl
  2.  
  3.  
  4. Dim bb As Variant
  5.  
  6. Me.LstSonMedyalar.RowSource = ""
  7.  
  8. For Each bb In Listem
  9. Me.LstSonMedyalar.AddItem (bb(0).Text & ";" & bb(1).Text & ";" & bb(2).Text)
  10.  
  11. Next



Almışken bizim forumun RSS bilgilerini de alsak hiç fena olmaz Wink
vb.net
  1. Public Class RSSBasliklar
  2.  
  3. Public Property Baslik() As String
  4. Public Property Link() As String
  5. Public Property Detay() As String
  6.  
  7. End Class
  8.  
  9.  
  10. <WebMethod()> _
  11. Public Function RssAl() As List(Of RSSBasliklar)
  12.  
  13. Dim document As XDocument = XDocument.Load("http://www.access-sql.com/syndication.php?limit=25", LoadOptions.None)
  14.  
  15.  
  16. Dim Rsslerim As List(Of RSSBasliklar) = (From b In document.Descendants("channel").Elements("item")
  17. Select New RSSBasliklar With
  18. {.Baslik = b.Element("title").Value,
  19. .Link = b.Element("link").Value}).ToList
  20.  
  21. Return Rsslerim
  22.  
  23. End Function


Access;
Visual Basic
  1. Dim bb As Variant
  2.  
  3. Me.LstRss.RowSource = ""
  4.  
  5. For Each bb In Listem
  6. Me.LstRss.AddItem (bb(0).Text)
  7. Me.LstRss.AddItem (bb(1).Text)
  8. Next



Gördüğünüz gibi çeşitli veri kaynaklarından verileri Access ile kolayca aldık. Kimisi hazır servislerdi, kimi değerleri biz kod tarafında ekledik kimilerini de veritabanından çağırdık.

Aşağıdaki örnekten yukarıdaki tüm verileri alabilirsiniz.

Berkant Öztürk
[Access-Sql.com]



Javascript
  1. this.setState({sign:"Here comes the sun...."})







  Alıntı
Bu mesajı beğenenler:
#2
bugün patlatan, patlatana, Yellow ender raslanan örneklerden biri daha Wink

imza; jon206
www.access-sql.com



  Alıntı
Bu mesajı beğenenler:
#3
ender bir fikir ve örnek. gerçi ülkedeki bağlantı sorunları ve de kalitesiz hizmete verilen büyük paralar nete bağlı uygulamalra soğuk su tutarken bir taraftan yazılım anlamında access forumunda bile bu örneğin olması aradaki uçurumu ortaya koyuyor. gülelim mi ağlayalım mı?

tebrikler Berkant Bey. Farklı alanlardaki birikimlerinizi access ile birleştirmeniz yeni ufuklar açıyor.
Eek VT:Veri Tabanı, AVT: Access VT, MS:Microsoft, Kapaç: Kapa ve aç (rebot ve açkapa saçmalığına çözümüm)
Twitcy Yazan okuyan sağolsun, çözene saygılar. Kolaylaştırınız, zorlaştırmayınız.
? Cinnet geçirmemek için Access 2010'u SP2 ile kullanalım.
? Sürekli sebepsiz hatalar oluyor da AVT uçuyorsa siz de Ofis kurulmunu uçurun çözülüyor. Sorun kurulum dosyanızda! Farklısını bulun!
? VT dağıtıma çıkana kadar bölmek zaman kaybıdır!
{ Veri Tabanı Mantığı } {Access 2010 çökmelerine çözüm } { 60 Günlük Ofis 2010 Pro Türkçe } { Kayıtları Yan Yana Göstermek }
{ Forma Rapora Resim Fotoğraf Eklemek En kolay En Sağlam En Zengin Teknik }



  Alıntı
Bu mesajı beğenenler:
#4
Güzel bir teknoloji; biraz da kaygan (soup) Wink

Eline sağlık...



  Alıntı
Bu mesajı beğenenler:
#5
Hocam eline sağlık, Birde şu MSSOAP.dll yi bula bilseydim. Smile



  Alıntı
Bu mesajı beğenenler:
#6
Dostum eline sağlık.. Oya gibi işlemişsin..

Yıllardır, hazırladığın böyle özel çalışmalar ile ülkemizdeki Access kullanıcılarının vizyonuna yön veriyorsun..

Teşekkür ederim.. Wubclub



  Alıntı
Bu mesajı beğenenler:


Foruma Git:


Bu konuyu görüntüleyen kullanıcı(lar): 1 Ziyaretçi