locate yavaş

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Kullanıcı avatarı
bobasturk
Kıdemli Üye
Mesajlar: 1387
Kayıt: 20 May 2004 08:39
Konum: Düzce

locate yavaş

Mesaj gönderen bobasturk »

Merhaba,

Firebird, delphi7 ve ibdataset bileşenleri kullanıyorum. veri tabanımda şuan 150 000 kayıt mevcut. Hız sorunları yaşıyorum. bir kere açılışta ibdataset e kısıtlama getirmek zorunda kaldım sebebi ise form açıldığında dataset aktif oluyordu ve stack hatası almaya başladım ve kısıtlama getirerek bu hatayı aştım.

ibquery ile containing kullanarak tablodan sorgulama çekiyorum. daha sonra gridi çift tıkladığımda veri giriş formumu açtırıyorum, form açılınca dataset aktif hale geliyor ve ibquery de bulunan id ile dataseti locate ediyorum. bu süre bana uzun geliyor. bahsettiğim id alan primery key. amacım query ile çekilen sorguda dönen kaydın ayrıntısını görmek. bu sebeple veri giriş formunu açtırıp konumlanıyorum. 10 ile 15 sn. sürüyor. bunu nasıl aşabilirim. yoksa yapacak birşey yokmu.

veri giriş formunu açma ve locate olma

Kod: Tümünü seç

procedure TFrmSicilKayitSorgu.cxGrid1DBTableView1DblClick(Sender: TObject);
begin
  if not assigned(frmsicilanagiris) then
  begin
    frmsicilanagiris:=Tfrmsicilanagiris.Create(self);
    frmsicilanagiris.Show;
    frmsicilanagiris.WindowState:=wsmaximized;
    sicilverigirisdm.SicilAnaGirisIBDSet.Active:=true;
    sicilverigirisdm.SicilGelisIBDSet.Active:=true;
    sicilverigirisdm.SicilSahteIBDSet.Active:=true;
    sicilverigirisdm.sicilanagirisIBDSet.Locate('SICILID',cxgrid1dbtableview1.DataController.DataSource.DataSet.fieldbyname('SICILID').AsInteger,[]);
  end
  else
    frmsicilanagiris.BringToFront;
    sicilverigirisdm.sicilanagirisIBDSet.Locate('SICILID',cxgrid1dbtableview1.DataController.DataSource.DataSet.fieldbyname('SICILID').AsInteger,[]);
end;
saygılarımla, kolay gelsin
Şefkat-u Merhamette Güneş Gibi Ol.
Başkalarının Kusurunu Örtmekte Gece Gibi Ol.
Sehavet-u Cömertlikte Akarsu Gibi Ol.
Hiddet-u Asabiyette Ölü Gibi Ol.
Tevazu-u Mahviyette Toprak Gibi Ol.
Ya Olduğun Gibi Görün Ya Göründüğün Gibi Ol.

Resim
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Re: locate yavaş

Mesaj gönderen aslangeri »

s.a.
gridlerde sadece ihtiyacın olan kayıtları gösteri.
yani bi filitreleme falan yapıldıysa veya arama onun sonucuna göre kayıtları göster.
kaydın id sini bildiğine göre ayrı bir sql ile sadece ilgili kaydı select et ve editlerde o kaydı göster.
velhasıl veribilinçli (db) bileşenleri mümkün mertebe az kullanmaya çalış.
yada boşver.
locate etmeden önce dataseti disablecontrols yap
kaydı bulunca(veya bulamayınca) enablecontrols yap.
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Kullanıcı avatarı
bobasturk
Kıdemli Üye
Mesajlar: 1387
Kayıt: 20 May 2004 08:39
Konum: Düzce

Re: locate yavaş

Mesaj gönderen bobasturk »

merhaba,

a.s.

teşekkür ediyorum ve hemen çalışmaya başlıyorum.

saygı ve sevgiyle kolay gelsin
Şefkat-u Merhamette Güneş Gibi Ol.
Başkalarının Kusurunu Örtmekte Gece Gibi Ol.
Sehavet-u Cömertlikte Akarsu Gibi Ol.
Hiddet-u Asabiyette Ölü Gibi Ol.
Tevazu-u Mahviyette Toprak Gibi Ol.
Ya Olduğun Gibi Görün Ya Göründüğün Gibi Ol.

