Tablodaki satırları toplama veya sayma

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Gk_imptob
Üye
Mesajlar: 84
Kayıt: 01 Kas 2005 12:34

Tablodaki satırları toplama veya sayma

Mesaj gönderen Gk_imptob »

Arkadaşlar merhaba, çıkamadığım bir konuda sizlerden öneri ve yardım rica ediyorum.

benim aşşağıdaki gibi bir tablom var.Basit bir sınav tablosu.Sorulara doğru cevap verildiğinde "1" yanlış cevap verildiğinde "0" değerini SORU satırına atıyor. Benim yapmak istediğim ve için den çıkamadığım şey ise ben soru fieldlarındaki soru1,2,3,4'e kaçtane "1" varsa DOĞRU CEVAP (örnek 3), kaçtane "0" varsa YANLIŞ CEVAP (örnek 2) olarak bunları toplatmak istiyorum

Tablom
ID SINAV_ADI TAKIM__ SORU1 SORU2 SORU3 SORU4 SORU5
1..SINAV1.....TURKUAZ......1.......1.........1.........0.......0
Sonuç
ID SINAV_ADI TAKIM... SORU1 SORU2 SORU3 SORU4 SORU5 DOGRU CEVAP YANLIS CEVAP
1..SINAV1.....TURKUAZ......1.......1.........1.........0.......0.............3...............2.............. gibi
sonuç almak istiyorum. Tablomda Doğru Cevap ve Yanlış Cevap fieldları yok onları ekliyebilirim.

Teşekkürler.
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Re: Tablodaki satırları toplama veya sayma

Mesaj gönderen sabanakman »

Doğru ya da yanlış nerede kayıtlı. Daha doğrusu tablo ve kayıt yapınız tam olarak nasıl?
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
Gk_imptob
Üye
Mesajlar: 84
Kayıt: 01 Kas 2005 12:34

Re: Tablodaki satırları toplama veya sayma

Mesaj gönderen Gk_imptob »

tablomda doğru yada yanlış fieldlarını koymadım onları ekliyebilirim.

Tablo yapımdan kastınız aşşağıdaki gibimi
PK INTEGER
SINAV_ADI VARCHAR
TAKIM_ADI VARCHAR
SORU1 INTEGER
SORU2 INTEGER
SORU3 INTEGER
SORU4 INTEGER
SORU5 INTEGER

teşekkürler.
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Re: Tablodaki satırları toplama veya sayma

Mesaj gönderen conari »

DOĞRU ve YANLIŞ CEVAP fieldlar için
calculated field oluşturup on calcta.

Kod: Tümünü seç

..fieldDOGRU.value=FIELD1.VALUE+FILED2.VALUE+....
..fieldYANLIS.value= 5-( FIELD1.VALUE+FILED2.VALUE+....)
halledilebilir.

Fieldları halledecekseniz trigger ile de yazdırılabilir.
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
Gk_imptob
Üye
Mesajlar: 84
Kayıt: 01 Kas 2005 12:34

Re: Tablodaki satırları toplama veya sayma

Mesaj gönderen Gk_imptob »

Sayın Conari,

Öneriniz çok işime yaradı.Ben hiç böyle düşünmemiştim.

Yardımlarınız için çok teşekkürler.
Kullanıcı avatarı
SimaWB
Üye
Mesajlar: 1316
Kayıt: 07 May 2009 10:42
Konum: İstanbul
İletişim:

Re: Tablodaki satırları toplama veya sayma

Mesaj gönderen SimaWB »

Ben de şunu ekleyeyim; her soru için bir field tutmamız çok çok kötü bir tablo tasarımı olur. Veritabanı ne kullanıyorsunuz bilmiyorum ama, mesela CEVAPLAR adında string tipinde bir field'a her karakter bir soruyu temsil edecek şekilde değer girerseniz tüm sorular için tek bir field'la işinizi görürsünüz.
Örneğin CEVAPLAR= "01120" ise 1. ve 5. soru YANLIŞ, 2. ve 3. soru DOĞRU 4. soru BOŞ şeklinde değerlendirilebilir...
There's no place like 127.0.0.1
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Re: Tablodaki satırları toplama veya sayma

