[MAKALE] - Visual Basic ile SQL Server 2005 Alan Açıklamalarını Kullanmak.

  • Konuyu başlatan Konuyu başlatan eSa
  • Başlangıç tarihi Başlangıç tarihi

eSa

Dekan
Katılım
5 Kasım 2011
Mesajlar
9,782
Reaksiyon puanı
352
Puanları
263
Bilindiği üzere Sql serverde bir sorgu hazırladığımızda sütun başlıklarını alan isimlerini stok_hareket.malzeme_adi AS 'MALZEME ADI' şeklinde kendimiz belirleyebiliriz. Ancak sözkonusu sorgu değil de tablonun kendisi olunca iş biraz daha karmaşık hale geliyor.


Örneğin bir gride bir tabloyu direkt olarak bağladığımızda kolon başlıkları otomatik olarak tablo alan isimleri olmakta ve göze hoş görünmemektedir. Bu durumda gridi kullandığımız her kodun sonrasında bu isimleri tek tek değiştirmek zorunda kalırız.


Bu sıkıntıyı aşmak için öncelikle, veri tabanımızdaki tablolardaki alanların açıklama kısmına sütun başlığı olarak ne göstermek istiyorsak bunları giriyoruz.


columndesc.png



Bu işlemden sonra tablo ve kolon açıklamalarına hızlıca erişebileceğimiz bir view oluşturuyoruz.


alanaciklamalari.png



Tekrar yazmaya uğraşmamanız için, kullandığımız viewdeki SQL Sorgusu şu şekildedir.


Kod:
SELECT     TOP (100) PERCENT i_s.TABLE_NAME AS TableName, i_s.COLUMN_NAME AS ColumnName, s.value AS Description
FROM         INFORMATION_SCHEMA.COLUMNS AS i_s LEFT OUTER JOIN
                      sys.extended_properties AS s ON s.major_id = OBJECT_ID(i_s.TABLE_SCHEMA + '.' + i_s.TABLE_NAME) AND s.minor_id = i_s.ORDINAL_POSITION AND 
                      s.name = 'MS_Description'
WHERE     (OBJECTPROPERTY(OBJECT_ID(i_s.TABLE_SCHEMA + '.' + i_s.TABLE_NAME), 'IsMsShipped') = 0)
ORDER BY TableName, i_s.ORDINAL_POSITION


Artık sıklıkla kullanacağımız bu viewi wfield_desc olarak saklıyorum.


Kodlama sırasında bu sorguyu en kolay yoldan kullanabilmek için bir public function oluşturdum.


Kod:
[COLOR=#0000cd]Public Function[/COLOR] GetFieldDesc(ByVal TableName As String, ByVal ColumnName As String) As String
Dim SQLText As String
Dim RSF As New ADODB.Recordset
GetFieldDesc = FieldName


SQLText = "select Description from wfield_desc where TableName='" & TableName & "' and ColumnName='" & ColumnName & "'"


RSF.Open SQLText, CNN, adOpenStatic, adLockReadOnly
If RSF.RecordCount Then GetFieldDesc = IIf(IsNull(RSF.Fields("Description")), "", RSF.Fields("Description"))
RSF.Close
Set RSF = Nothing


[COLOR=#0000cd]End Function[/COLOR]


Artık tüm hazırlıklarımız tamam olduğuna göre istediğimiz tablonun istediğimiz alanının açıklamasını, parametre göndererek alabiliriz. Örneğin;


Kod:
text1.text = GetFieldsDesc("stok_karti","malzeme_adi")


formumuzda text1 alanının içeriği stok_karti tablosundaki malzeme_adi alanına yazdığımız MALZEME ADI olarak görünecektir.


Peki bu fonksiyonu tabloya direkt olarak bağlanmış bir grid üzerinde uygulasaydık ne kadar kolay olurdu?


Örneğimizde kullanılan grid Sharpgrid 2.0 dır. (örnekte sg1 olarak isimlendirilmiştir)


Kod:
Dim SQLText As String
Set Rsk = New ADODB.Recordset
Dim i As Integer


Rsk.Open "stok_karti", CNN, adOpenStatic, adLockOptimistic


Set sg1.DataSource = Rsk


For i = 1 To sg1.ColCount - 1
    sg1.Columns(i).Caption = GetFieldDesc(sg1.Columns(i).BaseTableName, sg1.Columns(i).DBField)
Next




İşte bu kadar kolay.




Bu makalede kullanılan programlar : Visual Basic 6.0, SQL Server 2005


Bir sonraki makalede görüşmek üzere.


eSa
 

pesimist

Rektör
Emektar
Müdavim
Katılım
30 Eylül 2005
Mesajlar
18,639
Reaksiyon puanı
2,124
Puanları
3,358
Yaş
40
Ellerine sağlık Esa. Bu işlerle uğraşanlar için güzel bir makale.
 
Üst