in Eski Blog Yazılarım

Logo Unity API’de SqlClause Kullanımı

Daha önce yazmış odluğum Logo API‘ ile ilgili yazıyı referans göstererek yazılmış bir çok e-posta alıyorum. Genelde e-posta içeriği SqlClause kullanımı ile alakalı olduğu için genel bir örnek yapıp burdan paylaşayım dedim.

Senaryomuz şöyle;

Logo üzerindeki bir carinin logo üzerindeki kodu ve ismini getiren bir sorgu yazmak istiyoruz. Bunun için de Logo api’sinde ki veritabanını bozmamak ve stabil, iyi sorgular oluşturmak için tasarlanmış SqlClause sorgu sınıfını kullanacağız. Bu sınıf’ı kullanarak yazdığınız sorgular kesinlikle logo’nun seveceği sorgular olup, sistem üzerinde herhangi bir probleme neden olmaz, kendileride zaten bu yöntemi öneriyorlar.

"

Unity Object
kullanıcılara query yazmak için IQuery nesnesini sağlamıştır. IQuery nesnesi
ile Select tipindeki queryleri çalıştırmak hem çok kolay hemde çok hızlıdır.
Querylerle veri ilişkisini bozabileceğinden insert, update veya delete
tipindeki queryleri çalıştırma tavsiye edilmez, fakat IQuery nesnesi bu tür queryleri
çalıştırmanızada izin verecektir.

 

IQuery nesnesini kullanarak iki şekilde SQL cümleleri
oluşturabiliriz. İlk yöntem SQL cümlesini direct olarak Statement özelliğine
geçip OpenDirect veya Execute metodlarıyla çalıştırmak veya SQL Clause’lar
yardımıyla oluşturmak. Statement özelliğini kullanarak SQL cümlelerini
oluşturursak veri tabanına bağımlı hale geliriz. MS SQL Server için yazdığımız
bir sorgu ORACLE veya LBS UNITY programının desteklediği başka bir sunucuda
çalışmayabilir. Veri tabanına bağımlılığı ortadan kaldırmak için SQL Clause’lar
oluşturulmuştur. Clause’lar yardımıyla sorgumuzun belli kısımlarını tanımlar,
sorgunun birleştirilme kısmını UnityObject’e bırakırız. UnityObject
tanımlarımızı alır, UConfig programımızda belirtiğimiz veritabanı formatına
kendisi çevirir. Clauseları kullanmak biraz işyükü getirmekle beraber
veritabanı bağımlılığını ortadan kaldırır. Tanımladığınız sorgular LBS Unity
programının desteklediği ve ilerde destekleyebileceği ortamlara ek bir işlem
yapmanıza gerek kalmadan sorunsuz çevrilip çalıştırılacaktır
"

Gelelim kod örneğine;

Ben .Net üzerinde C# kullanarak bir console uygulaması olarak geliştirdim.

    class Program
    {
        static void Main(string[] args)
        {
            ARP_List();
        }

        static void ARP_List()
        {
            bool eof = false;

            //COM bileşeni referansı oluşturuluyor
            UnityApplication unity = new UnityApplication();
            if (unity.Connect())
            {
                // Logo kullanıcısı ile giriş yapılıyor
                if (unity.UserLogin("LOGO_KULLANICISI", "SIFRE"))
                {
                    // Hangi firma üzerinde işlem yapılacağı "firma no" ile belirleniyor.
                    if (unity.CompanyLogin(310))
                    {
                        //Yeni bir sql sorgusu çalıştırmak istediğimizi belirtiyoruz.                       
                        Query qr = unity.NewQuery();                       

                        // Gerekli olan alanları (field) SelectClause ile belirtiyoruz.
                        qr.SQLClause.SelectClause.New("A.CODE", "code");
                        qr.SQLClause.SelectClause.New("A.DEFINITION_", "def");

                        // Hangi tablo ile veri işleyeceğimizi belirtiyoruz.
                        qr.SQLClause.FromClause.NewTable("LG_310_CLCARD", "A");

                        // Sorgumuzun kriterlerini belirtiyoruz.
                        // Burda CODE’u 100’e eşit olan firmalar listeleniyor.
                        qr.SQLClause.WhereClause.New("A.CODE", RelationalOperator.roEqual, "100", LogicalOperator.loNone);

                        //SQLClause ile oluşturulan sorgunun çıktısı Statement özelliğine atanıyor.
                        qr.Statement = qr.SQLClause.SQL;

                        // Sorguyu çalıştırıyoruz.
                        if (qr.OpenDirect())
                        {                           
                            eof = qr.First(); //İlk kayıt isteniyor. Yoksa false döner;

                            //First(); ile alınan ilk kayıt bilgisi okunuyor.
                            while (eof)
                            {
                                Console.WriteLine("{0}t{1}", qr.QueryFields[0].Value,
                                    qr.QueryFields[1].Value);

                                eof = qr.Next(); // Sonraki kayıt isteniyor. Yoksa false döner;
                            }
                        }

                        qr.Close(); // Sorgumuzu kapatıyoruz.
                    }
                    unity.CompanyLogout();
                }
                unity.UserLogout();
            }
            unity.Disconnect();
        }       
    }

Açıklamaları kodun içine yazdığım için tekrardan açıklamak gereği duymadım.

Umarım yardımcı olur…

Yorum Bırak

Comment