şartlı calculated alan

Firebird ve Interbase veritabanları ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
hakkus
Üye
Mesajlar: 160
Kayıt: 18 Haz 2003 12:02
Konum: Konya

şartlı calculated alan

Mesaj gönderen hakkus »

Merhabalar,
firebird 1.5 kullanıyorum.
Alan1 in değerine bağlı olarak hesaplaması değişen
Calculated bir alan yapmak istiyorum.

Kod: Tümünü seç

if alan1='e' ise
CalcAlan=(alan2*0.52)+(alan3*0.36);

if alan1='h' ise
CalcAlan=(alan2*0.16)+(alan3*0.47);
Böyle bir tanımlama calculated alanda yapılabilirmi?
Yoksa aşağıdaki gibi bir StoredProcedure ile mi yapmalıyım?

Kod: Tümünü seç

begin
 UPDATE table
 SET CalcAlan=(alan2*0.52)+(alan3*0.36)
 WHERE Alan1='e';

UPDATE table
 SET CalcAlan=(alan2*0.16)+(alan3*0.47)
 WHERE Alan1='h';
end
saygılar
Kullanıcı avatarı
husonet
Admin
Mesajlar: 2962
Kayıt: 25 Haz 2003 02:14
Konum: İstanbul
İletişim:

Mesaj gönderen husonet »

Claculated alan da yapılabilir.

Gazete manşetleri
* DİKKAT :Lütfen forum kurallarını okuyalım ve uyalım...!
* Warez,crack vs. paylaşımı kesinlikle yasaktır.
hakkus
Üye
Mesajlar: 160
Kayıt: 18 Haz 2003 12:02
Konum: Konya

Mesaj gönderen hakkus »

Merhabalar,
Husonet ilgin için teşekkür ederim.
If li Calculated alanın cümle dizini nasıl olmalı?
IBExpert kullanıyorum ComputedSource alanına if li bir cümle yazdığımda hata veriyor?
saygılar
Kullanıcı avatarı
husonet
Admin
Mesajlar: 2962
Kayıt: 25 Haz 2003 02:14
Konum: İstanbul
İletişim:

Mesaj gönderen husonet »

Yazdığın gibi bunu Datasetin OnCalcFields eventinde yazman gerekecektir.

Kolay Gelsin...

Gazete manşetleri
* DİKKAT :Lütfen forum kurallarını okuyalım ve uyalım...!
* Warez,crack vs. paylaşımı kesinlikle yasaktır.
hakkus
Üye
Mesajlar: 160
Kayıt: 18 Haz 2003 12:02
Konum: Konya

Mesaj gönderen hakkus »

Merhabalar,
Hızlı cevap için tekrar teşekkürler.
Yapmak istediğim server tarafında tanımladığım CalcAlan ı server da hesaplatmak. Delphi tarafında değil.
Kolay gelsin.
saygılar
Kullanıcı avatarı
husonet
Admin
Mesajlar: 2962
Kayıt: 25 Haz 2003 02:14
Konum: İstanbul
İletişim:

Mesaj gönderen husonet »

Triger olayını araştır.

Kolay Gelsin...

Gazete manşetleri
* DİKKAT :Lütfen forum kurallarını okuyalım ve uyalım...!
* Warez,crack vs. paylaşımı kesinlikle yasaktır.
hakkus
Üye
Mesajlar: 160
Kayıt: 18 Haz 2003 12:02
Konum: Konya

Mesaj gönderen hakkus »

merhabalar,
Sanırım trigger de işimi görmez.
Çünkü afterInsert e böyle bir trigger yazsam doğru çalışır ancak
alan2 veya alan3 değerleri update edildiğinde bu trigger tetiklenmez.
ayrıca afterUpdate e aynı triggeri yazsam bu kez de hata verecek.
Çünkü afterInsert ten sonra CalcAlan update edileceği için ayrıca afterUpdate trigger i de tetiklenecektir. Bu yine afterUpdate trigger ini tekrar tetikleyecektir.
saygılar
Kullanıcı avatarı
husonet
Admin
Mesajlar: 2962
Kayıt: 25 Haz 2003 02:14
Konum: İstanbul
İletişim:

Mesaj gönderen husonet »

Bence Mantık hatası yapıyorsunuz AfterInsert yeni kayıt eklemediğiniz sürece çalışmaz afterupdate lerde kayıt eklenirken çalışmaz.

Kolay Gelsin...

