Macro tanımı UniDAC için SQL cümlesini parametre kullanmadan dinamik olarak değiştirmek şeklinde açıklanabilir. İlk etapta akla çok fazla kullanım alanı gelmiyor olsa da ya da parametre ile farkı yok gibi geliyor olsa da gerçek anlamda oldukça faydalı bir özelliktir.
En basit kullanım şekli aşağıdaki gibi olabilir:
Kod: Tümünü seç
select * from &tablename
Kod: Tümünü seç
Query1.SQL.Text := 'select * from &tablename';
Query1.MacroByName('tablename').Value := 'stok';
Query1.Open();
Kod: Tümünü seç
Query1.MacroByName('tablename').Value := 'stok';
Query1.Open();
Kod: Tümünü seç
Query1.Close();
Query1.MacroByName('tablename').Value := 'stokhareket';
Query1.Open();
TUniConnection Makro Kullanımı
Yukarıdaki örnekler TUniQuery içindeki makro kullanımını gösteren örneklerdi. Bunun dışında TUniConnection bileşeni içinde de makro kullanımı mümkün. TUniConnection içinde kullanılan makrolar tüm TUniQuery, TUniSQL bileşenlerinde çalışacaktır.
Örneğin, eski ve halen geliştirmekte olduğumuz uygulamamız daha önce FirebirdSQL database sunucusu kullanıyor idi ancak yeni sürümünde artık MySQL database sistemini kullanacağız. Bununla birlikte bazı tablo isimlerini de değiştirmek zorunda kaldık. UniDAC Makro özelliği ile bunu kontrol etmek aşağıdaki şekilde mümkün olacaktır.
Kod: Tümünü seç
UniConnection1.Open();
UniConnection1.Macros.Add('caritablosu', 'standart_sema.cari', 'MySQL'); // MySQL içinde tablo isimleri şema adı ile kullanılır
UniConnection1.Macros.Add('caritablosu', 'cari', 'Interbase'); // UniDAC içinde Interbase Provider Name FirebirdSQL için ortak kullanılır
Kod: Tümünü seç
UniQuery1.SQL.Text := 'SELECT Count(*) FROM {caritablosu}';
UniQuery1.Open();
FirebirdSQL için SQL komutu aşağıdaki şekilde database sunucusuna iletilecek
Kod: Tümünü seç
SELECT Count(*) from cari
Kod: Tümünü seç
SELECT Count(*) from standart_sema.cari
Kod: Tümünü seç
// Uygulama içinde maksimum 5 kayıt ile sınırlı gösterim alanlarımız için aşağıdaki şekilde genel makro tanımı yapılabilir
UniConnection1.Macros.Add('limit', 'LIMIT 0,5', 'MySQL');
UniConnection1.Macros.Add('limit', 'LIMIT 5 OFFSET 0', 'PostgreSQL');
//Standart FROM kelimesi tanımı yapıyoruz. Aşağıdaki tanım tüm database sunucularda çalışacaktır. UniConnection1.Macros.Add('from', 'FROM {caritablosu}', '');
// Aşağıdaki tanımda ise SQL içinde eğer limit makro tanımı var ise ekstra limit makrosu eklenmesini sağlıyoruz.
UniConnection1.Macros.Add('from', 'FROM {caritablosu} {limit}', 'limit');
Kod: Tümünü seç
UniQuery1.SQL.Text := 'SELECT kodu,unvani {from}';
UniQuery1.Open();
Kod: Tümünü seç
SELECT kodu,unvani FROM standart_sema.cari LIMIT 0,5
Kod: Tümünü seç
SELECT kodu,unvani FROM cari LIMIT 5 OFFSET 0
https://www.devart.com/dbmonitor/download.html
Gerçek Hayat Kullanım Örneği
Buraya kadar anlatılanlar ağırlıklı olarak teorik bilgiler idi. Ancak bazı database sistemlerinde yukarıdaki gibi bir from ve limit makro tanımı yapmak mümkün olmayabiliyor. Mesela SQL Server TOP kelimesini kullanıyor ve FROM ifadesinden sonra değil SELECT ifadesinden önce kullanıyor.
Böyle durumlar için aşağıdaki şekilde bir yaklaşım kullanılabilir (Sadece aşağıdaki genel makro tanımları yapılacaktır. Yukarıdaki örneklerden bağımsızdır)
Kod: Tümünü seç
UniConnection1.Macros.Add('limitmysql', 'LIMIT 0,5', 'MySQL');
UniConnection1.Macros.Add('limitsql', 'TOP 5', 'SQL Server');
UniConnection1.Macros.Add('caritablosu', 'standart_sema.cari', 'MySQL');
UniConnection1.Macros.Add('caritablosu', '[dbo].cari', 'SQL Server');
Kod: Tümünü seç
UniQuery.SQL.Text := 'select {limitsql} * from {caritablosu} {limitmysql}';
Yukarıdaki gibi bir tanımdan sonra UniDAC eğer SQL Server kullanılıyor ise
Kod: Tümünü seç
select TOP 5 from [dbo].cari
Kod: Tümünü seç
select * from standart_sema.cari LIMIT 5,0
Son olarak, genel makro tanımını TUniConnection bileşenine çift tıklayıp "Macro" sekmesine gelerek veya ilgili bileşen için makro tanımını ise yine bileşen üzerinde çift tıklayıp "Macro" sekmesine gelerek IDE içinden dizayn zamanında yapmak mümkün.
UniDAC ile ilgili daha fazla bilgi için:
https://www.devart.com/unidac/download.html