Resim
Kullanıcı avatarı
Kuri_YJ
Moderator
Mesajlar: 2248
Kayıt: 06 Ağu 2003 12:07
Konum: İstanbul
İletişim:

Re: locate yavaş

Mesaj gönderen Kuri_YJ »

Selamlar,

Bu konuda arkadaşlarınsıklıkla düştüğü sorunlardan biri de bu YAVAŞ olayı. :)

Size ben tecrübelerimden bahsedeyim (Benim uyguladığım Yöntemden Bahsedeyim)

Şu anda bir program geliştiriyorum bu programda deneme yaptım 100,000 Cari Hareket, 40,000 Stok Kart, 100,000 Kasa Hareketi vs. gibi (Test Data ile) denemeler yaptım 1 saniye içinde hiçbirşey gelmemezlik yapmıyor.

Programda Firebird, IB Bileşenleri ile birlikte kullanıldı.

Tavsiyeleri Sıralıyorum,

1.Liste ekranlarınızda mutlaka filtre koymalısınız, Yani SELECT * FROM TBL_CARI_HAREKET gibi bir selecti, Kullanıcı istemedikçe kullanmamalısınız. Mutlaka bir filtreleme yapmalısınız. En kötü ihtimalle, Tarih Filtresi yapıp kayıtları 1 ay gibi yada kayıt yoğunluğunuza bağlı olarak belirli bir gün aralığında getirtmelisiniz ki, kullanıcı beklemesin. Şunu unutmayın, Denizden Suyu, bardakla, kovayla, tankerle çekebilirsiniz ama en hızlısı muhtemelen en küçük olanıdır. Yani siz bilgi havuzunuzdan sadece yeterli miktarda bilgiyi çekmelisiniz. Eğer herpsini çekerseniz boşuna hem network trafiği oluşturursunuz, client için bellek sıkışmasına yol açarsınız, eğer clientınızda yeterli miktarda bellek yoksa windows hemen swappinge dayanır, üstüne üstlük kullanıcıyı dagereksiz bir bekleme sürecine itersiniz. Bu kaynak müsrifliği olur. Bunu mutlaka aklınızda bulundurun. Müsriflik yok !!!!

2. Yine liste ekranlarında bilgileri gridlerinize yeter kadar kolon sayısıyla alın. Yani Hem Query nesnelerinizde SELECT * FROM TABLO gibikullanım yapmayın, hem de Gridlerinizde kullanmayacağınız alanlarınızı grid nesnesinden temizleyin. Ayrıca Query nesnesinde kullanacağınız fieldlarınız belirli ise, SELECT * yerine SELECT CRK_ID, CRK_KOD, CRK_UNVAN gibi sadece ilgilendiğiniz alanları getirin. Bu bellek ve network trafiği müsrifliğinin önüne geçecektir.

3. Programlarınızı yazarken sıklıkla DB'den birşeylerin alınmasına gerek duyulan işlemleri yani herhangi bir işlem yap, sonraki kayda geç, bilmem neyi kontrol et öyleyse git şuna bak olmazsa sonraki kayda git, şunu güncelle bunu yap... gibi bir sürü şeyu içeren işlemlerinizi Stored Procedure'lere yaptırın. Bu işinizi çok ama çok hızlandıracaktır. Yazmış olan kişiler bilir. Cari Kart Ekstresi (Devirli ve Kümülatif Bakiyeli) raporu hazırlamak benim uyguladığım bu yöntem sayesinde, sizlere örnek olması için söylüyorum 350 sayfa kadar rapor 3-4 saniye içinde hazır oluyor. Gerisini varın siz düşünün.

4. Indekslere özen gösterin, sorgularınıza göre indeksler oluşturun. Indeksleme tariflerini daha önceden bir yazıda anlatmıştım, isteyen arkadaş oraya göz atabilirler.

5. Referantial Integrity denen ilişkisel bütünleşikliği kullanın. Foreign Key'ler kullanın. PK'larınızı mümkün mertebe Integer olarak tanımlayın, string kullanmayın. Integer işlem yapmak, string işlem yapmaktan Kat be Kat hızlı ve ayrıca bellek kullanımı açısından da oldukça düşük bir maliyeti olacaktır. Tabi Foreign Key bağlantılarında getirdiği kolaylık ve hız da cabası.

