RunSQLQuery Fonksiyonu

Tanım


Veritabanında saklanan bir tablolardan, SQL SELECT deyimi ile  kayıtları sorgulamak için kullanılan bir fonksiyondur. Sorgulama sonucunda elde edilen bilgiler, adı verilen ve bellekte geçici olarak yaratılan bir tabloya, alan adları SQL cümlesinde belirtilecek şekilde kopyalanır. Fonksiyon, SQL Select deyimini çalıştırır. SQL cümlesini yazmak tamamen apayrı bir konudur ve kullanıcını becerisine bağlıdır. Eğer SQL cümlesi hatalı ise, yazılım bir hata mesajı ile kullanıcıyı uyaracaktır.


Sistemin sahip olduğu diğer veritabanı fonksiyonlarından temel farkları; birden fazla tabloyu aynı anda okuması ve ve SQL cümlesinin ne kadar yetenekli yazıldığına bağlı olmasıdır. Yine diğer fonksiyonlara göre daha da hızlı çalışmaktadır.

Kullanım Şekli


Set RowSetNesnesi = Document.RunSQLQuery(SonuçRowSetAdı, SQLCümlesi)

Ana Nesne


Document (Doc) nesnesinin elemanıdır. Bir doküman nesnesi ile kullanılmak zorundadır.

Parametreler


Parametre

Açıklama

SonuçRowSetAdı

Sorgulama sonucu elde edilen bilgilerin bellekte geçici tablo gibi saklandığı RowSetin adı. Aynı uygulama içinde, aynı ad bir kez kullanılır. Başka bir sorgulamada da kullanılırsa, önceki sorgulama sonucu oluşturlan rowset yokedilir.

SQLCümlesi

SQL Select cümlesinin kendisidir. Verilerın okunacağı tablo adları, okuma anında uygulanacak kriterler, hangi alanların veri olarak geri döneceği, ne kadar veri dönüleceği vs. tüm bu detaylar bu cümle içinde söylenir.

Geri Dönen Değerler


Bellekte, SonuçRowSetAdı parametresinde verilen isimde bir geçici bir tablo geri dönülür. Bir rowset nesnesine atanarak (set edilerek) kullanılmalıdır.

Hatırlatmalar


Sadece veritabanında var olan tablolar sorgulanabilir.

Sorgu sonucu oluşan rowsetler büyüklüğüne göre hafızada yer kaplar. Bellek tutarını aşan aşırı büyük sorgular, bellek bitene kadar çalışır, sonra da hata verirler.

Sistemin sahip olduğu diğer fonksiyonlardan farkı, SQL Select deyiminin yeteneklerine bağlı olmasıdır.

Örnek

Daha önce SelectX sistem fonksiyonlarını anlatırken verilere dayanarak, aşağıdaki örnekler verilmiştir.





Sub Makro1()

       Dim SQLCumlesi

       SQLCumlesi = "Select * from MUHDST where EVRAKNO>='  39006446' and EVRAKNO<='  39006447'"

       Set TempMuhdst = Doc.RunSQLQuery("ABC001",SQLCumlesi)

       Mesaj ="Muhasebe Kodu" & Chr(9) & "Tutar"

       for i = 1 to TempMuhdst.GetRowCount()

               HesapKodu = TempMuhdst.MUHASEBECODE(i)

               Tutar = Doc.RightJustify(Doc.NumFormat(TempMuhdst.MUHASEBEFIYAT(i),12,2),15)

               Mesaj = Mesaj & Chr(13) & HesapKodu & Chr(9) & Tutar

       next

       Doc.MsgBox Mesaj                

End Sub



Yukarıdaki örnekte, veritabanında kayıtlı olan MUHDST tablosunda yer alan örnek veri setindeki verilerin, kayıt sırasına göre gösterimi aşağıdaki mesaj kutusunda gösterilmiştir. SelectX fonksiyonlarında elde edilen veriler sadece tabloda yer alan verilerle sınırlıdır. Yani tabloda yer almayan, fakat ilişkili tablolarda yer alan verilere ulaşmak için ilave işlemlere veya fonksiyonlara ihtiyaç vardır. RunSQLQuery fonksiyonu kullanıcı tanımına göre bu sorunuda çözmektedir.






Sub Makro1()

       Dim SQLCumlesi

       SQLCumlesi = "Select T1.MUHASEBECODE as HESAPKODU, T2.AD as HESAPADI, SUM(T1.MUHASEBEFIYAT) as TUTAR from MUHDST T1 "

       SQLCumlesi = SQLCumlesi & "inner join MUHA00 T2 on T1.MUHASEBECODE = T2.KOD "        

       SQLCumlesi = SQLCumlesi & "where T1.EVRAKNO>='  39006446' and T1.EVRAKNO<='  39006447' "

       SQLCumlesi = SQLCumlesi & "Group By T1.MUHASEBECODE, T2.AD "

       SQLCumlesi = SQLCumlesi & "Order By T1.MUHASEBECODE"

       Set TempMuhdst = Doc.RunSQLQuery("ABC001",SQLCumlesi)

       Mesaj ="Muhasebe Kodu" & Chr(9) & "Hesap Adı" & Chr(9) & Chr(9) & Chr(9) & "Tutar"

       for i = 1 to TempMuhdst.GetRowCount()

               HesapKodu = TempMuhdst.HESAPKODU(i)

               Tutar = Doc.RightJustify(Doc.NumFormat(TempMuhdst.TUTAR(i),12,2),15)

               Mesaj =  Mesaj & Chr(13) & HesapKodu & Chr(9) & mid(TempMuhdst.HesapAdi(i),1,20) & Chr(9) &  Tutar

       next

       Doc.MsgBox Mesaj        

       

End Sub



Yukarıda verilen örnek ile ilk örnek arasındaki temel fark SQL cümlesinin yapısından kaynalanmaktadır. Bir önceki cümleye göre daha karmaşık bir hal almıştır. Yeni cümleye, sıralama, gruplama ve başka bir tabloya erişip veri okuma özellikleri eklenmiştir. Ana tablodaki (MUHDST) muhasebe kodlarına göre sıralama ve gruplama yapılmıştır. Ayrıca muhasebe hesap planı tablosuna (MUHA00) erişip hesapların adı elde edilmiştir. Ayrıca elde edilen alanlar yeniden isimlendirilmiştir. Bu durumda örneğimizin sonucu aşağıdaki mesaj kutusunda gösterilmiştir



Paylaşım Makrosu