Mesaj gönderen aslangeri »

@simaWB; düşünceniz doğru ancak çözüm yolunuz raporlama ve analizlerde saç baş yolduracak cinsten gibi geliyor.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Gk_imptob
Üye
Mesajlar: 84
Kayıt: 01 Kas 2005 12:34

Re: Tablodaki satırları toplama veya sayma

Mesaj gönderen Gk_imptob »

conari arkadaşımızn bir diğer tavsiyesi toplama işlemini triggerla yapmak.Daha önce hiç trigger yaratmadığım için aşşağıdaki gibi bir SQL yazdım. Fakat çalıştıramadım.
SORU1,2,3'e 1 değeri girince bunu DOGRU_TOPLAM fieldında triggerla nasıl toplatabilirim.

Teşekkürler.

Kod: Tümünü seç

CREATE trigger test_bi for tbl_quiz
active after insert position 0
AS
begin
  select sum (SORU1+SORU2) as TOPLAM from SINAV;
end
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Re: Tablodaki satırları toplama veya sayma

Mesaj gönderen conari »

Vt nedir?
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
Gk_imptob
Üye
Mesajlar: 84
Kayıt: 01 Kas 2005 12:34

Re: Tablodaki satırları toplama veya sayma

Mesaj gönderen Gk_imptob »

Özür dilerim söylemeyi unuttum. Veritabanım Fİrebird 1,5

teşekkürler.
Gk_imptob
Üye
Mesajlar: 84
Kayıt: 01 Kas 2005 12:34

Re: Tablodaki satırları toplama veya sayma

Mesaj gönderen Gk_imptob »

Triggerda toplama işlemi konusunda bana yardımcı olabilecek varmı ?
yusuf simsek
Üye
Mesajlar: 330
Kayıt: 09 Mar 2004 11:18
Konum: Konya
İletişim:

Re: Tablodaki satırları toplama veya sayma

Mesaj gönderen yusuf simsek »

sonuçları toplayıp sonuç tablosuna kaydedeceğinizi düşünerek;

Kod: Tümünü seç

CREATE trigger test_bi for tbl_quiz
active after insert position 0
AS
begin
 insert into SONUC 
( 
       dogursayisi, 
       yanlissayisi 
) 
values 
(  
      (NEW.SORU1 + NEW.SORU2 + NEW.SORU3 + NEW.SORU4 + NEW.SORU5), 
      (5 - (NEW.SORU1 + NEW.SORU2 + NEW.SORU3 + NEW.SORU4 + NEW.SORU5) 
)

end
şeklinde bir yol izleyebilirsiniz. ( @CONARİ' den de kopya çektik biraz ;) )

tabloaya kayıt işleminde yeni veriler ( INSERT ve UPDATE olaylarında ) NEW ile yakalayabilirsiniz,
silme veya güncelleme işlemlerinde eski verileri OLD ile yakalayabilirsiniz.

Kod: Tümünü seç

if (inserting) then
    begin
       //işlemler
    end
else if (updating) then
    begin
        //işlemler
    end
else if (deleting) then
    begin
       //işlemler
    end
bloğu ile tabloda yapılan işlemi yakalayabilirsiniz.

Ama SONUC diye ayrı bir tablo kullanmıyorsanız, TRIGGRER yerine STORED PRODECURE kullanmanız daha iyi olur. Çünki her kayıt işleminde TRIGGER'lar tekrar tetikleneceğinden işlemlerinizi biraz zorlaştırabilir.
Bugün bir kez daha,
Hiç Birşey Bilmediğimi Öğrendim!!!

https://extrayazilim.com
Cevapla