kullanıcı adını otomatik kaydettirme

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

kullanıcı adını otomatik kaydettirme

Mesaj gönderen bobasturk »

Merhabalar,

Basit bir sorunum var aşamadım. Aslında nereye yazacağımı bilemedim.

Yaptığım çalışmada programa giriş kullanıcı adı ve şifre ile oluyor. veri giriş sayfalarında kullanıcının girişte kullandığı kullanıcı adlarını dbedit içerisine dbnavigator un insert tuşuna basınca aşağıdaki işlemleri yaptırarak aldırıyorum;

Kod: Tümünü seç

procedure TFrmSucSayi.DBNavigator1Click(Sender: TObject;
  Button: TNavigateBtn);
begin
  if (button=nbinsert) then
  begin
    dm1.sucnoveribqry.close;
    dm1.sucnoveribqry.sql.clear;
    dm1.sucnoveribqry.sql.add('select max(SUC_NO) as sucno from SUC_SAYI');
    dm1.sucnoveribqry.SQL.Add('Where SUC_YILI=:suc_yili');
    dm1.sucnoveribqry.parambyname('suc_yili').asinteger:=strtoint(copy(datetostr(date),7,10));
    dm1.sucnoveribqry.open;

    dm1.SucSayiIBDSet.Append;
    dbedit6.Text:=inttostr(dm1.sucnoveribqry.fieldbyname('sucno').AsInteger+1);
    dbedit5.Text:=inttostr(strtoint(copy(datetostr(date),7,10)));
    DBEdit13.Text:=dm1.PrgGirisIBQry.fieldbyname('KULLANICI_ADI').AsString;//Kullanıcı adının alındığı yer
    jvdbdateedit1.SetFocus;
  end;
end;
Bu işlemi veri girişini kimin yaptığını takip amaçlı kullanıyorum veya kullanmak istiyorum. Sorunum burada başlıyor insert olayında istediğimi yapabiliyorum ama edit işleminde yapamıyorum.

datasetin beforeedit yordamına afterpost yordamına form üzerindeki dbedit içine veriyi alarak kayıt yapmasına çalıştım ama olmadı. navigator un edit buttonunda bu işi yukarıdaki gibi yapabileceğim ama yine sorun var dbedit bileşenleri kullandığım için editlere direk müdahalede dataset edit moduna geçtiği için kullanıcı navigator un edit tuşuna basmadan da düzenleme yapabilir.

Kod: Tümünü seç

dbeditxx.text:=dm1.prggirisibqry.fieldbyname('KULLANICI_ADI').asstring;
bu kodu veya benzerini nereye yazmalıyım ki kullanıcı programa girdikten sonra eğer verilerde düzenleme yaparsa tablodaki veri girişi yapan alanına güncelleme yapsın.

teşekkür ve 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ı
bobasturk
Kıdemli Üye
Mesajlar: 1387
Kayıt: 20 May 2004 08:39
Konum: Düzce

Mesaj gönderen bobasturk »

Merhaba, hayırlı sabahlar.

Kirliliğe sebep olduğum için özür dilerim. Sorunumu aşağıdaki gibi çözdüm fakat doğruluk ve düzgün çalışma durumunu bilemiyorum yorum yaparsanız sevinirim.

İlgili DataSeti in AfterEdit yordamına aşağıdaki kodu yazdım.

Kod: Tümünü seç

sucsayiibdset.UpdateRecord;
  sucsayiibdset.FieldByName('VERI_GIRISI_YAPAN').AsString:=
                           prggirisibqry.fieldbyname('KULLANICI_ADI').AsString;
Teşekkür ve 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ı
hdayi
Kıdemli Üye
Mesajlar: 1284
Kayıt: 29 Oca 2004 01:53
Konum: Erciyes'in eteklerinden.

Mesaj gönderen hdayi »

Hocam bu şekilde yaparsan, ilk kaydı misal ben girmişsem sonra da sen değiştirmişsen kaydı ilk giren de sen gözükmez misin? Ayrı bir tablo da tutsan bu kullanıcı bilgisini? kayıt_id, kullanıcı_id, tarih saat ve hatta değişen alanların adları gibi değişiklikleri ayrı bir tabloda tutabilirsin. Daha detaylı bir bilgi de tutmuş olursun.
Ben bir programda yapmıştım, bazı alanların eski değerlerini de tutuyordum, artniyetli bir değişiklik yapılmışsa diye.

Kolay Gelsin...
Bişnev in ney çün hikâyet mîküned
Ez cüdâyîhâ şikâyet mîküned
Resim
Kullanıcı avatarı
bobasturk
Kıdemli Üye
Mesajlar: 1387
Kayıt: 20 May 2004 08:39
Konum: Düzce

Mesaj gönderen bobasturk »

