11-06-2009, 22:12
![[Resim: spbanner6.png]](http://www.access-sql.com/resim/spbanner6.png)
Merhaba Access severler;
Bu konumuzda MS Access ile MS Sql Server arasında ADO kullanarak bağlantı yapmaya çalışacağız. Sql Server ister yerel, ister uzak olsun sadece Connection String üzerinde yapacağınız değişikliklerle bağlantıyı sağlayabilirsiniz. Biz örneğimizde Sql Server üzerinde yetkimiz olan veritabanı üzerinde uzak bağlantı deneyeceğiz.
Peki neden Sql Server’a bağlantı ihtiyaca duyalım(?) diyebilirsiniz.
Sql Server ve Oracle bilinen en güçlü veritabanı sistemleridir. Bunların yanında Mysql, Firebird gibi yine oldukça etkili veritabanı sistemleri vardır. Bu arada yeri gelmişken, hayatlarında Oracle görmemiş ya da üzerinde 2 sorgu yazmamış insanların “Oracle en iyisidir “ demelerine hayret ediyorum. Bu iki güçlü veritabanı sisteminin birbirine göre üstün ya da zayıf özellikleri vardır. Merak edenler için bunları bulmak zor olmasa gerek. Her neyse konumuzdan uzaklaşmayalım. Neden Sql Server’a bağlanalım diyorduk..
Access i gerçekten veritabanı amacıyla kullanan herkesin tek beklentisi verilerini en sağlıklı, en güvenli şekilde tutabilmektir. Tablo ve diğer nesneleri aynı mdb, mde içinde tutuyorsak potansiyel risk çok fazladır. Uygulamamız çökebilir ve tablolarımıza elveda diyebiliriz. Tabloları ayrı bir vt de tutuyorsak elbette çok daha sağlıklıdır ama biz çok daha fazlasını istiyoruz. Uygulamamızı MDE yapsak bile tablolar, sorgular, macrolar alenen açıktadır.
Tablolar, sorgular uygulama içinde görünmesin, bağlı tablo yöntemini de kullanmak istemiyorsanız artık başlayabiliriz. Diğer istek ve arzularımıza yeri geldikçe değineceğiz

Sql Server üzerindeki veritabanımızda “Personel” isimli tablomuz vardır. Bu tabloda “id, Ad, Soyad, GirisTarihi, DogumTarihi, Maas” alanlarımız vardır ve şu an için toplam “2.200” adet kayıt mevcuttur. Kayıt sayısını bilerek az tuttum ki malum ülkemizde internet hızlarında hala sıkıntı yaşamaktayız.
Access dosyamızı açalım ve “Sql_Server_Tablo” isminde bir form yapalım. Bu forma Sql Server de bulunan alanlarımızı sürekli form şeklinde koyalım. Artık ister formun açılışına ister bir düğmeye yazacağımız kodlarla verileri bu formumuza çağırabiliriz. Örnekte de göreceğiniz üzere ben düğme ile çağırdım.
Şimdi kodumuza bakalım.
Visual Basic
- ' •——————————————————————————————————————————————•
- ' | ******************************************* |
- ' | Access-Sql.com [Berkant Öztürk] |
- ' | ******************************************* |
- ' •——————————————————————————————————————————————•
-
- Dim cn As ADODB.Connection
- Dim rst As New ADODB.Recordset
- Set cn = New ADODB.Connection
- cn.ConnectionString = "driver={SQL Server};" & _
- "server=Server_ip_Adresi;uid=Kullanici_İsmi;pwd=Şifre;database=Veritabanı_İsmi"
- On Error Resume Next
- cn.Open
- If cn.State = adStateOpen Then
- 'MsgBox ("Baglantı Kuruldu...")
- rst.CursorLocation = adUseClient
- rst.Open "personel", cn, adOpenKeyset, adLockOptimistic
-
- Set Me.Recordset = rst
- Me.KaySay = vbCrLf & " Toplam -- " & rst.RecordCount & " -- Kayıt Bulundu." & vbCrLf & _
- " Veriler SQL server üzerinde -Personel- Tablosundan alınmıştır." & vbCrLf & vbCrLf & vbCrLf & vbCrLf & _
- " beab05"
- Else
- MsgBox ("Bağlantı Kurulamıyor!!")
- End If
- rst.Close
- cn.Close
- Set rst = Nothing
- Set cn = Nothing
Gördüğünüz gibi Sql Server da bulunan “personel” tablosuna ait kayıtların tümünü kolayca aldık. Üstelik bu kayıtlar üzerinde ekleme, silme, güncelleme yapabilmekteyiz ve bu güncellemeler aynen Sql Server üzerindeki tablomuza kaydedilebilmektedir ama ben veri değişikliği izinlerini iptal ettim. Biri çıkıp tüm kayıtları silebilir yoksa
Kayıtları çok basitçe aldık, 1 Mbs internet hızımla 2.200 kayıt bende 1-3 saniyede gelmektedir, üstelik ortalıkta görünen tablo ve sorgu da yoktur. Formunuza ait kayıt kaynağı olarak yine Sql Server da yaratacağınız bir view ( sorgu diyebiliriz) i de kaynak olarak gösterebilirsiniz ama tabii yaptığınız view in yapısına göre kayıt değişiklikleri yapmanıza engel olabilir ki bu durum Access te yaratacağınız sorgu yapısında da aynıdır. Örneğin gruplanmış bir sorgu sonucunu kaynak alırsanız formunuz elbette sadece okunur olacaktır..
Bir dahaki çalışmada Stored Procedures ( konusu içinde Stored Procedures hakkında kısa bilgi verilecektir) üzerinden veri almaya değineceğiz.
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
Access-Sql.com
Javascript
- this.setState({sign:"Here comes the sun...."})


