param by name
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
-
- Üye
- Mesajlar: 330
- Kayıt: 09 Mar 2004 11:18
- Konum: Konya
- İletişim:
param by name
S.A.
tüm forma kolay gelsin. İyi çalışmalar...
Formda sıkça karşılaştığım bir kod.. parambyname
(belki Mustafa hocam biraz kızacak niye aramadın diye ama )
Bu kod ile query e değer gönderiyoruz tamam. Kullanımı da zaten hemen hemen formun tamamında var.Ama ben çalışma mantığını anlayamadım
BU konuda biraz açıklama yapabilirseniz çok memnun olurum...
Bir de query içine yazdığımız kodu program içinde tekrar yazmadan nasıl kullanabilirim? basit noktalar ama bilmeden bişey yapılamıyor.
Tüm forma teşekkür ederim.
tüm forma kolay gelsin. İyi çalışmalar...
Formda sıkça karşılaştığım bir kod.. parambyname
(belki Mustafa hocam biraz kızacak niye aramadın diye ama )
Bu kod ile query e değer gönderiyoruz tamam. Kullanımı da zaten hemen hemen formun tamamında var.Ama ben çalışma mantığını anlayamadım
BU konuda biraz açıklama yapabilirseniz çok memnun olurum...
Bir de query içine yazdığımız kodu program içinde tekrar yazmadan nasıl kullanabilirim? basit noktalar ama bilmeden bişey yapılamıyor.
Tüm forma teşekkür ederim.
query içine yazdığın kodu string bir değişkende tutarak yeniden yazmak yerine
şeklinde yapabilirsin veya veritabanında bir alanda tutabilirsin. Daha bir çok yol var. Seçim sizin.
Kod: Tümünü seç
query1.sql.text:=stringdeğişken;
Bilgi paylaşıldıkça güzeldir.
S.A.
eğer sql i değiştirmezsen aynı sql i kullanırsın. forma koyduğun zaman object ispector den sql i yazarsın. kodla da parametrelere (eğer kullandıysan )gönderme yapıp kullanırsın.
Niçin parametre kullanırız?
bunu bi örnekle açıklamaya çalışıyım.
Arama formu hazırladığını düşün.
sql şöle bişi olsun
adı ahmet olan kayıtları getirdik ama kullanıcı aradığı kişinin adını kendisi yazmak isteyecektir. bu durumda kod şöle bi hal alacaktır. bunu her seferinde değiştirmemiz gerekecektir.
bu sql i her çağırışında önce sql prepare edilecek sonra çalıştırılacaktır.
kayıt çok olmadığı zaman belki bu süre pek önemsenmeyecek ama kayıt sayısı arttıkça bu beklemeler kullanıcı tarafından pek hoş karşılanmaz.
bunun yerine sql i şu şekide değiştirsek
kullanıcı editteki bilgiyi değiştirdiği zaman sizin yapmanız gereken parametreyi değiştirmek.
Özet olarak Parametreleri kullanarak sabit sqllere dinamik (tabiri caizse) bir yapıya kavuşturmuş oluyoruz. Böylelikle sql tekrar tekrar prepare edilmiyor.
Umarım kafanı karıştırmamışımdır. sürçü lisan ettikse affola
kolay gelsin.
eğer sql i değiştirmezsen aynı sql i kullanırsın. forma koyduğun zaman object ispector den sql i yazarsın. kodla da parametrelere (eğer kullandıysan )gönderme yapıp kullanırsın.
Niçin parametre kullanırız?
bunu bi örnekle açıklamaya çalışıyım.
Arama formu hazırladığını düşün.
sql şöle bişi olsun
Kod: Tümünü seç
select * from tablo where adi like '%ahmet%'
Kod: Tümünü seç
query1.sql.clear;
query1.sql.add('select * from tablo where adi like '''%'''+edit1.text+'''%');
query1.open;
kayıt çok olmadığı zaman belki bu süre pek önemsenmeyecek ama kayıt sayısı arttıkça bu beklemeler kullanıcı tarafından pek hoş karşılanmaz.
bunun yerine sql i şu şekide değiştirsek
Kod: Tümünü seç
select * from tablo where adi like :ADI
Özet olarak Parametreleri kullanarak sabit sqllere dinamik (tabiri caizse) bir yapıya kavuşturmuş oluyoruz. Böylelikle sql tekrar tekrar prepare edilmiyor.
Umarım kafanı karıştırmamışımdır. sürçü lisan ettikse affola
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
-
- Üye
- Mesajlar: 330
- Kayıt: 09 Mar 2004 11:18
- Konum: Konya
- İletişim:
arkadaşlar ilginize çok teşekkür ederim.
Aslangeri kardeşim anladığım şu: Query içindeki kodu sürekli clear edip aynı kodları yazmak sorguyu yavaşlatıyor..
Bunun yerine program içinden değer göndermek performansı artırıyor...Doğru mu anladım acaba?
Bahsettigin olay için ben şöyle bir yapı kullanıyorum.
tabi bunu her zaman kullanmıyordum..query içindeki kodlar karışık olduğu zaman kullanıyordum..Ama bundan sonra sürekli olarak kullanacağım...Çok teşekkür ederim...
Peki PARAMBYNAME kod satırı da yukarıdaki kod ile aynı işimi yapıyor acaba
MEPC kardeşim anladığım kadarıyla da bu olay performansı düşürüyor...Çünki query de yazdığım kodu silip tekrar yazmak gibi bir gafletle sql kodlarını çalıştırıyorum.Benim için önemli olan kod yazmamak değil. Performansı artırmak istiyorum.(Bunun için fazladan 100 satır daha yazabilirim )
Arkadaşlar ilginize çok teşekkür ederim...
Aslangeri kardeşim anladığım şu: Query içindeki kodu sürekli clear edip aynı kodları yazmak sorguyu yavaşlatıyor..
Bunun yerine program içinden değer göndermek performansı artırıyor...Doğru mu anladım acaba?
Bahsettigin olay için ben şöyle bir yapı kullanıyorum.
Kod: Tümünü seç
query.close;
query[1]:=where adi like'''+edit1.text+'%''';
query.open;
Peki PARAMBYNAME kod satırı da yukarıdaki kod ile aynı işimi yapıyor acaba
MEPC kardeşim anladığım kadarıyla da bu olay performansı düşürüyor...Çünki query de yazdığım kodu silip tekrar yazmak gibi bir gafletle sql kodlarını çalıştırıyorum.Benim için önemli olan kod yazmamak değil. Performansı artırmak istiyorum.(Bunun için fazladan 100 satır daha yazabilirim )
Arkadaşlar ilginize çok teşekkür ederim...
Yukarda yazdığın kodda sql de değişiklik yapar ve oda performans için uygun değil.
edit1.text sql i tasarım anında oluştur. where kullanmak için parametreleri kullan.
şöle bişi oluşturabilirsin.
böylelikle adı parametresine değer göndermezsen tüm kayıtları getirir. Eğer değer gönderirsen aradığın kayıtları getirir. like daki '%' için kullanıcıya edite değer girdiği yerde bir comboboxtan başlayan , biten ve hepsi seçeneklerinden birini seçtirirsin. ona göre parametrenin başına veya sonuna '%' eklersin.
Kolay gelsin.
edit1.text sql i tasarım anında oluştur. where kullanmak için parametreleri kullan.
şöle bişi oluşturabilirsin.
Kod: Tümünü seç
select * from adlar
where (adi like :ADI) or (:ADI='')
Kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
-
- Üye
- Mesajlar: 330
- Kayıt: 09 Mar 2004 11:18
- Konum: Konya
- İletişim:
ASLANGERİ KardeşimÇok teşekkür ederim.. Allah Razı olsun. Biraz başını ağrıttım..(her zamanki gibi )
Yanlız soru soruyu getiriyo gibi oluyo..(okulda herşeyden biraz biraz verilince hiç birşey öğrenemeden mezun olduk işte)
benim program içinde kullandığım genel yapı bu...
senin önerdiğin şekilde program içinde hangi yapıda kod yazmam gerekiyor... (sen zaten yukarda belirttin ama ben edit1.text göremeyince nasıl kullanacağımı bir türlü kestiremedim )
Yanlız soru soruyu getiriyo gibi oluyo..(okulda herşeyden biraz biraz verilince hiç birşey öğrenemeden mezun olduk işte)
Kod: Tümünü seç
with dm.sevrak_kayit do
begin
close;
sql.Clear;
sql.Add('select * from sirket_evrak');
sql.Add('where evrak_no='''+edit1.Text+'''');
open;
end;
senin önerdiğin şekilde program içinde hangi yapıda kod yazmam gerekiyor... (sen zaten yukarda belirttin ama ben edit1.text göremeyince nasıl kullanacağımı bir türlü kestiremedim )
Merhaba ilave olarak olarak şunuda belirtmek isterim ki ;
ParamByName özelliği SQL cümlesinde kullanılan parametrelerin isimleri bilindiği sürece kullanılabilir.
Fakat kimi zaman programcılar duruma göre dinamik SQL sorguları oluşturmak isteyebilir ve kimi zaman bu durumda parametrelerin isimlerini kullanmak kod kargaşasına sebebiyet verebilir.
Böyle hallerde Params[0] özeliği ile ile parametre dizisine indis numarasıyla erişmek daha akılcı olur.
Uzun lafın kısası, Şöyle bir cümlede,
senin sorgularında kullancağın yapıya gelirsek;
Burada vereceğin parametre isimlerinin hiç bir önemi yok.
Başarılar.
ParamByName özelliği SQL cümlesinde kullanılan parametrelerin isimleri bilindiği sürece kullanılabilir.
Fakat kimi zaman programcılar duruma göre dinamik SQL sorguları oluşturmak isteyebilir ve kimi zaman bu durumda parametrelerin isimlerini kullanmak kod kargaşasına sebebiyet verebilir.
Böyle hallerde Params[0] özeliği ile ile parametre dizisine indis numarasıyla erişmek daha akılcı olur.
Uzun lafın kısası, Şöyle bir cümlede,
Kod: Tümünü seç
select *from adres where adi=:adi
ParamByName('adi').Asstring:=.........
ile
Params[0].Asstring:=...... aynı işi yapacaktır.
Kod: Tümünü seç
with dm.sevrak_kayit do
begin
close;
sql.Clear;
sql.Add('select * from sirket_evrak');
sql.Add('where evrak_no=:eno');
ParamByName('eno').Asstring:=edit1.text;
open;
end;
Başarılar.
Volkan KAMADAN
www.polisoft.com.tr
www.polisoft.com.tr
-
- Üye
- Mesajlar: 330
- Kayıt: 09 Mar 2004 11:18
- Konum: Konya
- İletişim:
VKAMADAN kardeşim verdiğin bilgiden dolayı çok teşekkür ederim.
ASLANGERİ kardeşim sana da teşekkür ederim.
Şimdi çıkardığım sonuç:Query nin içine kodları yazmak ve programın içinden PARAMBYNAME veya PARAMS la değerleri göndermek...Bu şekilde hem performansı artırmak hem de sürekli aynı kodları yazmamak.(kod karmaşasını önlemek)
Bu gün epey kazançlı olarak güne başlıyorum... Allah'ım günün bereketini eksik etmesin...
Tüm Formdan ve sizlerden ALLAH RAZI OLSUN...
Hepimize kolay gelsin...
İyi çalışmalar.
ASLANGERİ kardeşim sana da teşekkür ederim.
Şimdi çıkardığım sonuç:Query nin içine kodları yazmak ve programın içinden PARAMBYNAME veya PARAMS la değerleri göndermek...Bu şekilde hem performansı artırmak hem de sürekli aynı kodları yazmamak.(kod karmaşasını önlemek)
Bu gün epey kazançlı olarak güne başlıyorum... Allah'ım günün bereketini eksik etmesin...
Tüm Formdan ve sizlerden ALLAH RAZI OLSUN...
Hepimize kolay gelsin...
İyi çalışmalar.
S.A.
yalnız bir nokta gözden kaçmasın. şeklinde yapıldığı zaman sqlde değişiklik oluyor. sql i tasarım anında object inspectorden yazarsan yukardaki satırlarına gerek kalmayacak sadece satırı işini görecektir.
İyi çalışmalar kolay gelsin.
yalnız bir nokta gözden kaçmasın.
Kod: Tümünü seç
with dm.sevrak_kayit do
begin
close;
sql.Clear;
sql.Add('select * from sirket_evrak');
sql.Add('where evrak_no=:eno');
ParamByName('eno').Asstring:=edit1.text;
open;
end;
Kod: Tümünü seç
sql.Clear;
sql.Add('select * from sirket_evrak');
sql.Add('where evrak_no=:eno');
Kod: Tümünü seç
ParamByName('eno').Asstring:=edit1.text;
İyi çalışmalar kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
-
- Üye
- Mesajlar: 330
- Kayıt: 09 Mar 2004 11:18
- Konum: Konya
- İletişim:
ASLANGERİkardeşim tekrar teşekkürler...
sorunu şimdi tam olarak çözdük...
ikinci sorumun cevabı ise çok basitmiş...
bu şekilde query içine yazlıan kodlar çalıştırılıp sonuç alınıyor...
(1. veya 2. seminerde execsql in yaptığı işi anlatıyordu ama gözden kaçırmışım )
Tüm forma ve bu ortamı oluşturanlara tekrar çok teşekkür ederim..ALLAH RAZI olsun..
ALLAH www delphiturkiye.com/forumu VİRÜSLER den korusun
sorunu şimdi tam olarak çözdük...
ikinci sorumun cevabı ise çok basitmiş...
Kod: Tümünü seç
query.close;
query.execsql;
query.open;
(1. veya 2. seminerde execsql in yaptığı işi anlatıyordu ama gözden kaçırmışım )
Tüm forma ve bu ortamı oluşturanlara tekrar çok teşekkür ederim..ALLAH RAZI olsun..
ALLAH www delphiturkiye.com/forumu VİRÜSLER den korusun