6. Ben IB componentlerini kullanırken, TIBTble yerine TIBQuery nesnesini kullanıyorum ve bununla birlikte, TIBQuery nesnesine TIBUpdateSQL Nesnesini bağlıyorum. Bu programın hızlanmasını sağlıyor. Ayrıca Query nesnesinde Insert, Update ve Delete gibi işlemleri yapabilmenizi sağlıyor.

7. Her ne kadar tercih edilmese de yada terkedilse de Cached Update olarak ben yazılımlarımı geliştiriyorum. Bu network trafiğinin düşürülmesinde ve ayrıca ben belirtmeden, yaptığım herhangi bir değişikliğin ApplyUpdates demediğim müddetçe Client tarafında kalmasını sağlıyor. Böylelikle, örneğin Fatura kaydına girdiniz, fatura detaylarından birkaçtanesini sildiniz, birkaç tane eklediniz, bazılarını da düzelttiniz ama sonra vazgeçtiniz. Eğer Live bir şekilde fatura bilgilerini DB'ye yansıtıyorsanız, geçmiş olsun. Ama CachedUpdates kullanıyorsanız, problem yok ! CancelUpdates dersiniz, yaptığınız bu değişikliklerin hiçbiri DB'ye yansıtılmaz. Olay client tarafında kalır ve iptal edilir. Bir nevi RollbackTransaction gibi. Ama CachedUpdates'i kullanmak isteyen arkadaşların da bu tür olayları bilip, ona göre dikkatli kullanması gerekiyor. Dikkatsiz kullanımlardan kaynaklanan hatalarda ne yazık ki haksız yere CachedUpdates şamar oğlanı, günah keçisi ilan ediliyor. :) Ama doğru kullanıldığında da tadından yenmez bir özellik.

8. View'ler oluşturun, Triggerlar yazın. Client tarafında yapılacakları mümkün mertebe server'a yığın. Manuel yapılması gereken kontrolleri veya kayıt işlemlerini bu tür (veri tabanına ait) yardımcılarla yaparsanız hızınız çok artar. Şunu unutmayın, server size hizmet için orada, bu sebeple clientı meşgul etmeyin. Ayrıca, yanlış bir şey mi oldu, RollbackTransaction deyin olsun bitsin, hiçbir şey olmamış durumuna geri dönersiniz. Böyle bir kolaylık varken neden kullanmayasınız ki? Neden herşeyi illa EXE programın yapmasını istiyorsunuz. İşinizi planlayın ve mümkün olan her şekilde program içindeki işlemlerinizi triggerlara ve splere taşıyın. Ama dikkat edin herşeyi taşıyacağım diye de, kalkıp INSER işlemi için SP yazmak, DELETE işemi için SP yazmak gibi külfetlere de girmeyin. Mümkün olduğunca orta noktayı (denge noktasını yakalayıp) taşıyabildiğinizi taşıyın. Düşünsenize, bu şekilde çalışan bir iş yerinde Server'ın kapasitesini artırmak mı kolay olur yoksa Client'ların kapasitesini arttırmak mı? Server iş yükünüzü çeksin. Özellikle Firebird gibi güçlü veritabanları bu işler için tasarlanıyor ve geliştiriliyor. Siz boşuna kasmayın :)

9. Program açılışlarında düşülen hatalardan biri de langır lungur her tabloyu (lazım olmadığı halde) açmaktır. Lazım olan tabloyu, lazım olduğu yerde, lazım olan fieldları, lazım olan bilgi kadar açın, kullanın ve kapatın. Aksi halde, hem network trafiğini arttırırsınız hem de belleğinizi şişirirsiniz. Lazım olanı, lazım olduğu yerde lazım olduğu kadar.

10. Aynı şekilde, formlarınızı da kullanılacağı zaman create edin ve işi bitince de Free edin. Bellek sıkıntısı yaşamazsınız. Özellikle düşük konfigürasyonlu makinalarda, bellek sıkıntısı yaşayan arkadaşlara tavsiyedir. Eğer buna dikkat etmezseniz, Windows acımasız bir biçimde swappinge girişecektir ve bir formun açılması dakikalarca sürecektir. 9. ve 10. madde birbiriyle bütünleşik olarak düşünülüp tasarlanmalıdır.


