Makale Özeti

Axapta içerisinde, sql ifadeleri klasik sql ifadelerine benzesede farklılar göstermektedir. Kendine özel bir yazım sitili mevcuttur.

Makale

AXAPTA – 14

AXAPTA İÇİNDE SQL KULLANIMI

Axapta içerisinde, sql ifadeleri klasik sql ifadelerine benzesede farklılar göstermektedir. Kendine özel bir yazım sitili mevcuttur.

SELECT İfadeleri

Select ifadesi ile tablo / tablolar üzerindeki kayıdı okuyabiliriz. Yazım kuralları:

Select ifadesi: select TabloAdı

Parametreler: [ [ Arama Opsiyonları ] [ Listelenecek Sahalar from ] ] TabloAdının AtandığıDeğişken [İndeks ifadesi] [ Opsiyonlar ] [ Where ifadesi ] [ Join ifadesi ]

         Arama Opsiyonları: reverse | firstfast | firstonly | forupdate | nofetch

         Listelenecek Sahalar: Listelenecek saha olarak bir ifade kullanmazsanız, * gibi tabloya ait tüm kayıtları getirir. Eğer bir bilgi girerseniz istediğiniz sahaları , ile ayırarak yan yana getirebilirsiniz. Tüm kayıtları almak istediğinizi belirtmek için * ifadesini de kullanabilirsiniz.

         Fonksiyonel ifadeler: sum | avg | minof | maxof | count , bu ifadeler yardımı ile belirttiğimiz sahalar için ilgili işlemi gerçekleştirebiliriz. Ancak bu ifadeleri Sql server üzerinde olduğu gibi komplike kullanamıyoruz. Örneğin iki sahanın çarpımının toplamını almak gibi...

         Opsiyonlar: ( order by | group by ) SahaAdı { , SahaAdı } , birden fazla saha üzerinde sıralama ve gruplama gerçekleştirebiliriz.

         İndeks ifadesi: index Idx | index hint idx  , tablo üzerinde tanımlı indeks varsa, o indekse göre getirmesini sağlayabiliriz.

         Sıralama: asc | desc , A-Z veya Z-A sıralamasını yapabiliriz.

         Where ifadesi: where ifade Bir veya birden fazla kriter verebiliriz.

         Join ifadesi: [exists | notexists | outer ] join Parametreler , Birçok tablo üzerinde bağlantı kurarak işlem yapabiliriz.

Select ifadesinden dönen değerler sadece tablo ismine atanmış olan değişken adı aracılığı ile alınır. Eğer sum, count gibi hesaplama yaptırdıysanız, ilgili tablo değişkeninin hangi sahası alınmış ise onun aracılığı ile erişilir.

Verdiğiniz kriter sayısı birden fazla ise bu kriterleri && ile birleştiririz. Sql ifadesi içindeki eşit, eşit değil gibi karşılaştırmalar ise Axapta diline göre verilmektedir. Örneğin eşitlik kriteri == ile, eşit değil ise != ile verilmektedir. Bu anlamda da sql server ile farklılık göstermektedir.

firstonly ifadesi ile tablo üzerinde sadece tek kayıdı almak istersek bunu belirtebiliriz.

Örnek sorgu:

         SalesTable     _SalesTable;

         ;       

Select          _SalesTable; veya Select    * from _SalesTable;

Select          SalesId, CustAccount from _SalesTable;

While Select

Yukarıdaki sorguda sadece tek kayıt geriye döner. Eğer ilgili kriter ve durumlara uygun tablo / tablolar içindeki tüm kayıtları almak istiyorsak while select ifadesi ile sorguyu çalıştırmamız gerekmektedir.

CustTable      _ Cust;

;

while select Cust order by NameRef

where Cust.AccountNo > “1000” && Cust.AccountNo <=”5000”

{

print Cust.NameRef,” ”, Cust.TelephoneNo;

}

Join ifadesi ile de birden fazla tablo arasında ilişki sağlayabiliriz. Örneğin:

SalesTable     _SalesTable;

SalesLine       _SalesLine;

;

While Select _SalesTable

         Join _SalesLine

                   Where _SalesTable.SalesId == _SalesLine.SalesId {

}

Order by [asc|desc] ifadesi ile kayıtlar üzerinde sıralama işlemi gerçekleştirebiliriz. Ancak aynı sorgu üzerinde hem order by hem de group by ifadesi kullanamayız. Group By ile gruplama yaptığınız zaman, otomatik olarak order by görevini de görmektedir.

INSERT İfadeleri

INSERT ifadesi ile, tablo / tablolar içine kayıt ekleyebiliriz. Insert ifadesi ile kayıt eklediğimiz zaman, RecId gibi sistem tarafından sağlanan sahalar otomatik olarak güncellenir. Örnek uygulama:

CustTable      _CustTable;

;

_CustTable.AccountNum = “10000“;

_CustTable.Name           = “Deneme”;

_CustTable.insert();

Değişken olarak tanımladığımız tablonun ilgili sahalarına gerekli atamaları bu şekilde yaptıkdan sonra, tüm tablolarda bulunan insert() metodunu çağırarak kayıt ekleme işini aktif hale getirebiliriz.

UPDATE İfadesi

UPDATE ifadesi ile, tablo / tablolar üzerinde bilgi güncelleme yapabiliriz. Update işlemini gerçekleştirmek için, hangi tablo üzerinde güncelleme yapacaksak o tabloyu bir değişken olarak tanımladıkdan sonra update modunda açmamız gerekmektedir. Bu işlemi ise select ifadesinden yararlanarak gerçekleştirebilir.

CustTable      _ CustTable;

;

ttsbegin;

select forupdate _CustTable

                   where CustTable.Name “test”;

CustTable.Name = “deneme”;

CustTable.update();

ttscommit;

select ifadesi ile ilgili tabloyu forupdate ifadesini kullanarak güncelleme modundan açtıkdan sonra tablonun istediğimiz sahalarına gerekli atamalarını yapıp, tablonun update() metodunu çağırmamız gerekmektedir.

Ancak select ifadesini kullandığımız için bu sorgu sadece bulunan ilk kayıt için çalışacaktır. Eğer bulunan tüm kayıtlar için çalışmasını istiyorsak,

CustTable      _ CustTable;

;

ttsbegin;

while select forupdate _CustTable

                   where CustTable.Name “test” {

CustTable.Name = “deneme”;

CustTable.update();

}

ttscommit;

ifadesini çalıştırmamız gerekmektedir.

DELETE İfadesi

DELETE ifadesi ile, tablo / tablolar üzerinde kayıt silme işlemini yapabiliriz. Delete işlemini gerçekleştirmek için, hangi tablo üzerinde silme yapacaksak o tabloyu bir değişken olarak tanımladıkdan sonra update modunda açmamız gerekmektedir. Bu işlemi ise select ifadesinden yararlanarak gerçekleştirebilir. Kullanım olarak UPDATE’e benzer, tek farkı tablonun delete() metodunu çağırmamızdır.

CustTable      _ CustTable;

;

ttsbegin;

while select forupdate _CustTable

                   where CustTable.Name “test” {

CustTable.delete();

}

ttscommit;

Yeliz Korkmaz, MVP

yelizkorkmaz@tnn.net