YAPMAK İSTEDİĞİM..
program server üzerinden çalışan çeşitli kullanıcıların girdiği birbirlerine mesaj attığı bir program benim ise yapmak istediğim kullanıcıların birbirlerine gönderdiği mesajların sayısını tutacak. ilk önceleri bunu programdan halletmeye çalıştım ama beni çok oyalacağını düşündüm ve bu işi veri tabanından halletmeye çalışıyordum tıkandım
1.sorum:
bunu yapmak için veri tabanına ayrı bir table açayımmı yoksa bu işlemi TABLE_USERS tablemin içine ilgili bir field(s) açsam olurmu...
2.sorum:(ESAS SORU)
kullanıcıların ayrı ıd leri ve ayrı ayrı gönderdikleri mesajlar var bunları ayrı ayrı tautabilmem için yazacağım triger(s) geb(n)erator(s) olacakmı olacaksa
AS
BEGIN
IF (NEW.USER_ID IS NULL) THEN //deneme
NEW.USER_ID = GEN_ID(GEN_SOLARIS_USERS,1);//deneme
NEW.record_date_time = current_timestamp;//deneme
END
gibimi olacak
son olarak
bu iş böle olmaz sana tavsiyem şudur.... mu diyeceksiniz? not şimdiden göndermiş olduğunuz güzel cevaplar için teşekkür ederim
bence ayri tabloya gerek yok... USERS tablosuna MESAJ_SAYISI diye default 0 olan bir alan ekleyip MESAJ tablosunun insert trigger'inda ilgili kullanıcının MESAJ_SAYISI alanını 1 arttirip, Delete trigger'inda da 1 azaltirsanız ihtiyaç görülür....
S.A
programın admin paneli olacak oradan yeni kullanıcılar eklenecek yani sonuç olarak fatih diye giren kullanıcı atıığı toplam mesajları görecek mehmet diye giren kullanıcı atıığı toplam mesaj sayısını görecek benim anladığım kadarıyla sizin anlatmak ve bana yardımcı omak istediğiniz konu bütün kullanıcıların attığı toplam mesaj eğer yanlış anladıysam daha açık bi şekilde izah edebilirmisiniz
kolay gelsin ii çalışmalar..
Hayır bütün kullanıcıların attığı toplam mesajdan bahsetmiyorum... Her kullanıcının attıgı meaj sayısını ayrı ayrı tutabilirsiniz...
Yapmanız gereken USERS tablosuna MESAJ_SAYISI diye default 0 olan bir alan ekleyip MESAJ tablosunun insert trigger'inda da o an mesaj atan kullanıcının numarasını bildiginiz icin o numaraya ait USERS tablosundaki kayıttaki MESAJ_SAYISI alanını arttiracaksiniz....
Genel olarak bu tür amaçlar için trigger kullanım teknikleri konusunda bu makaleden istifade edebilirsiniz... viewtopic.php?t=644&highlight=
hocam tekrar merhabalar (biraz ara verdim kusura bakma)
dediğiniz işlemi yaptım
yalnız ben size şöle anlatayım message tablosuna message_count diye bir alan açtım (integer ) message_count diye bir genarator oluşturdum.
message tablosunun before insert trigrina şu kodu yazdım
AS
BEGIN
IF (NEW.SMB_ID IS NULL) THEN
NEW.SMB_ID = GEN_ID (GEN_SOLARIS_MESSAGE_BOARD,1);
NEW.record_date_time = current_timestamp;
NEW.message_count = gen_id (gen_message,1);
end
dediğim gibi toplam mesajları alıyor makalenizi inceledim stok giriş çıkışını bizzat uyguladım fakat bu sorunu çözemedim
fahrettin yazdı:
Yapmanız gereken USERS tablosuna MESAJ_SAYISI diye default 0 olan bir alan ekleyip MESAJ tablosunun insert trigger'inda da o an mesaj atan kullanıcının numarasını bildiginiz icin o numaraya ait USERS tablosundaki kayıttaki MESAJ_SAYISI alanını arttiracaksiniz...
ALTER PROCEDURE PROC_MESSAGE_COUNT (
SENDER_ID INTEGER)
RETURNS (
COUNT_SENDER INTEGER)
AS
BEGIN
FOR
SELECT COUNT( SOLARIS_MESSAGE_BOARD.SMB_ID )
FROM SOLARIS_MESSAGE_BOARD
WHERE
(
(SOLARIS_MESSAGE_BOARD.SMB_SENDER_ID =:SENDER_ID)
)
INTO :COUNT_SENDER
DO
BEGIN
SUSPEND;
END
END
bu kodu procedure olarak verdim ama ufak bi sorun delphide bu kodu nasıl çalıştıracağım ii çalışmalar
arkadaşlar sorun çok büyük sorumluluk haline geldi verdiğiniz ip uçlarından yolaçıkarak bişeyler yapmaya çalıştım interbasede sql kod yazmak için kolaylık sunan querybuilder'ı keşfettim ve en sonunda işime yarayan bir stored procedure oluşturdum ama bu procedurü delphide uygulayamıyom bana bu konuda yardımcı olursanız sevinirim proceduru yıkarıda yazdım ama bidaha yazayım çalıştırdığım zaman bana istediğim sonucu veriyo hepinize teşekkür ederim. ii çalışmalar.
ALTER PROCEDURE PROC_MESSAGE_COUNT (
SENDER_ID INTEGER)
RETURNS (
COUNT_SENDER INTEGER)
AS
BEGIN
FOR
SELECT COUNT( SOLARIS_MESSAGE_BOARD.SMB_ID )
FROM SOLARIS_MESSAGE_BOARD
WHERE
(
(SOLARIS_MESSAGE_BOARD.SMB_SENDER_ID =:SENDER_ID)
)
INTO :COUNT_SENDER
DO
BEGIN
SUSPEND;
END
END
DM.CDS_FOLLUK.Close;
DM.CDS_FOLLUK.CommandText := 'SELECT COUNT (ss.SMB_ID) AS AHMET FROM SOLARIS_MESSAGE_BOARD SS WHERE SS.SMB_SENDER_ID = '+INTtOSTR(Dm.fSenderId)+'';
DM.CDS_FOLLUK.Open;
If DM.CDS_FOLLUK.RecordCount > 0 then
LBL_TOTAL.Caption := IntTostr(DM.CDS_FOLLUK.FieldByName('AHMET').Value);