Valla arkadaşlar şimdilik aklıma gelen bunlar. Bunları uygularsanız emin olun, programlarınız şakır şakır çalışır. Beklemek kelimesi de size bir anlam ifade etmez (Tecrübe ile sabittir). Bekleme ancak ve ancak, kullanıcı istediği zaman yapılmalıdır. Yani gerçekten çok uzun bir şlem yapacaksa kullanıcı beklemelidir. Yani binlerce sayfa bir rapor alacaksa yada kayıtların tamamını gride alıp üzerlerinde gezinecekse o zaman kullanıcı bilinçli bir şekilde beklemeyi göze almalıdır. Aksi halde yazacağınız programlar Lütfen Bekleyinizden geçilmez.

Bunlar benim şahsi tecrübelerim olmakla birlikte, her yiğidinbir yoğurt yiyişi vardır diyerek sözlerimi sonlandırıyorum.

Kolay Gelsin.
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Re: locate yavaş

Mesaj gönderen aslangeri »

s.a.
ellerinize sağlık güzel bir yazı olmuş. aslında makaleler bolumune alınabilir.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
aLonE CoDeR
Kıdemli Üye
Mesajlar: 1223
Kayıt: 26 Nis 2005 04:08

Re: locate yavaş

Mesaj gönderen aLonE CoDeR »

Proje henüz geliştirilme aşamasında mı mevcut kullanıcı var mı?

- Henüz geliştirilme aşamasındaysa ve 150 bin kayıttan bahsediyorsan Firebird'den vazgeç.
- Mevcut kullanıcıların varsa ve sayısı azsa Dataset kullanmaktan vazgeç.
- Mevcut kullanıcıların varsa ve sayısı fazlaysa Locate kullanmaktan vazgeç.

Kolay gele.
aLonE CoDeR
Kıdemli Üye
Mesajlar: 1223
Kayıt: 26 Nis 2005 04:08

Re: locate yavaş

Mesaj gönderen aLonE CoDeR »

Ek olarak hangisinden vazgeçersen vazgeç Locate kullanmaktan vazgeçmeyi de sonuna iliştir mutlaka.
Kullanıcı avatarı
Kuri_YJ
Moderator
Mesajlar: 2248
Kayıt: 06 Ağu 2003 12:07
Konum: İstanbul
İletişim:

Re: locate yavaş

Mesaj gönderen Kuri_YJ »

Selam,

Alone Coder, neden 150,000 Kayıt için Firebird'den vazgeç dediğini merak ettim, açıklayabilir misin?
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
aLonE CoDeR
Kıdemli Üye
Mesajlar: 1223
Kayıt: 26 Nis 2005 04:08

Re: locate yavaş

Mesaj gönderen aLonE CoDeR »

Şahsi fikrim (varsayım değil, uygulama sonucu edinilmiş kanaatlerdir), Firebird'ün henüz orta seviye bir veritabanı olamadığı yönünde. Bu konu uzar kestirebiliyorum ve uzun tartışmaları tercih etmiyorum.
emin_as
Üye
Mesajlar: 559
Kayıt: 01 Eki 2008 10:05
Konum: izmir
İletişim:

Re: locate yavaş

Mesaj gönderen emin_as »

Firebird le ilgili 1 terabyte lık test.
http://www.ib-aid.com/articles/item104

Bazı özet bilgiler:
Total records inserted - 6.2 billions ( 6.2 milyar kayıt eklenmiş)
Average insertion speed 24500 records/second ( saniyede 24500 kayıt eklenmiş)
Average record size 146 bytes (min 13 bytes, max – 600 bytes) (ortalama kayıt büyüklüğü 146 byte)
Transactions 646489 (toplam 646.489 transaction oluşturulmuş)

Sayfayı açıp, incelerseniz daha ayrıntılı bilgiler bulabilirsiniz. Firebird un bazı ufak tefek sorunları olsa da, en önemli avantajı kurulumun çok basit olması ve bakım gerektirmemesi. Basit bir installerla sisteme kurup, hemen kullanmaya başlanabiliyor. Bazı dezavantajları da var, örnegin veritipleri ve diğer veritabanlarına göre çok yetersiz kalıyor. Özellikle postgresql ile karşılaştırınca, gerçekten ikinci sınıf gibi duruyor. Ama sistem yönetimi ve delphi ile sorunsuz kullanımı nedeniyle tercih ediliyor.