Gazete manşetleri
* DİKKAT :Lütfen forum kurallarını okuyalım ve uyalım...!
* Warez,crack vs. paylaşımı kesinlikle yasaktır.
Kullanıcı avatarı
gkimirti
Admin
Mesajlar: 1956
Kayıt: 02 Eyl 2003 04:44
Konum: İstanbul

Mesaj gönderen gkimirti »

FireBird de Calculated Source nasıl kullanılır bilmiyorum ama
su sekilde de yapılabilir.
yapmak istediginizi parametreli bi Fonksiyon haline getirip Dll olusturun
FireBird de UDF olarak bu fonksiyonu kullanın

Select alan1,alan2,myfunc(alan1) from tablom gibi de kullanırsınız.
ÜŞENME,ERTELEME,VAZGEÇME
onaydin

Mesaj gönderen onaydin »

Kod: Tümünü seç

(case ALAN WHEN 1 THEN ALAN1 * ALAN2 WHEN 2 THEN ALAN1*5 end)
Şeklinde bir ifade computed olarak çalışıyor.
Kullanıcı avatarı
gkimirti
Admin
Mesajlar: 1956
Kayıt: 02 Eyl 2003 04:44
Konum: İstanbul

Mesaj gönderen gkimirti »

ewt calısıyor
saolasın Onur sayende bir sey daha kattık literature :)

Kod: Tümünü seç

CREATE TABLE NEW_TABLE (
    F1  INTEGER,
    F2  INTEGER,
    K   INTEGER,
    C   COMPUTED BY (CASE K WHEN 0 THEN f1*f2 WHEN 1 THEN f1+f2 END)
);
C alanı, K alanı 0 iken f1*f2 , K alanı 1 iken f1+f2

bu özellik tabiki firebird 1.5 ile geliyor daha öncesinde yok
ÜŞENME,ERTELEME,VAZGEÇME
hakkus
Üye
Mesajlar: 160
Kayıt: 18 Haz 2003 12:02
Konum: Konya

Mesaj gönderen hakkus »

Merhabalar,
Evet teşekkürler tam istediğim buydu..:)
saygılar
Kullanıcı avatarı
mege
Admin
Mesajlar: 2360
Kayıt: 05 Şub 2004 04:32
Konum: Beşiktaş
İletişim:

Mesaj gönderen mege »

selam bu computed fieldlarda karşılaştırma veya küme işlemi nasıl yapılabilr.
pdf lere baktım hep toplama çıkarma örnekleri var :(

yani yapmak istediğim eğer K alanı 1 ila 16 arasında ise C=1, 17..32 ise C=2 olucak. bunu triggerlada yapardımda eklerken gerek duymadım sadece işimi kolaylaştıracak bişey.
örneğin

Kod: Tümünü seç

CREATE TABLE NEW_TABLE (
    F1  INTEGER,
    F2  INTEGER,
    K   INTEGER,
    C   COMPUTED BY (CASE K WHEN (K>0) and (K<17)  THEN 1 
                            WHEN (K>16) and (K<33)  THEN 2 END)
);
gibi...
between ve in ilede olmadı. bunu bu şekilde çözmenin bi yolu varmı? gereksiz veri tutmadan
.-.-.-.-.-.-.-. ^_^
fduman
Moderator
Mesajlar: 2749
Kayıt: 17 Ara 2004 12:02
Konum: Ankara

Mesaj gönderen fduman »

@mege kodu zaten yazmışsın:

Kod: Tümünü seç

COMPUTED BY (case when a > 1 and b < 5 then 1
                         when a > 10 and b < 20 then 2
                       else
                          3
                       end)
şöyle bir computed alan düzgün çalışıyor. Sorunu ben anlayamadım herhalde.
Kullanıcı avatarı
mege
Admin
Mesajlar: 2360
Kayıt: 05 Şub 2004 04:32
Konum: Beşiktaş
İletişim:

Mesaj gönderen mege »

Kod: Tümünü seç

CREATE TABLE NEW_TABLE (
    F1  INTEGER,
    F2  INTEGER,
    K   INTEGER,
    C   COMPUTED BY (CASE WHEN K > 0  and K < 17  THEN 1
                          WHEN K > 16 and K < 33  THEN 2
                          ELSE 0 END)
);
gülmek yok vururum :P ya ben caseden sonraki K yı silmemişim :oops: :lol:
bişey daha öğrendik. sağol @coderlord ;)
.-.-.-.-.-.-.-. ^_^
Cevapla