İçeriğe geç
ShiftDelete.Net
Haber ara/ SDN'ye SorGiriş
Haber Akışı SDNTV İnceleme Forum Yapay Zeka Akıllı Telefon Elektrikli Otomobil Oyun ShiftDelete.Net Global Teknoloji Haberleri Mobil Otomobil Donanım Savunma Bilim Sosyal Medya İnternet Giyilebilir Teknoloji Rehber Ürünler Son dakika Yazarlar
  1. Ana sayfa
  2. Topluluk
  3. Programlama
  4. Programlama Dilleri
Programlama Dilleri

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

eSa05.05.20121 cevap2.750 görüntüleme
2011'den beri9.780 mesaj
#1
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.



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



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

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.


[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;


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)


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
Cevaplar
2005'den beri19 bin mesaj
#2
Ellerine sağlık Esa. Bu işlerle uğraşanlar için güzel bir makale.

Cevabını yaz

Cevap yazmak için giriş yap ya da üye ol. Eski forum kullanıcı adın ve parolanla girebilirsin.