150.000 kayıt veya üzeri firebird için sorun olmaz, sadece network trafiğini optimize edecek şekilde programını ayarla ve yukarıda belirtildiği gibi mutlaka kayıtları süzerek aç. Son eklenen 50 stok kartı gibi varsayılan olarak stok kartını aç, müşteri isterse falanca grup ve ençok satılan stoklar diye kendisi vereceği ölçütlerle kaydı sınırlasın.

Verilere ulaşmak için IBDataset kullanabilirsin. IBDatasetin select, refresh, update, delete dört tane sql ayarı vardır. Özellikle selectsql i kullanarak filtreleme yapmak çok rahattır. Diğer sqllere dokunmadan dogrudan selectsql i değiştirerek çok kolay sonuca ulaşabilirsin.

Örneğin:
select * from musteri where musid in (select c.musid from fatura f, fatdetay d, stok s, musteri c where f.fatid =d.fatid and s.stokid = d.stokid and f.musid = c.musid and f.tarih between '01.08.2009' and '31.08.2009' )
Şeklindeki ibdataset.selectsql i ni ayarlarsan, 2009 un agustos ayında fatura kesilmiş, müşterileri inceleyebilir veya edit edebilrsin.


Veritabanı sistemlerinin karşılaştırılması:
http://en.wikipedia.org/wiki/Comparison ... nt_systems
Kullanıcı avatarı
sadettinpolat
Moderator
Mesajlar: 2131
Kayıt: 07 Ara 2003 02:51
Konum: Ankara
İletişim:

Re: locate yavaş

Mesaj gönderen sadettinpolat »

150bin kayitin icin bence hic bir cekinceniz olmadan firebird kullanabilirisiniz
5 gb boyutunda ana tabloda 10 milyondan fazla kayit olan bir veritabani es zamanli 10 baglantiyla sorunsuz bir sekilde calisiyor.
indexli alanlar uzerinde select islemi cok hizli oldugundan yapi duzgun oldugu surece 100 milyon kayitta olsa programin calisma performansi cok etkilenmiyor. sadece kayit sayisi buyuk bir tabloya count(*) from dediginizde ya da baska diger herhangi bir full table scan gerektiren sorgular calistirdiginizda sure dogal olarak uzuyor.


locate komutunu kesinlikle kullanmayin
ibdataseti master detail yapida kullanabilirsiniz. (selectSql i parametreli yapmak , ibdataset in datasource ozelligini ayarlamak vs. simdi tam olarak hatirlayamadim)
"Sevmek, ne zaman vazgececegini bilmektir." dedi, bana.

---
http://sadettinpolat.blogspot.com/
aLonE CoDeR
Kıdemli Üye
Mesajlar: 1223
Kayıt: 26 Nis 2005 04:08

Re: locate yavaş

Mesaj gönderen aLonE CoDeR »

Aslında konu uzayacak biliyorum ve tercih de etmiyorum ama gene frenleyemedim kendimi :)

FireBird ile örneğin bir ERP, bir hastane otomasyonu, bir banka otomasyonu yazan oldu mu, denediniz mi? milyarlarca kayıt sorun yaratmıyorsa bunları da kaldırabilmesi gerek. Hadi banka otomasyonunu es geçtim, ERP yazan var mı FireBird ile? Mesela şöyle 300 ve üzeri tablo, 500 ve üzeri trigger, 40-50 terminalde.. 15-20 tablo, 20-30 alan, indeksler, FK'lar tanımlı milyonlarca kaydı bas, filtrele buyrun size performans diyene ben test gözüyle bakmıyorum, siz bakıyorsanız tercih sizin.. Yazmayacağım daha :)
Kullanıcı avatarı
Kuri_YJ
Moderator
Mesajlar: 2248
Kayıt: 06 Ağu 2003 12:07
Konum: İstanbul
İletişim:

Re: locate yavaş

Mesaj gönderen Kuri_YJ »

Alone Coder,

