Logo Unity API'de SqlClause Kullanımı

Gönderen Konu: Logo Unity API'de SqlClause Kullanımı  (Okunma sayısı 1326 defa)

0 Üye ve 1 Ziyaretçi konuyu incelemekte.

Çevrimdışı c1982

  • Yeni Kullanıcı
  • *
  • Karma: 1
Logo Unity API'de SqlClause Kullanımı
« : 24.01.2010, 05:32 »
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, yasak 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...

Kaynak : http://www.oguzhan.info/bak.asp?516/Logo+Unity+API%27de+SqlClause+Kullan%FDm%FD