program yazarken izlediğim yol doğru mu yanlış mı?
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
- huseyinert
- Üye
- Mesajlar: 233
- Kayıt: 19 Nis 2005 06:49
- Konum: Bartın
program yazarken izlediğim yol doğru mu yanlış mı?
s.a arkadaşlar
yazdığım programlarda 100 bin kayıt civarlarına ulaştığında yavaşlama oluyor, ve program yavaş açılıyor. program yazarken kullandığım yöntem ve yol yanlışmı doğrumu çok merak ediyorum aşağıda program yazarken geçtiğim çalışmaları adım adım anlatacağım;
1. formları tasarlıyorum.nesneleri yerleştiriyorum (db bileşenlerini kullanıyorum. dbedit, dbcombobox...)
2.datamodüle de ibdataset ... nesnelerimi koyuyorum.
3.ibexpert ten vt. oluşturuyorum. gerekli alanlara index oluşturuyorum, foringkey pri. key falan oluturuyorum.
4. ibdatasettin select sql özelliğine (object inspectordan select *from table detail olanlarada select *from table where (id=:id) diyorum.
sanırım burda select *from demek yanlış oluyor bir anda tabloda 100 bin kayıt varsa hepsini çekiyor. bu yavaşlamaya neden olabilir gibi geliyor. ama oraya nasıl bir sql cümleciği yazmalıyım bilmiyorum.
5. datamodülün create olayında master ibdatasetleri open yapıyorum. masterların detaillerinide masterların afteropen nında open beforeclose unda close yapıyorum. sanırım burda da tüm ibdatasetlerin açık olması yavaşlamaya sebep oluyor ama eğer öyleyse datasetler nerde açıp nerde kapatacağım ben şöle düşündüm doğruluğundan emin olmak için söylüyorum. kayıt işlemi yapılacaksa ibdatasetin before insert olayında dataseti open after post olayından sonrada close yapmak gerekir gibi geliyor.
6. kayıt etme,silme, vb. işlemeri ibdataset.insert, ibdataset.post,ibdataset.cancel komutlarıyla yapıyorum bunlardan dolayı bir yavaşlama olurmu?
7. raporlarda sql kullanıyorum, ama stored procedure leri kullanmıyorum doğrudan tarih aralığını belirterek
ibdataset.close;
ibdataset.selectsql.clear;
ibdataset.selectsql.add('select *from table where tarih aralığı...');
ibdataset.open
.......
bu şekilde bunlardan dolayı bir yavaşlama oluşabilirim?
viewtopic.php?t=402&highlight=query+open+close
bu linkte mustafa hocam açıklamış fakat bu table nesnesini kullanırken firebird için geçerlimi acaba, bide şöle bişey var kullandığımız ibdataseti kullanacağımız zaman açıp işimiz bittiğinde kapatacağız devamlı aç kapa açkapa olayı sorun çıkarmazmı yani yavaşlatmamı? nasıl yapmalıyız bu konuda önemli devamlı açıkmı kalmalı ibdatasetlerimiz...
arkadaşlar bayağa bi yazdım.
okuduğunuz için tşk. ederim yardımlarınızı bekliyoeum
kolay gelsin
yazdığım programlarda 100 bin kayıt civarlarına ulaştığında yavaşlama oluyor, ve program yavaş açılıyor. program yazarken kullandığım yöntem ve yol yanlışmı doğrumu çok merak ediyorum aşağıda program yazarken geçtiğim çalışmaları adım adım anlatacağım;
1. formları tasarlıyorum.nesneleri yerleştiriyorum (db bileşenlerini kullanıyorum. dbedit, dbcombobox...)
2.datamodüle de ibdataset ... nesnelerimi koyuyorum.
3.ibexpert ten vt. oluşturuyorum. gerekli alanlara index oluşturuyorum, foringkey pri. key falan oluturuyorum.
4. ibdatasettin select sql özelliğine (object inspectordan select *from table detail olanlarada select *from table where (id=:id) diyorum.
sanırım burda select *from demek yanlış oluyor bir anda tabloda 100 bin kayıt varsa hepsini çekiyor. bu yavaşlamaya neden olabilir gibi geliyor. ama oraya nasıl bir sql cümleciği yazmalıyım bilmiyorum.
5. datamodülün create olayında master ibdatasetleri open yapıyorum. masterların detaillerinide masterların afteropen nında open beforeclose unda close yapıyorum. sanırım burda da tüm ibdatasetlerin açık olması yavaşlamaya sebep oluyor ama eğer öyleyse datasetler nerde açıp nerde kapatacağım ben şöle düşündüm doğruluğundan emin olmak için söylüyorum. kayıt işlemi yapılacaksa ibdatasetin before insert olayında dataseti open after post olayından sonrada close yapmak gerekir gibi geliyor.
6. kayıt etme,silme, vb. işlemeri ibdataset.insert, ibdataset.post,ibdataset.cancel komutlarıyla yapıyorum bunlardan dolayı bir yavaşlama olurmu?
7. raporlarda sql kullanıyorum, ama stored procedure leri kullanmıyorum doğrudan tarih aralığını belirterek
ibdataset.close;
ibdataset.selectsql.clear;
ibdataset.selectsql.add('select *from table where tarih aralığı...');
ibdataset.open
.......
bu şekilde bunlardan dolayı bir yavaşlama oluşabilirim?
viewtopic.php?t=402&highlight=query+open+close
bu linkte mustafa hocam açıklamış fakat bu table nesnesini kullanırken firebird için geçerlimi acaba, bide şöle bişey var kullandığımız ibdataseti kullanacağımız zaman açıp işimiz bittiğinde kapatacağız devamlı aç kapa açkapa olayı sorun çıkarmazmı yani yavaşlatmamı? nasıl yapmalıyız bu konuda önemli devamlı açıkmı kalmalı ibdatasetlerimiz...
arkadaşlar bayağa bi yazdım.
okuduğunuz için tşk. ederim yardımlarınızı bekliyoeum
kolay gelsin
"Kula bela gelmez Hak yazmayınca,Hak bela yazmaz kul azmayınca..." MEVLANA
-
- Kıdemli Üye
- Mesajlar: 1223
- Kayıt: 26 Nis 2005 04:08
Merhaba.
Bunu bir bütün olarak değerlendirirsek; lazım olan her şey create edilir (AutoCreate edilmesi gereken şeyler istisna elbet..) işlem yapılır, ve free edilir (kalması gerekmiyorsa tabii..). Tabloların açılması vs.olayı da elbette ilgili formun show edilmesi (ya da ilgili trans işleminin yapılması..) esnasında yapılır ve bitiminde tekrar kapatılması gerekir..Zira esnek bir proje geliştirmek için de kullanılan teknik budur..
Kolay gelsin..
Bunu bir bütün olarak değerlendirirsek; lazım olan her şey create edilir (AutoCreate edilmesi gereken şeyler istisna elbet..) işlem yapılır, ve free edilir (kalması gerekmiyorsa tabii..). Tabloların açılması vs.olayı da elbette ilgili formun show edilmesi (ya da ilgili trans işleminin yapılması..) esnasında yapılır ve bitiminde tekrar kapatılması gerekir..Zira esnek bir proje geliştirmek için de kullanılan teknik budur..
Kolay gelsin..
Merhaba, @huseyinert
1) Genel olarak Kullandığınız SQL cümlelerinde niçin Select * ..... diye bir ifadeye ihtiyaç duyuyorsunuz en büyük yavaşlama burada oluyor, yani Select alan1,alan2..... diye yazarsanız bence farkedilebilkir derecede hız gözlemlersiniz.
2)Hocam gerektikçe Queryleri çalıştırın, yani kullanıcı o formu kullanırken query aktif edin ama bu ilk kullanımlar için tavsiye edilmez.
3)Son olarakta ekrana listeleteceğiniz kadar alanı SQL ile seçtirebilrsiniz çoğu muh. prog bu yöntemi seçerek listeletmede çok fazla zaman ve hız kazanırlar.
4)Sizinde belirttiğiniz şekilde bazı işlermleri sp ile yapmanız programdan ziyade ağdaki işlemleri hızlandırarak ana makinaya yüklenmeyi engelleyecektir bunun bir artısıda aynı program için örn; web'e taşıyacaksınız, bu işlem çok küçük bir ara yazılımla olacaktır herşeyi vt yapacaktır.(DT 8.Seminer
)
Aklıma gelenler bunlar (bende milyon kayıtlarla çalışmak zorundayım bazen 1-5 sn arasında işlemlerin hızı değişiyor. Bazen küçücük bir değişiklik bile programın hızına hız kazandırıyor.
Saygılarımla
Çalışmalarınızda başarılar.
Not:Bu tür işlemleri yaptıktan forumdan ve çevrenizden bilgileri aldıktan sonra sonucun olumlu olması halinda yaptıklarınızı yazarsanzı hatta bu başlık altına yazarsak (hepimiz) çok güzel bir sonuç olmuş olur.
1) Genel olarak Kullandığınız SQL cümlelerinde niçin Select * ..... diye bir ifadeye ihtiyaç duyuyorsunuz en büyük yavaşlama burada oluyor, yani Select alan1,alan2..... diye yazarsanız bence farkedilebilkir derecede hız gözlemlersiniz.
2)Hocam gerektikçe Queryleri çalıştırın, yani kullanıcı o formu kullanırken query aktif edin ama bu ilk kullanımlar için tavsiye edilmez.
3)Son olarakta ekrana listeleteceğiniz kadar alanı SQL ile seçtirebilrsiniz çoğu muh. prog bu yöntemi seçerek listeletmede çok fazla zaman ve hız kazanırlar.
4)Sizinde belirttiğiniz şekilde bazı işlermleri sp ile yapmanız programdan ziyade ağdaki işlemleri hızlandırarak ana makinaya yüklenmeyi engelleyecektir bunun bir artısıda aynı program için örn; web'e taşıyacaksınız, bu işlem çok küçük bir ara yazılımla olacaktır herşeyi vt yapacaktır.(DT 8.Seminer

