Özgür Özvarış

Bir yazılımcının kırık dökük dünyası

Windows scroll message problem

clock Şubat 29, 2016 18:12 by author OzgurOzvaris

Merhaba, 

Eğer sizinde eski bazı kullandığınız yada yazdığınız programlarda mouse ile scroll bar problemi yaşıyorsanız işte size çok pratik bir çözüm.

Scroll Wheel Fix for VB6 (and others!) link


Sadece bir exe file ile çalışıyor. VB6ScrollwheelFix.ini dosyasına problemi programınızla ilgili bir bölüm açmanız yeterli. Örneğin bizdeki Erwin programı için şöyle bir statır ekledim. 

[Erwin]

Process=MMOPN32.exe

WindowClass=ErwDiagramView

ParentWindowClass=

VertMsgCount=3

HorzMsgCount=3

 

Process ismini almak için görev yöneticisinde uygulamanızı seçip process'e git diyerek exe sini öğrenebilirsiniz.

WindowsClass name içinde visual studionun Spy++ tool'unu kullandım. Sizde bu yoksa free bir class gösterici program kullanmanız gerekebilir.

İyi çalışmalar.



LinqKit Linq dynamic sql parameter

clock Şubat 11, 2016 13:47 by author OzgurOzvaris

Merhaba Arkadaşlar,

Kaynaklar

What is LINQKit?

Dynamically Composing Expression Predicates

How does PredicateBuilder work

linqpad - adding reference to assembly to using custom types

How does LINQPad reference other classes

Building LINQ Queries at Runtime in C#

LinqPad adds an S to the end of every table

Writing Methods and Classes in LINQPad

Entity Framework te Linq ile yapacağınız geliştirmelerde. ilk karşınıza çıkacak zorluklardan bir tanesi dinamik olarak parametre eklemek.

LinqPad malumunuz uzun süredir linq cümleleri geliştirmek için kullanılan bir araç. Gerek database bağlantılı gerekse database bağlantısı olmadan linq sorgularının çıktılarını inceleyebiliryorsunuz. Bu bloğu sanki LinqPad ile ilgili bası basamakları biliyormuşsunuz gibi bazı ön kabullerle başlayacağım. Bu Ön kabuller.

1 - Temel Linq bilgisi

2 - LinqPad download ve install edilmesi

3 - Database connection oluşturulması

Bu ön kabuller üzerinden devam ederek sizlere dinamik bir linq sorgusu nasıl geliştirilir izah etmeye çalışacağım.

LinqPad adresinden gerekli setup işlemlerini yapıyor ve LinqPad'i açıyorsunuz

 

- Öncelikli olarak Sol menüdeki Add Connection bölümünü tıklayarak connection oluşturmanız gerekmektedir.Default linki kullanarak devam et diyerek connection kurabilirsiniz. (Güncelleme 25.04.2016 )Connection oluştururken "Pluralize" seçeneğinin açık olup olmadığını dikkat edin. Ben kapalı olarak kullandığım için bir müddet neden Expandable komutum çalışmadı diye zaman harcadım. Meğerse tablo adının sonuna "s" eklemiş

 

- Şimdi sıra geldi dinamik parametreler eklememize yardımcı olan LinqKit dll'ini yüklemeye. Bu dll'i nuget yada What is LINQKit? makalesinin altındaki download linki ile yükleyebilirsiniz. 

-  LinqKit kurduğunuz yerden LinqPad'a refernce olarak eklemeniz gerekmektedir. Bunun için F4 Tuşuna basmalısınız. Karşınıza Add Reference penceresi çıkacak. Browse seçilerek LinqKit işaret edildikten sonra, Additional Namespace inmport bölümünden LinqKit adı yazılarak LinqPad'in artık LinqKit'i tanıması sağlanır.

 

- Daha sonra Language seçmelerinden c# statements seçmelisiniz.

 

Ben kendi örneğimde FSYS_USERS tabloma OnlyActive User parametresini test ettim. Siz kendi tablolarınızı çağırarak test yapabilirsiniz. Bu arada Context adı yazmadan direk olarak tablo adı yazdığıma dikkat edin.