:) Veta Yazılım İzmir, Hastane Bilgi Yönetim Sistemleri, TR çapında 70-80 Hastanede, Yüzlerce kullanıcı aynı anda milyonlarca record ile online hizmet veriyor ve Firebird kullanıyorlar. İstersen incele. Öyle yüzlerce tablo yada yüzlerce procedure trigger filan bunlar boş şeyler, performans kullanıldığında ortaya çıkar ve bu programla bir sürü insan ekmek yiyor ;)
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
aLonE CoDeR
Kıdemli Üye
Mesajlar: 1223
Kayıt: 26 Nis 2005 04:08

Re: locate yavaş

Mesaj gönderen aLonE CoDeR »

Biliyorum uzayacak gene ama bu kez son, daha yazmayacağım :)

Kuri, 100 lerce kullanıcı afaki bir ifade olmuş, aynı network ve aynı sunucudan mı bahsediyoruz? Hastane ihalelerinde başlıca şartlardan birisi de ücretsiz veritabanı kullanılmayacak şeklindedir. Bahsettiğiniz şekilde yüzlerce terminalin olduğu bir hastanede böyle bir alt yapıya daha ihalede bile izin verilmez ki.. Zaten bahsettiğin firma da ilk sırada Oracle'ı yazmış. Küçük ölçekli, Oracle maliyetini kurtarmayan hastaneler için alternatif olarak sunulmuştur büyük olasılıkla ve zaten öyle 8-10 terminallik network ortamlarında da sorun olacaksa atın çöpe gitsin FireBird'ü.

Aynı anda 100 lerce değil 50 nin üzerinde terminalin bağlı olarak milyonlarca kayıt üzerinde online hizmet verebilen bir ortam varsa, Türkiye'nin neresinde olursa olsun gidip incelemek ve bunu bizzat görürsem oturup en başından FireBird'ü öğrenmek isterim..

Kolay gele.
Kullanıcı avatarı
bobasturk
Kıdemli Üye
Mesajlar: 1387
Kayıt: 20 May 2004 08:39
Konum: Düzce

Re: locate yavaş

Mesaj gönderen bobasturk »

Merhaba,

Hepinize ayrı ayrı teşekkür ediyor ve çırak hürmetiyle ellerinizden öpüyorum. Gayet güzel ve ders verici bilgiler vermişsiniz.

Grid üzerine çektiğim sorgu sonucunda gride çift tıklayarak verinin tümünün görülmesini ve açılan verigiriş formunda da düzeltme, ekleme, vs işlemlerin yapılmasını sağlamaya çalışıyorum. açıkçası yeni form yapmaktan veya db bağlantılı bileşenlerin source lerini ayarlama gibi işlerden kaçınmak için bu yöntemi kullanıyorum. kayıtların tümünü çekecek sorgulama şeklim yok fakat ana veri giriş formum direkt db bileşenlerinde oluşuyor ve dataseti aktif hale getiriyor. buradaki amacım form üzerinde sağ kenarda duran ve listelenmiş olan veriler arasında aşağı yukarı gezerek işlemleri kontrol etmek ve yapılacak diğer işleri yapmak. yazışma, delil gönderme, delillere bakma. vs.. id alanlarım integer ve master/detail bağlamda fk larım mevcut bu yönde sıkıntım yok.

ayrıca disapbecontrols ve enablecontrols de fazla zaman farkı olmadı. sanırım sorgu sonucu tüm bilgilerin görüneceği yeni bir form oluşturup datasete kısıtlama ile bu formda verileri göstermek. ana veri giriş formuna da son bir aylık kaydı çekersek tamam olur heralde.

slogan mümkün olduğunca az veri çek. lazım olan kadarını çek ve kullan.

kuri hocam, ne kadar zahmet vermişim sana ama iyi de olmuş hani eline sağlık.

yapıyı makale ve görüşleriniz doğrultusunda tekrar gözden geçireceğim. teşekkür ve saygılarımla.
Şefkat-u Merhamette Güneş Gibi Ol.
Başkalarının Kusurunu Örtmekte Gece Gibi Ol.
Sehavet-u Cömertlikte Akarsu Gibi Ol.
Hiddet-u Asabiyette Ölü Gibi Ol.
Tevazu-u Mahviyette Toprak Gibi Ol.
Ya Olduğun Gibi Görün Ya Göründüğün Gibi Ol.

Resim
Cevapla