Aklıma gelenler bunlar (bende milyon kayıtlarla çalışmak zorundayım bazen 1-5 sn arasında işlemlerin hızı değişiyor. Bazen küçücük bir değişiklik bile programın hızına hız kazandırıyor.
Saygılarımla
Çalışmalarınızda başarılar.
Not:Bu tür işlemleri yaptıktan forumdan ve çevrenizden bilgileri aldıktan sonra sonucun olumlu olması halinda yaptıklarınızı yazarsanzı hatta bu başlık altına yazarsak (hepimiz) çok güzel bir sonuç olmuş olur.

Gün gelecek, dilleri, elleri ve ayakları yapmış oldukları bütün kötülükleri tek tek bildirerek aleyhlerinde şahitlik edecektir. [Nur Suresi 24]
_________________
_________________
- huseyinert
- Üye
- Mesajlar: 233
- Kayıt: 19 Nis 2005 06:49
- Konum: Bartın
tşk. ederim tabiki böyle bir ortamda bildiklerimizi paylaşmak çok güzel ve bundan mutluluk duyarız.
hocam sql se alanları seçin demişsiniz...select alan1,alan2... falan diye bunu raporlarda kullandığımız ibquerylerde yapıyorum ama kayıt silme ve kaydetme işlemlerini yaptırdığım ve object inspector dan select sql ine yazığım sql de yapmam olurmu acaba zaten orda bize bütün alanlar gerekli değilmi?
birde arkadaşlar sorumda yazdığım tüm maddeleri dikkate alarak doğru olan program yazma yolu ve yöntemini kullanma şeklini maddeler halinde yazarsanız sanırım daha somut bişeyler ortaya çıkacak
çok tşk. ederim
hocam sql se alanları seçin demişsiniz...select alan1,alan2... falan diye bunu raporlarda kullandığımız ibquerylerde yapıyorum ama kayıt silme ve kaydetme işlemlerini yaptırdığım ve object inspector dan select sql ine yazığım sql de yapmam olurmu acaba zaten orda bize bütün alanlar gerekli değilmi?
birde arkadaşlar sorumda yazdığım tüm maddeleri dikkate alarak doğru olan program yazma yolu ve yöntemini kullanma şeklini maddeler halinde yazarsanız sanırım daha somut bişeyler ortaya çıkacak
çok tşk. ederim
"Kula bela gelmez Hak yazmayınca,Hak bela yazmaz kul azmayınca..." MEVLANA
- sadettinpolat
- Moderator
- Mesajlar: 2131
- Kayıt: 07 Ara 2003 02:51
- Konum: Ankara
- İletişim:
100 bin kayıtı aynı anda programa çektiğiniz sürece program hep yavaş çalışacaktır.
select cümlelerinizde where şartını kullanarak sadece size lazım olan kayıtları veritabanından çekin. listeleme yapmanız gerekiyorsada sql cümlesine first 100 gibi bir ifade koyarak listeyi yine sınırlandırın. bunun haricinde detail kayıtlar için uygun indexleri de oluşturmanız gerekir.
select * olayına gelirse işinize gelen alanları çekip kullanmak tabiki daha iyidir ama eğer bu alanlar içerisinde bir hayli büyük blob alanlar yoksa hızda çok etkili olmuyor....
select cümlelerinizde where şartını kullanarak sadece size lazım olan kayıtları veritabanından çekin. listeleme yapmanız gerekiyorsada sql cümlesine first 100 gibi bir ifade koyarak listeyi yine sınırlandırın. bunun haricinde detail kayıtlar için uygun indexleri de oluşturmanız gerekir.
select * olayına gelirse işinize gelen alanları çekip kullanmak tabiki daha iyidir ama eğer bu alanlar içerisinde bir hayli büyük blob alanlar yoksa hızda çok etkili olmuyor....
arkadaşın demek istediği sanırım şu:
object ins. dan datasetin sql özelliğine Select *from tablo_adi
şeklinde yazıyor.Bu da tüm alanları çektiği için yavaşlatıyor.Ama tüm alanları alması gerekiyor çünkü formdaki db nesneleri bu dataset bağlı sanırım. Bende de bu şekilde bir sorun var bunu daha değişik nasıl yapabiliriz ki.??
object ins. dan datasetin sql özelliğine Select *from tablo_adi
şeklinde yazıyor.Bu da tüm alanları çektiği için yavaşlatıyor.Ama tüm alanları alması gerekiyor çünkü formdaki db nesneleri bu dataset bağlı sanırım. Bende de bu şekilde bir sorun var bunu daha değişik nasıl yapabiliriz ki.??
"Bilginin Doruğuna Hep Birlikte..."
Merhaba,
bu şekilde 100 bin kayıt varsa hepside çekilmez. Siz IBDataset'i NExt ile hareket ettirdikçe yeni kayıt çekilir.
Şöyle bir deneme yapabilirsiniz. IBDataset'e Select * from ... yazarsınız. open metoduyla açarsınız, RecordCount değişkenine bakarsınız. 100 bin değildir değeri.
İlk etapta çekilen kayıt sayısı, ekran gösterilen kadardır (bileşene bağlı olarak). Mesela bir DBGrid koydunuz ve boyutlarını 15 kayıt gösterebilecek şekilde ayarladınız, o zaman DataSeti açtığınızda recordcount 15 olur.
Tüm kayıtları çekmek istiyorsanız FetchAll metodunu kullanırsınız.
Kod: Tümünü seç
Select * from ...
Şöyle bir deneme yapabilirsiniz. IBDataset'e Select * from ... yazarsınız. open metoduyla açarsınız, RecordCount değişkenine bakarsınız. 100 bin değildir değeri.
İlk etapta çekilen kayıt sayısı, ekran gösterilen kadardır (bileşene bağlı olarak). Mesela bir DBGrid koydunuz ve boyutlarını 15 kayıt gösterebilecek şekilde ayarladınız, o zaman DataSeti açtığınızda recordcount 15 olur.
Tüm kayıtları çekmek istiyorsanız FetchAll metodunu kullanırsınız.
Re: program yazarken izlediğim yol doğru mu yanlış mı?
Merhaba senin söylediğin çözüm yolu çon mantıklı geldi bana. Maddeler halinde irdelemek daha faydalı olur sanırım Önerimn için tşk ederim.
1. formları tasarlıyorum.nesneleri yerleştiriyorum (db bileşenlerini kullanıyorum. dbedit, dbcombobox...)
//Bu aşamada herhangi bir sıralama performansı azaltacağını düşünmüyorum +
2.datamodüle de ibdataset ... nesnelerimi koyuyorum.
//IbDataset ile alakalı bir yavaşlamada söz konusu olamaz +
3.ibexpert ten vt. oluşturuyorum. gerekli alanlara index oluşturuyorum, foringkey pri. key falan oluturuyorum.
//İndexleme için seçtiğin alanların doğruluğunu gözden geçir çünkü indexlemenin filitreleme ve raporlama çok büyük performans etkisinin olduğunu biliyorum ve okuduğum kaynaklardan da bu sonuç çıkıyor +
4. ibdatasettin select sql özelliğine (object inspectordan select *from table detail olanlarada select *from table where (id=:id) diyorum.
//Burada (select * from table) yerine (select alan1,alan2 from table) şeklinde yazmanız hızı çok fazlasıyla etkileyecektir. (ben 1 milyon üzerindeki kayıtlarla deneme şansım oldu 130 alan vardı hepsini seçtiği ile sadece işime yarayan yani 30 alan seçtiğimde 3-5 sn arasında karmaşık bir işlemde fark etti.) +
5. datamodülün create olayında master ibdatasetleri open yapıyorum. masterların detaillerinide masterların afteropen nında open beforeclose unda close yapıyorum. sanırım burda da tüm ibdatasetlerin açık olması yavaşlamaya sebep oluyor ama eğer öyleyse datasetler nerde açıp nerde kapatacağım ben şöle düşündüm doğruluğundan emin olmak için söylüyorum. kayıt işlemi yapılacaksa ibdatasetin before insert olayında dataseti open after post olayından sonrada close yapmak gerekir gibi geliyor.
//Bence bu bölümü gözden geçirin ben böyle kullanmadığım için tam bilemiyorum (en azından hangi işlemi yapıcaksanız işlem yapacağınız form açılırken Queryleri active yapabilrsiniz ama bu önerilmez.) +
6. kayıt etme,silme, vb. işlemeri ibdataset.insert, ibdataset.post,ibdataset.cancel komutlarıyla yapıyorum bunlardan dolayı bir yavaşlama olurmu?
//Kesinlikle bunun yavaşlamayla hiçbir alakası olamaz. +
7. raporlarda sql kullanıyorum, ama stored procedure leri kullanmıyorum doğrudan tarih aralığını belirterek
ibdataset.close;
ibdataset.selectsql.clear;
ibdataset.selectsql.add('select *from table where tarih aralığı...');
ibdataset.open
//Burada da herhangi bir sorun gözükmüyor (birde betveen kullanın performansı etkilemeyecek sadece alternatif) +
.......
Son olarak eklemek istedğim.
Bu sonunu çözmek için adım adım giderseniz yani hangi queryde hangi işlemi yaparken yavaşlama söz konusu o zaman sonuca ulaşmanız çok daha kolay olacaktır. +
Saygılarımla
Çalışmalarınızda başarılar dilerim.
Not:Bilgilerin tutarsızlığı durumunda düzeltirseniz sevinirim.
İyi akşamlar
1. formları tasarlıyorum.nesneleri yerleştiriyorum (db bileşenlerini kullanıyorum. dbedit, dbcombobox...)
//Bu aşamada herhangi bir sıralama performansı azaltacağını düşünmüyorum +
2.datamodüle de ibdataset ... nesnelerimi koyuyorum.
//IbDataset ile alakalı bir yavaşlamada söz konusu olamaz +
3.ibexpert ten vt. oluşturuyorum. gerekli alanlara index oluşturuyorum, foringkey pri. key falan oluturuyorum.
//İndexleme için seçtiğin alanların doğruluğunu gözden geçir çünkü indexlemenin filitreleme ve raporlama çok büyük performans etkisinin olduğunu biliyorum ve okuduğum kaynaklardan da bu sonuç çıkıyor +
4. ibdatasettin select sql özelliğine (object inspectordan select *from table detail olanlarada select *from table where (id=:id) diyorum.
//Burada (select * from table) yerine (select alan1,alan2 from table) şeklinde yazmanız hızı çok fazlasıyla etkileyecektir. (ben 1 milyon üzerindeki kayıtlarla deneme şansım oldu 130 alan vardı hepsini seçtiği ile sadece işime yarayan yani 30 alan seçtiğimde 3-5 sn arasında karmaşık bir işlemde fark etti.) +
5. datamodülün create olayında master ibdatasetleri open yapıyorum. masterların detaillerinide masterların afteropen nında open beforeclose unda close yapıyorum. sanırım burda da tüm ibdatasetlerin açık olması yavaşlamaya sebep oluyor ama eğer öyleyse datasetler nerde açıp nerde kapatacağım ben şöle düşündüm doğruluğundan emin olmak için söylüyorum. kayıt işlemi yapılacaksa ibdatasetin before insert olayında dataseti open after post olayından sonrada close yapmak gerekir gibi geliyor.
//Bence bu bölümü gözden geçirin ben böyle kullanmadığım için tam bilemiyorum (en azından hangi işlemi yapıcaksanız işlem yapacağınız form açılırken Queryleri active yapabilrsiniz ama bu önerilmez.) +
6. kayıt etme,silme, vb. işlemeri ibdataset.insert, ibdataset.post,ibdataset.cancel komutlarıyla yapıyorum bunlardan dolayı bir yavaşlama olurmu?
//Kesinlikle bunun yavaşlamayla hiçbir alakası olamaz. +
7. raporlarda sql kullanıyorum, ama stored procedure leri kullanmıyorum doğrudan tarih aralığını belirterek
ibdataset.close;
ibdataset.selectsql.clear;
ibdataset.selectsql.add('select *from table where tarih aralığı...');
ibdataset.open
//Burada da herhangi bir sorun gözükmüyor (birde betveen kullanın performansı etkilemeyecek sadece alternatif) +
.......
Son olarak eklemek istedğim.
Bu sonunu çözmek için adım adım giderseniz yani hangi queryde hangi işlemi yaparken yavaşlama söz konusu o zaman sonuca ulaşmanız çok daha kolay olacaktır. +
Saygılarımla
Çalışmalarınızda başarılar dilerim.
Not:Bilgilerin tutarsızlığı durumunda düzeltirseniz sevinirim.
İyi akşamlar
Gün gelecek, dilleri, elleri ve ayakları yapmış oldukları bütün kötülükleri tek tek bildirerek aleyhlerinde şahitlik edecektir. [Nur Suresi 24]
_________________
_________________
Sanırım Pro_İmaj bir hayli açıklama yapmış ama...bu mevzuda programı tasarlamadan önce ne tür bir proje ne tür bir veri tabanı ne tür bir çalışma mantığı bu bağlamda ele alırsan...mevzu daha mantıklı masa üstünde olur...
Mantık aşamasında su da önemli dogru iş için doğru mantık kullanmak gerekiyor...
dogru iş işleyişi için doğru bileşen seçimi yapılmalı ... bileşen kullanmak...en iyisidir... ve bileşenleri kullanırken code içerisinde code yazarken gereksiz kodlardan kacının..
Bence çok genel bir soru olmuş soruyu yavaşlayan kısımlarında kullandığın kodları ve nesneleri belirttiğinde sana froum olarak daha yardımcı olacak seyler yazabiliriz kanısındayım..kolay gelsin
Mantık aşamasında su da önemli dogru iş için doğru mantık kullanmak gerekiyor...
dogru iş işleyişi için doğru bileşen seçimi yapılmalı ... bileşen kullanmak...en iyisidir... ve bileşenleri kullanırken code içerisinde code yazarken gereksiz kodlardan kacının..
Bence çok genel bir soru olmuş soruyu yavaşlayan kısımlarında kullandığın kodları ve nesneleri belirttiğinde sana froum olarak daha yardımcı olacak seyler yazabiliriz kanısındayım..kolay gelsin
Siz hayal edin...Biz yapalım TuannaSoft...
- huseyinert
- Üye
- Mesajlar: 233
- Kayıt: 19 Nis 2005 06:49
- Konum: Bartın
cevap yazan tüm arkadaşlara tşk. ederim. pro_imaj hocam yazdığınız
select *from alan1,alan2....from table komutunu burda kullanmak mümkün değilki o zaman table daki tüm alanları bu şekilde yazmam gerekecek oda zaten * oluyor sizin dediğiniz gibi bazıları yazmam bazılarını yazmamam mümkün olmaz çünkü ilk başta belirttiğim gibi bu ibdataset kaydetme silme vb. işlerri yapan dataset ibdataset.post bu işlemi yapmak için select *from tablo yani tüm alanların seçili olması gerekmiyormu? where deyimimi kullanmak gerekiyor acaba o da burda oluırmu bilemiyorum?
birde ibdatasetlerin open edilip close edilmesi konusunda net bir açıklama göremedim form show edildiğğinde show edilen formda kullanılan ibdatasetin open yapılması gibi birşey yazmışsınız, sonrada bu pek teercih edilen bir yöntem değil demişsiniz. bu konuda da kesin ve izlenmesi gereken yolu yazarsanız sevinirim
tşk. ederim
kolay gelsin
select *from alan1,alan2....from table komutunu burda kullanmak mümkün değilki o zaman table daki tüm alanları bu şekilde yazmam gerekecek oda zaten * oluyor sizin dediğiniz gibi bazıları yazmam bazılarını yazmamam mümkün olmaz çünkü ilk başta belirttiğim gibi bu ibdataset kaydetme silme vb. işlerri yapan dataset ibdataset.post bu işlemi yapmak için select *from tablo yani tüm alanların seçili olması gerekmiyormu? where deyimimi kullanmak gerekiyor acaba o da burda oluırmu bilemiyorum?
birde ibdatasetlerin open edilip close edilmesi konusunda net bir açıklama göremedim form show edildiğğinde show edilen formda kullanılan ibdatasetin open yapılması gibi birşey yazmışsınız, sonrada bu pek teercih edilen bir yöntem değil demişsiniz. bu konuda da kesin ve izlenmesi gereken yolu yazarsanız sevinirim
tşk. ederim
kolay gelsin
"Kula bela gelmez Hak yazmayınca,Hak bela yazmaz kul azmayınca..." MEVLANA
Selam
formun create edildiğinde zaten ibdataset open konumundadır zaten.On için ilk başta open yazmak mantıksız.
ama size şöyle diyebilirim..
mesela
datamodulenizde bir tane ibdataset bileşeniniz var diyelim...
şimdi bu ibdatasetinizin sql satırında Select*from tablo adınız.
ve siz bu tablonuzu dbgridde gösteriyorsunuız diyelim...
şimdi siz proğramınız compile ediyorsunuz .zaten ibdataset open konumunda.
fakat
diyelim bu tablonuzda iki tarih aralığı sorgulama yapmanız gerekecek aynı ibdatasetle.
o zaman ibdataset1.close;
diyip önce ibdatasetinizi kapatacaksınız...
ve sonra ibdatasetin 2.satırına
ibdataset1.selecsql.clear;
diyeceksiniz.
buda sizin ibdatasetinize yazdığınız sql cümlecikleri temizlemekte...
Ve sonra
ibdataset1.selectsql.add('select*from tablo adınız where tarhi between....');
dediniz....
dbgridde tarih aralığı ile ilgili sorgulama yaptı dimi...
ama dataset hala kapalı
en sonda
ibdataset1.open;
dediğiniz
de işlemleri yapcaktır..
ibdataset close open ne den yapılır...Çünki farklı uygulamalar farklı sorgulamalar farklı analizler yapılması içindir.....
kolay gelsin..........
formun create edildiğinde zaten ibdataset open konumundadır zaten.On için ilk başta open yazmak mantıksız.
ama size şöyle diyebilirim..
mesela
datamodulenizde bir tane ibdataset bileşeniniz var diyelim...
şimdi bu ibdatasetinizin sql satırında Select*from tablo adınız.
ve siz bu tablonuzu dbgridde gösteriyorsunuız diyelim...
şimdi siz proğramınız compile ediyorsunuz .zaten ibdataset open konumunda.
fakat
diyelim bu tablonuzda iki tarih aralığı sorgulama yapmanız gerekecek aynı ibdatasetle.
o zaman ibdataset1.close;
diyip önce ibdatasetinizi kapatacaksınız...
ve sonra ibdatasetin 2.satırına
ibdataset1.selecsql.clear;
diyeceksiniz.
buda sizin ibdatasetinize yazdığınız sql cümlecikleri temizlemekte...
Ve sonra
ibdataset1.selectsql.add('select*from tablo adınız where tarhi between....');
dediniz....
dbgridde tarih aralığı ile ilgili sorgulama yaptı dimi...
ama dataset hala kapalı
en sonda
ibdataset1.open;
dediğiniz
de işlemleri yapcaktır..
ibdataset close open ne den yapılır...Çünki farklı uygulamalar farklı sorgulamalar farklı analizler yapılması içindir.....
kolay gelsin..........
Merhaba,
Siz tüm alanları seçmezseniz yeni kayıt eklemek, kayıt silmek, düzenlemek gibi işlemleri sorunsuzca yapabilrsiniz. Bu hususu pek anlayamadığınızı düşünertek bir örn açıklamak istriyorum.
Benim vtdeki alanlarımdan bazılar.
Row_ID =otomatik sayı
Diger formlardaki olaylarla alakalı olan (kayıt tarih, saat değiştirmek tarih, saat gibi bilgilerin tutulduğu alanlar.)
Yani buradaki alanları seçmeme gerek yok tahmini olarak bu alanlar 20 -30 alan arasında değişiyor (eğer senin alanların bu kadar fazla değilse bu işlemi geçebilrsin ama bu seçim işlemi çok büyük hız farkına neden oluyor.
Program içerisinde çok sık kullanılmayan ama ihtiyaç duyuldukça kullanılan formalarda o form açılırken ilgili query'i open moduyla açıyorum (bu kullanım ilgili formu ilk kez açarken biraz yaşvaşlamaya neden oluyor eğer ana form açılırken bu işlemi yapsaydık gereksiz yere belkide kullanıcının hiç kullanmayacağı bir query'i active etmiş olucaktık ve program açılırken bu bekleme süresi olacaktı.
Bu nedenle pek önerilmez dedim, ama bu benim kendi fikrim olduğu için yani herhangi bir kaynaktan bunu teyit edemediğimden dolayı böyle söylüyorum.
Size kısaca bir önerim Query Calc olaylarındaki işlemleri SQL ile halletmeniz olacaktır (tabiki kullanıyorsanız) bu olayda dbgridin listesinden daha farklı bir listeye yönelmek yani kayıtlar arasından dolaşırken hızınızı büyük ölçüde etkileyecektir.
Saygılarımla
Kolay gelsin.
Yukarıdaki olaya belirtiğiniz şekilde yapmaya gerek yok !!! yani şöyleki;huseyinert yazdı:cevap yazan tüm arkadaşlara tşk. ederim. pro_imaj hocam yazdığınız
select *from alan1,alan2....from table komutunu burda kullanmak mümkün değilki o zaman table daki tüm alanları bu şekilde yazmam gerekecek oda zaten * oluyor sizin dediğiniz gibi bazıları yazmam bazılarını yazmamam mümkün olmaz çünkü ilk başta belirttiğim gibi bu ibdataset kaydetme silme vb. işlerri yapan dataset ibdataset.post bu işlemi yapmak için select *from tablo yani tüm alanların seçili olması gerekmiyormu? where deyimimi kullanmak gerekiyor acaba o da burda oluırmu bilemiyorum?
Siz tüm alanları seçmezseniz yeni kayıt eklemek, kayıt silmek, düzenlemek gibi işlemleri sorunsuzca yapabilrsiniz. Bu hususu pek anlayamadığınızı düşünertek bir örn açıklamak istriyorum.
Benim vtdeki alanlarımdan bazılar.
Row_ID =otomatik sayı
Diger formlardaki olaylarla alakalı olan (kayıt tarih, saat değiştirmek tarih, saat gibi bilgilerin tutulduğu alanlar.)
Yani buradaki alanları seçmeme gerek yok tahmini olarak bu alanlar 20 -30 alan arasında değişiyor (eğer senin alanların bu kadar fazla değilse bu işlemi geçebilrsin ama bu seçim işlemi çok büyük hız farkına neden oluyor.
bu konu hakkında ben bazen şu yolu deniyorum 1 milyonun üzerinde kayıt olan ve 120 den fazla alan olan bir vt ile çalışıyorum hız denemeleri yapıp en uygun kullanımı kendim buluyorum şöyleki;huseyinert yazdı: birde ibdatasetlerin open edilip close edilmesi konusunda net bir açıklama göremedim form show edildiğğinde show edilen formda kullanılan ibdatasetin open yapılması gibi birşey yazmışsınız, sonrada bu pek teercih edilen bir yöntem değil demişsiniz. bu konuda da kesin ve izlenmesi gereken yolu yazarsanız sevinirim.
tşk. ederim
kolay gelsin
Program içerisinde çok sık kullanılmayan ama ihtiyaç duyuldukça kullanılan formalarda o form açılırken ilgili query'i open moduyla açıyorum (bu kullanım ilgili formu ilk kez açarken biraz yaşvaşlamaya neden oluyor eğer ana form açılırken bu işlemi yapsaydık gereksiz yere belkide kullanıcının hiç kullanmayacağı bir query'i active etmiş olucaktık ve program açılırken bu bekleme süresi olacaktı.
Bu nedenle pek önerilmez dedim, ama bu benim kendi fikrim olduğu için yani herhangi bir kaynaktan bunu teyit edemediğimden dolayı böyle söylüyorum.
Size kısaca bir önerim Query Calc olaylarındaki işlemleri SQL ile halletmeniz olacaktır (tabiki kullanıyorsanız) bu olayda dbgridin listesinden daha farklı bir listeye yönelmek yani kayıtlar arasından dolaşırken hızınızı büyük ölçüde etkileyecektir.
Saygılarımla
Kolay gelsin.
Gün gelecek, dilleri, elleri ve ayakları yapmış oldukları bütün kötülükleri tek tek bildirerek aleyhlerinde şahitlik edecektir. [Nur Suresi 24]
_________________
_________________
Merhaba @selman
Benim bahsettiğim bu
Saygılarımla
Kolay gelsin.
Sizin yazdığınız mantıklı fakat ; Eğer programı çalışma anında Query'i close modunda olursa form create edildiğinde Active olmaz kesinlikle siz çalışma anında onu active olrak belirlediğinden dolayı böyle oluyor.selman yazdı: formun create edildiğinde zaten ibdataset open konumundadır zaten.On için ilk başta open yazmak mantıksız.
Benim bahsettiğim bu

Saygılarımla
Kolay gelsin.
Gün gelecek, dilleri, elleri ve ayakları yapmış oldukları bütün kötülükleri tek tek bildirerek aleyhlerinde şahitlik edecektir. [Nur Suresi 24]
_________________
_________________
Bu konuda kesin ve izlenmesi gereken bir yol yoktur. Programcılık büyük oranda tecrübe işidir. Zamanla izlenmesi gereken yol hakkında tecrübe sahibi olup size en uygun gelen yöntemi kullanırsınız. Yani burada bir önerme vermek mümkün değil. Şunun için muhakkak şöyle yapmalısın gibi bir öneri getirdiğimizde bu öneri başka bir programda tamamen mantıksız hale gelebilecektir.
İçgüdülerinize ve tecrübelerinize güvenin. Bol bol okuyun, araştırın. Kaliteli bileşen ve yazılımların kaynak kodlarına göz atın.
İçgüdülerinize ve tecrübelerinize güvenin. Bol bol okuyun, araştırın. Kaliteli bileşen ve yazılımların kaynak kodlarına göz atın.
- huseyinert
- Üye
- Mesajlar: 233
- Kayıt: 19 Nis 2005 06:49
- Konum: Bartın
coderlord hocam cev. için tşk. ederim. tabiki belli bir yöntem uygulanmalı gibi bişey söylemek doğru olmaz. fakat bazı şeylerinde standart kullanımı vardır. o şekilde kullanmayınca gerçek hıza ve çalışmaya ulaşamazsınız benim burda sorduğum ve öğrenmek istediğim benim kullandığım yöntem acaba sağlıklımı burda tecrübeli ve işi bilen arkadaşların nasıl yollar izlediğini öğrenerek bundan faydalanmak.
örneğin ibdatasetleri devamlı open da mı tutmak lazım yoksa gereken durumlarda kapatmak mı lazım?kapatılacaksa nerde hangi işlemde kapatmak lazım açıp kapatmak sık olursa buda hızda bir sorun çıkartırmı?
bunun gibi sorular sizinden tecrübenizden ve bu tür işleri nasıl yaptığınızdan faydalanmak isterim ibdatasetin select sql ilene ne yazmak lazım(object inspector(kayıt,silme...işlemlerini yapan))hangi sql cümlesini kullanıyorsunuz ve kullanılıyor. bunlar....
amerika keşfedilmiş tekarar keşfetmeye gerek yok bunun için zaman harcamaya gerek yok.
tşk. ederim
örneğin ibdatasetleri devamlı open da mı tutmak lazım yoksa gereken durumlarda kapatmak mı lazım?kapatılacaksa nerde hangi işlemde kapatmak lazım açıp kapatmak sık olursa buda hızda bir sorun çıkartırmı?
bunun gibi sorular sizinden tecrübenizden ve bu tür işleri nasıl yaptığınızdan faydalanmak isterim ibdatasetin select sql ilene ne yazmak lazım(object inspector(kayıt,silme...işlemlerini yapan))hangi sql cümlesini kullanıyorsunuz ve kullanılıyor. bunlar....
amerika keşfedilmiş tekarar keşfetmeye gerek yok bunun için zaman harcamaya gerek yok.
tşk. ederim
"Kula bela gelmez Hak yazmayınca,Hak bela yazmaz kul azmayınca..." MEVLANA