var OnlyActiveUsers = true;
Expression<Func<FSYS_USERS, bool>> FSYS_USERSPredicate = p1 => true;

            if (OnlyActiveUsers)
            {
                FSYS_USERSPredicate = FSYS_USERSPredicate.And(z => z.FSTATUS == 'A');
            }
			
var x = from c in FSYS_USERS.Where(c => true).Where(FSYS_USERSPredicate).OrderBy(o=> o.ADSOYAD)
                    select c;

 //           x.ToList();
 
 x.Dump();

 

Yukarıdaki örnekte Eğer OnlyActiveUsers set edilirse linq cumlesine bir predicate daha ekleniyor. Run tuşuna basarak aşağıdaki tablardan dönüş değerlerini, sonuçta oluşan dinamik linq cümlesini ve sql'e giden cümleyi görebilirsiniz. Dump Komutu LinqPad'in aşağıda listeyi görebilmenizi sağlayan bir Extension komutu. ToList'ini alıp aşağıda sonuç tabloayu görmenizi sağlıyor.

Burada gerekli testleri yaptıktan sonra artık sonuç fonksyonumuzu oluşturabiliriz.

public IEnumerable<FSYS_USERS> GetActiveUsersShortInfo(bool OnlyActiveUsers)
        {
            //var FSYS_USERSPredicate = PredicateBuilder.True<FSYS_USERS>();

            //if (OnlyActiveUsers)
            //{
            //    FSYS_USERSPredicate.And(z => z.FSTATUS == "A");
            //}

            //var x = from c in MasterContext.FSYS_USERS.AsExpandable().Where(FSYS_USERSPredicate.Compile())
            //        select c;

            Expression<Func<FSYS_USERS, bool>> FSYS_USERSPredicate = p1 => true;

            if (OnlyActiveUsers)
            {
                FSYS_USERSPredicate = FSYS_USERSPredicate.And(z => z.FSTATUS == "A");
            }

            var x = from c in MasterContext.FSYS_USERS.AsExpandable().Where(c => true).Where(FSYS_USERSPredicate.Compile()).OrderBy(o=> o.ADSOYAD)
                    select c;

            return x.ToList();
        }

 

Bu şekilde tam olarak dinamik bir parametreyi Entity Framework yapımıza eklemiş olduk. Method daki AsExpandable ve Compile komutları LinqKit aracılığı ile gelen extension komutlar.

(Güncelleme 25.04.2016) Eğer c# statement linq cümlesinde bir class yada method kullanmak isterseniz. Bunuda düşünmüşler :) tek yapmanız gereken statement sonunda "}" ile linq bölümünü eklemek ve ardına istediğiniz kadar method ve class ekleyebilirsiniz. Writing Methods and Classes in LINQPad Burada detaylı bir şekilde anlatıyor. Denedim çok güzel çalışıyor.

 

İyi çalışmalar.



Sql tablo kolon listesi alma

clock Şubat 9, 2016 10:02 by author OzgurOzvaris

Merhaba Arkadaşlar,

Bir kaç pratik sql scriptini yeni açtığım kategoriye eklemeye karar verdim.

Sql server database altındaki tablo listesini almak için database seçilir.

SELECT TABLE_NAME FROM INFORMATION_SCHEMA.Tables

Sql server tablo kolon listesini alma

 

SELECT 
    c.name 'Column Name',
    t.Name 'Data type',
    c.max_length 'Max Length',
    c.precision ,
    c.scale ,
    c.is_nullable,
    ISNULL(i.is_primary_key, 0) 'Primary Key'
FROM    
    sys.columns c
INNER JOIN 
    sys.types t ON c.user_type_id = t.user_type_id
LEFT OUTER JOIN 
    sys.index_columns ic ON ic.object_id = c.object_id AND ic.column_id = c.column_id
LEFT OUTER JOIN 
    sys.indexes i ON ic.object_id = i.object_id AND ic.index_id = i.index_id
WHERE
    c.object_id = OBJECT_ID('YourTableName')

 Herkese İyi çalışmalar.



Hakkımızda  AboneOl 

Blog Yayınımıza Hoşgeldiniz.

Month List

RecentPosts

Sign In