Merhaba,

Hdayi ustam, evet tespitiniz doğru. Programımda zaten giriş yapıldığında bir tabloda giren kullanıcı tarih saat tutuluyor. ama bu tablada nerede ne iş yaptığı yok sadece girişini kaydediyor. amacım kullanıcılar hata yaptığında tümünü uyarma yoluna gideceğime hatalı girilmiş kaydı kim güncelledi veya kayıt girişi yaptı ise sadece onu uyararak ve kullanım hakkında bilgilendirerek diğerlerine laf yetiştirmemek. dediğiniz gibi veya kayıt girişi yapılan yerde ilk giriş yapan ve güncelleyen şeklinde iki ayrı kayıt ta tutulabilir.

evet yazarken bir yandan teklifinizi düşünüyorum ve makul geliyor. sadece kullanıcı adı tarih saat ve girilen veya güncellenen kaydın pk kayıtlarını tutarak takip edilebilir.

Teşekkür ve 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
aLonE CoDeR
Kıdemli Üye
Mesajlar: 1223
Kayıt: 26 Nis 2005 04:08

Mesaj gönderen aLonE CoDeR »

Peki senaryo 10 kullanıcılı bir network ortamında gelişsin ve aynı anda 3 kullanıcı kaydı modify etsin.Nasıl bir sonuçla karşılaşırız?
Hakan Can
Üye
Mesajlar: 634
Kayıt: 04 Mar 2005 04:27
Konum: Ankara

Mesaj gönderen Hakan Can »

Ben bu konu üzerinde epey farklı yöntemler denedim.
Eğer veritabanında tutulan bilgiler çok değerli ve kimin ne girdiği ne yaptığı çok önemli ise bir kere bu problemi tamamen veritabanında halletmeniz lazım. Her kullanıcıya bir UserName ve Password tanımlayıp ona göre triggerlar yazmanız gerekir.

Eğer bu kadar önemli değil ve program tarafında bu işi halletmek istiyorum diyorsanız şöyle bir yöntem izleyebilirsiniz (ben şahsen bu aşamada size bunu tavsiye ederim):
Önemli olduğunu düşündüğünüz tablolarda SON_ISLEM_TARIHI_ ve SON_ISLEM_YAPAN_ adlarında iki alan bulundurun. Bütün DataSet'lerin AfterPost eventinde bunlara Tarihi ve Aktif Kullanıcıyı atayın. Tabi detayı sizin yazılım tekniğinize kalmış.
Peki bu yeterli olur mu? Bence fazlasıyla olur. Burada maksadınız kayıtla ilgili hesap sorabilmek. Eğer bir kayıtta bir kullanıcının adı varsa o kaydın son şeklinden o sorumludur. "Yok ben yapmadım da o zaten yapmıştı da vs." hiç bir şey söyleme hakkı olamaz. Bu teknik kullanıcıların çok daha dikkatli olmasını ve sorumluluk almasını sağlayacaktır.
Tabi burada DELETE işlemi eğer önemli ise- ki o da önemli- bunun için de tek bir tablo tutup onun içine AfterDelete eventinde Tablo Adı, Kullanıcı Adı, Tarih-Saat, Silinen Bilgiler vs. gibi bilgileri kaydedebilirsin.
Artık gerisi senin tercihine ve yazılım tekniğine kalıyor.

İyi çalışmalar.
Kullanıcı avatarı
bobasturk
Kıdemli Üye
Mesajlar: 1387
Kayıt: 20 May 2004 08:39
Konum: Düzce

Mesaj gönderen bobasturk »

Merhaba,

Ustalarım hepinize hak veriyorum yapmak istediğim iş çok önemli bir şey değil. Hakan ustamın dediği gibi son değiştiren sorumlu ilk giren değil. Son halinde bir arıza varsa amacım o kişiyi uyarmak bir kişi ile uğraşmak tüm kullanıcılar ile değil. Veri girişi veya diğer işlemleri yapanların kayıtlarının tutulmasının önemi çok olsaydı veya ileride olacak bir uygulamam olursa muhakkak bu foruma bu yazıya ve sizlere danışarak daha sağlam bir yapı ile yapacağım. hakan ustamın önerileri güzel delet işlemi için kayıt tutma işlemi aklıma gelmemişti onuda yapmaya çalışacağım.

Açıkçası vt tarafında user ve pass oluşturarak işlemlerin takibi konusunu hiç çalışmadım. bu konuda yukarıda bahsettiğim uygulama için aklıma geldi ve yapmaya çalıştım. Ever vt tarafında yapılışı hakkında ana başlıklar hakkında bilgi verirseniz sevinirim. Ne yönde arama yaparak araştıracağımı kestirme açısından ve mantığını kapabilme açısından.

teşekkür ve 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
Cevapla