logo Unutmayayım diye yazdıklarım...


Logo Unity API'de SqlClause Kullanımı

14.01.2010 tarihinde oğuzhan tarafından yazıldı.

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...


 

#Salih Truan+, 03.03.2010 15:59:28 tarihinde demiş ki...
Selam hocam ben kodu kopyaladım ama bende Query nesnesıne hata verıyor, sanırım bıseyi yanlış yaptım
#Sebahattin KOÇ-, 15.04.2010 15:47:10 tarihinde demiş ki...
qr.SQLClause.WhereClause.New("A.CODE", RelationalOperator.roEqual, "100", LogicalOperator.loNone);

burada "100" "'100'" şeklinde tek tırnak arasına alınınca çalışıyor.

#Oğuzhan-, 15.04.2010 15:58:18 tarihinde demiş ki...
Düzeltme için teşekkürler Sebahattin.
#Mert KUŞCUGİL-, 17.05.2010 11:21:42 tarihinde demiş ki...
Oğuzhan bey merhaba.
Teşekkürler bu eşsiz değerdeki kaynak için.
Ben yukardaki kodu kullanarak Logoya bağlanamadım. Kod içerisinde step by step gidince Unity.Connect() olmadığını görüyorum. Dll i register ettim ve projeme ekledim. Obje lisansım da var ama. Sorun ne olabilir acaba. Teşekkürler şimdiden. İyi çalışmalar.
#Yunus Emre+, 13.07.2010 11:45:04 tarihinde demiş ki...
Merhaba Oğuzhan ,
Logo da Varyantlı malzeme oluşturma konusunda bir bilgin var mı acaba _?

Yorum Yapın
İsim (String)
Mail (String)
1, 4 daha yapar. (Int)

*NVarChar*3 + html desteğide yok.
(bit)
Sosyal Ağ Antenleri
Blog RSSLinkedinFacebookFlickrTwitterFriendfeedGoogle ReaderYoutubegit
  • Açılış
  • Projelerim
  • Arşiv
  • İletişim
  • En çok ilgi görenler...

    HP IPAQ 914c
    Mikrotik
    NETSH'dan faydalanmak
    Togi Twitter Client
    Mikrotik ADSL Bridge.
    Netsis SQL Raporları.
    SQL Server Optimizasyonu.
    VBScript.Encode - Encode
    C# ile DataGridView den Excel 'e
    C# ile mail gönder
    Netsis SQL Server Değişikliği.
    Windows Sunucularda SYN Atakları.

    Rastgele birşeyler...

    MonoDevelop 1.0...
    HP IPAQ 914c...
    Cmd Scripts...
    Proje: MSN Translate...
    Türk Blog Yazarları ...
    Ya bu ne oldu böyle ...
    Horray!...
    Apache için .htacces...
    Binbaşı ile Diyalogl...
    Windows Monitörleri ...
    Ulen! Ben bunu düşün...
    Maaş Kesintisi...
    NETSH'dan faydalanma...
    Okul Zilinde Ritmotr...
    Microsoft Product Su...
    Access Web Paylaşımı...

    Şebeke

    WHT, Fıroİş, Denizİş, Serkan, Semih, Sewgi, Beşir, İzgençvos, Erkan, Mumin, Aliİş, Lütfü, Alper, Yusuf

    2003 - Oğuzhan YILMAZ
    Bir şey alıntıladığınız zaman kaynak göstermeniz yeterli.


    Web Hosting Sponsor Vargonen Technologiies