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.
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.
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.
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;
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)
İşte bu kadar kolay.
Bu makalede kullanılan programlar : Visual Basic 6.0, SQL Server 2005
Bir sonraki makalede görüşmek üzere.
eSa
Ö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.
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