Firebird Client/Server,Master/Detail,IBEvent Kullanıcı Hak..

Yazdığınız makaleleri ve üyelerimizin işine yarayacağını düşündüğünüz kodlarınızı gönderebilirsiniz. Bu foruma soru sormayın!
Kullanıcı avatarı
Z.D.
Üye
Mesajlar: 104
Kayıt: 01 Nis 2006 01:48
Konum: İstanbul

Firebird Client/Server,Master/Detail,IBEvent Kullanıcı Hak..

Mesaj gönderen Z.D. »

Programı yeni başlayanlara kaynak olmasi acisindan ve elimden geldigince bircok procedure, functiona deginmeye calisarak yazdim. Bu uygulamada Hüseyin ÖZDEMİR üstadın yazdigi Excel Export fonksiyonunda biraz duzenlemeler yaparak DBGriddeki kolonlari baz alarak aktarim yapacak sekilde optimize ettim. Birde 3 parti bilesen olarak Fast Report disinda bir bilesen kullanmadim.

Programda;
* Master / Detail
* Client / Server
* IBEvents1
* Tablolara eklenen yada duzeltilen kayitlarin hangi kullanici ve tarihte yapildigini duzenleyen trigger ve stored procedure ornekleri. IBEvents1 bileseni ile bunlarin serverdaki diger clientlere bildirilmesi..
* Kullanicilarin rapor tasarlayabilcegi veya raporlarini hizli bir bicimde secip gerekirse duzenleyebilmesi.
* DBGridde listelenen kolonlara gore rapor alabilmesi veya excel, html aktarim
* DBGrid deki kolonlari kullanicinin duzenleyebilmesine izin verme.
* Firebird veritabani yedekleme, geri yukleme.
* Kullanıcı Login giris ekrani
* Yetkili kullanici sifresi degistirme (sysdba, masterkey)
* Yetkili tarafindan kullanici ekleme, duzeltme silme. Bu kullanicilara veritabanindaki tablolara yetki atayabilme.
* Client kullanim icin Network ayarlari

ANA EKRAN

Resim


DBGridde listelenen kolonlara gore rapor alabilmesi veya excel, html aktarim

Resim

DBGrid deki kolonlari kullanicinin duzenleyebilmesine izin verme.

Resim

Hepsine deginemem ama mesela formu cagirirken bir paremetre verelim boylece diger formatlardan kolay bir bicimde olusturabiliriz. Burdaki parametre ppDBGrid, listviewde bu griddeki visible olanlarin basina check koyarak listeleyebiliriz.

Kod: Tümünü seç

Procedure GridColumnSetting(ppDBGrid: TDBGrid);
Begin
   DBGrid_Col := ppDBGrid;
   Screen.Cursor := crHourGlass;
   Try
      GridTableSetFrm := TGridTableSetFrm.Create(Application);
      GridTableSetFrm.ShowModal;
   Finally
      GridTableSetFrm.Free;
      Screen.Cursor := crDefault;
   End;
End;


Procedure TGridTableSetFrm.FormShow(Sender: TObject);
Begin
   FillColumnsInfo(DBGrid_Col);
End;

Procedure TGridTableSetFrm.FillColumnsInfo(Grid: TDBGrid);
Var
   c: integer;
   idx: integer;
   LID: TListItem;
Begin
   ListView1.Clear;
   For c := 0 To DBGrid_Col.Columns.Count - 1 Do
   Begin
      LID := ListView1.Items.Add;
      LID.Caption := DBGrid_Col.Columns[c].Title.Caption;
      LID.Data := DBGrid_Col.Columns[c];
      LID.SubItems.Add(DBGrid_Col.Columns[c].FieldName);
      LID.Checked := DBGrid_Col.Columns[c].Visible;
   End;
   Panel1.Caption := ' Toplam Sütun Sayısı : ' + IntToStr(c);
End;


Procedure TGridTableSetFrm.btnOKClick(Sender: TObject);
Var
   i, j: Integer;
   column: TColumn;
Begin
   j := 0;
   For i := 0 To ListView1.Items.Count - 1 Do Begin
      If ListView1.Items[i].Checked Then Begin
         j := 1;
         break;
      End;
   End;
   If j <> 1 Then Begin
      Application.MessageBox('Tablo için en az 1 kolon seçilmeli!', pChar(pCaption), MB_OK + MB_ICONEXCLAMATION);
      exit;
   End;


   For i := 0 To ListView1.Items.Count - 1 Do Begin
      column := TColumn(ListView1.Items[i].Data);
      column.Visible := ListView1.Items[i].Checked;
      column.Index := i;
   End;

   close;
End;

Yetkili tarafindan kullanici ekleme, duzeltme silme. Bu kullanicilara veritabanindaki tablolara yetki atayabilme.
Bu dialogda Kullanıcılar tabında Firebird serverda bulunan butun kullanicilari listeledim. Veritabanı üzerinde yetkilendirilmiş olanlar siyah font ile diğer kullanıcılar silver gibi bir renkle.

Resim

Kod: Tümünü seç

Procedure TUserAddFrm.SetUserAuthority(ppFunc: String);
Var
   LID: TListItem;
   j: Integer;
   xStrList: TStringList;
   {-------------------------------------------------
    FIREBIRD SERVERDAKI KULLANICI ISIMLERINI LISTELE
   -------------------------------------------------}
   Procedure GetRegisteredUsers(Var ppStringList: TStringList);
   Var
      i, ii: Integer;
   Begin
      With DM.IBSecurityService1 Do Begin
         ServerName := DtSet.ServerName;
         With Params Do Begin
            Clear;
            Add('user_name=' + DtSet.UserName);
            Add('password=' + DtSet.PassWord);
         End;
         Active := True;
         Try
            DisplayUsers;
            For i := 0 To UserInfoCount - 1 Do Begin
               With UserInfo[i] Do Begin
                  If LowerCase(Trim(UserName)) <> 'sysdba' Then Begin
                     LID := ListView1.Items.Add;
                     LID.Caption := Trim(UserName);
                     LID.SubItems.Add(FirstName);
                     LID.SubItems.Add(LastName);
                     LID.ImageIndex := 0;
                     For ii := 0 To ppStringList.Count - 1 Do Begin
                        If LowerCase(ppStringList.Strings[ii]) = LowerCase(Trim(UserName)) Then Begin
                           LID.ImageIndex := 1;
                           break;
                        End;
                     End;
                  End;
               End;
            End;
         Finally
            Active := False;
         End;
      End;
   End;

Begin

   With DM.QBOX Do Begin
      Close;
      SQL.Clear;
      SQL.Add('SELECT DISTINCT RDB$USER,RDB$GRANT_OPTION');
      SQL.Add(' FROM RDB$USER_PRIVILEGES');
      SQL.Add(' WHERE (RDB$USER NOT IN (SELECT RDB$ROLE_NAME FROM RDB$ROLES))');
      SQL.Add('  AND (RDB$USER NOT IN (SELECT DISTINCT RDB$OWNER_NAME FROM RDB$RELATIONS WHERE (RDB$SYSTEM_FLAG = 1)))');
      SQL.Add('  AND (RDB$USER <> ''PUBLIC'')');
      Open;
      First;
   End;
   Try
      ListView1.Items.BeginUpdate;
      ListView1.Clear;
      xStrList := TStringList.Create;
      While Not DM.QBOX.Eof Do Begin
         xStrList.Add(Trim(DM.QBOX.FieldByName('RDB$USER').AsString));
         DM.QBOX.Next;
      End;
      GetRegisteredUsers(xStrList);
   Finally
      xStrList.Free;
      If ppFunc <> '' Then Begin
         For j := 0 To ListView1.Items.Count - 1 Do Begin
            If uppercase(ListView1.Items[j].Caption) = uppercase(ppFunc) Then Begin
               If ListView1.Items.Count > 0 Then
                  ListView1.Items[j].Selected := TRUE;
               ListView1.SetFocus;
               break;
            End;

         End;
      End;
      ListView1.Items.EndUpdate;
   End;
End;
Bu uygulamada dikkat edilmesi gerekn, genel ayarlar icin bir struct kullandim.

Kod: Tümünü seç

{=======================================
>>  GENERAL PROGRAM SETTINGS
>>          STRUCT
========================================}
Type
   DtSettings = Record
      DatabaseName: String;
      DatabasePath: String;
      UserName: String;
      Password: String;
      SavePath: String;
      BackupFilename: String;
      ServerName: String;
      FirstName: String;
      LastName: String;
      Grantor: Boolean;
      Client: Boolean;
      AutoBackup: Boolean;
      AutoBackupPeriod: Integer;
      Notification: Boolean;
   End;
Bu sayede azda olsa degiskenleri tek bir yapida toplayabiliyorum:)

Kullanıcı yetkilendirme yaptıktan sonr Kaydet butonuna tıklarsa;

Kod: Tümünü seç

Procedure TUserAddFrm.Kaydet_btnClick(Sender: TObject);
Var
   i: Integer;
   a, tempString, ppUserName: String;
   c: Boolean;
Begin
   If ListView1.ItemIndex <> -1 Then Begin
      Kaydet_btn.Enabled := FALSE;
      ppUserName := ListView1.Selected.Caption;
      c := FALSE;
      For i := 1 To StringGrid1.RowCount - 1 Do Begin
         tempString := StringGrid1.Cells[0, i];
         tempString := copy(tempString, 3, length(tempString));

         With DM.IBSQL1 Do Begin
            SQL.Clear;
            SQL.Add('REVOKE ALL ON ' + tempString + ' FROM ' + ppUserName);
            DM.IBSQL1.ExecQuery;
         End;

         a := '';
         If StringGrid1.Cells[1, i] = 'Var' Then
            a := a + 'SELECT,';
         If StringGrid1.Cells[2, i] = 'Var' Then
            a := a + 'INSERT,';
         If StringGrid1.Cells[3, i] = 'Var' Then
            a := a + 'UPDATE,';
         If StringGrid1.Cells[4, i] = 'Var' Then
            a := a + 'DELETE,';
         If a <> '' Then Begin
            c := TRUE;
            a := 'GRANT ' + a + ' REFERENCES ON ' + tempString + ' TO ' + ppUserName;
            With DM.IBSQL1 Do Begin
               SQL.Clear;
               SQL.Add(a);
               ExecQuery;
            End;
         End;
      End;
      If c Then
         With DM.IBSQL1 Do Begin
            SQL.Clear;
            SQL.Add('GRANT EXECUTE ON PROCEDURE GET_CURUSERDATE TO ' + ppUserName);
            ExecQuery;
            {---------------------------------------------------}
            SQL.Clear;
            SQL.Add('GRANT EXECUTE ON PROCEDURE SET_LASTUSR TO ' + ppUserName);
            ExecQuery;
         End;
      DM.IBTransaction1.CommitRetaining;
   End;
End;
StringGrid deki Cellleri bir for döngüsü ile kontrol edip, ona göre SQL sorgusu ile execute ediyorum. Bu arada veritabanın 2 tane stored procedure var onlarıda manuel olarak giriyoruz.

Client kullanim icin Network ayarlari

Resim


Firebird veritabani yedekleme, geri yukleme

Resim


Bunun gibi birçok dialog prosedür ve fonksiyonu paketin içinde bulabilirsiniz. Tekbir konu olmadığı için makale şeklinde yazamıyorum, bu yüzden kusura bakmayın.


SOURCE CODE + TEMPLATE

http://rapidshare.com/files/28137348/Fi ... x.rar.html
Kullanıcı avatarı
White Rose
Üye
Mesajlar: 726
Kayıt: 06 Tem 2005 09:41
Konum: Güneyden
İletişim:

Firebird Client/Server,Master/Detail,IBEvent Kullanıcı Hak..

Mesaj gönderen White Rose »

Emekleriniz ve paylaşım için teşekkürler

Arkadaşlar bende kaynak kodu vardı isteyenleriçin ekliyorum
Dosya ekleri
Fb_ClientServer.rar
(203.74 KiB) 606 kere indirildi
En son White Rose tarafından 26 Şub 2017 01:45 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Kullanıcı avatarı
husonet
Admin
Mesajlar: 2962
Kayıt: 25 Haz 2003 02:14
Konum: İstanbul
İletişim:

Mesaj gönderen husonet »

Eline sağlık güzel olmuş devamını bekliyoruz :)

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ı
Z.D.
Üye
Mesajlar: 104
Kayıt: 01 Nis 2006 01:48
Konum: İstanbul

Mesaj gönderen Z.D. »

İnşallah :) Birkaç aydır epey yoğundum. Aklımda bazı projeler var(DivxARC gibi) belki onuda opensource yapıp buraya koyabilirim.
Tabii önce başlamak lazım.

İlginiz için tekrar teşekkürler.
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7586
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

Teşekkürler hocam, eline sağlık.

Sade ve güzel bir proje olmuş. Ekran dizaynları da güzel. İlgilenen arkadaşlara eminim çok faydası olacaktır.

Kolay gelsin.
Kullanıcı avatarı
Lost Soul
Üye
Mesajlar: 1064
Kayıt: 01 Nis 2007 02:55
Konum: mekan ANKARA toprak ELAZIĞ
İletişim:

Mesaj gönderen Lost Soul »

mussimsek yazdı:Teşekkürler hocam, eline sağlık.

Sade ve güzel bir proje olmuş. Ekran dizaynları da güzel. İlgilenen arkadaşlara eminim çok faydası olacaktır.

Kolay gelsin.
Mustafa bbey söylenecekleri söylemiş.
Bize de katılmaktan başka bir şey jalmıyor :D
Kullanıcı avatarı
sadettinpolat
Moderator
Mesajlar: 2130
Kayıt: 07 Ara 2003 02:51
Konum: Ankara
İletişim:

Re: Firebird Client/Server,Master/Detail,IBEvent Kullanıcı H

Mesaj gönderen sadettinpolat »

Z.D. yazdı: * DBGridde listelenen kolonlara gore rapor alabilmesi veya excel, html aktarim
eger dbGridteki alanlar sayfaya sigmazsa geri kalan alanlar bir sonraki sayfada cikiyor. bunu engelleyip sayfaya kac alan sigiyorsa o kadar alanin yazdirilmasini saglayacak ufak bir ayar mevcut mu fast reportta ?
"Sevmek, ne zaman vazgececegini bilmektir." dedi, bana.

---
http://sadettinpolat.blogspot.com/
Kullanıcı avatarı
Z.D.
Üye
Mesajlar: 104
Kayıt: 01 Nis 2006 01:48
Konum: İstanbul

Re: Firebird Client/Server,Master/Detail,IBEvent Kullanıcı H

Mesaj gönderen Z.D. »

sadettinpolat yazdı: eger dbGridteki alanlar sayfaya sigmazsa geri kalan alanlar bir sonraki sayfada cikiyor. bunu engelleyip sayfaya kac alan sigiyorsa o kadar alanin yazdirilmasini saglayacak ufak bir ayar mevcut mu fast reportta ?
Hocam fastreportta bunun için extra bir ayar varmı bilmiyorum ama eğer yoksa fastreport içinden event scriptleri ile yapılabilir gibime geliyor. Fazla kurcalamadım ama bu fast reporttaki cross objenin autosize gibi ayarları var.

Aceleyle uyarladığım için DEMO da mantık ve kod hataları olabilir : )
Kullanıcı avatarı
White Rose
Üye
Mesajlar: 726
Kayıt: 06 Tem 2005 09:41
Konum: Güneyden
İletişim:

Mesaj gönderen White Rose »

üstad fastreportun versiyonu kaç, bende açarken versiyon hatası verdi ve raporları açamıyorum.
Teşk.
Kullanıcı avatarı
Z.D.
Üye
Mesajlar: 104
Kayıt: 01 Nis 2006 01:48
Konum: İstanbul

Mesaj gönderen Z.D. »

Benim kullandigim Fast Report v4.x

http://www.fast-report.com/
R.K.
Üye
Mesajlar: 82
Kayıt: 02 Nis 2007 12:05
Konum: Adana

Mesaj gönderen R.K. »

Öncelikle herkese çok selamlar. Bu ilk mesajım :D Böyle bir paylaşıma katılabildiğim için o kadar mutluyumki inanın. Çünkü delphiyle tanıştığımdan beri (daha birkaç ay :p) ben bunu öğrenmeliyim dedim ve birkaç kitap edindim. Ama burayı görünce hepsinin içeriğiin ne kadar yetersiz olduğunu gördüm. Zaten bu siteyi bulduğumdan beri aradığım :ara herşeyi kolayca buluyorum. En son da gerçekten harika bir örnek olan Z.D hocamın gönderdiği örneği indirdim. Ellerine sağlık çünkü kitaplarda verilen edit şudur örnek

Kod: Tümünü seç

edit1.text:='aaaaaa'
gibi saçma örneklerden ziyade insanların işine daha çok yarayabilecek gerçekten kullanılabilecek bir kaynak olmuş. Benim sorumsa şu galiba yeni olmamdan dolayı bulamadım veya gözümün önünde olmasına rağmen ben göremedim. Bu örnekte bir türlü

Kod: Tümünü seç

Database1.DatabaseName:=
yani vt yolunun nasıl atandığını bulamadım :oops: Ben genelde programın bulunduğu klasörü

Kod: Tümünü seç

yol:=application.exename
gibi alıp işte data klasörüyle birleştiriyordum.
1. Bu programda vt yolu nasıl atanmış?
2. Benim dediğim gibi bir yöntem kullanmak sizce mantıklı mı?
Hepinize böyle bir paylaşımda olduğunuz için çok teş. :wink:
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

s.a.
bu sorunuzun cevabınıda :ara ma yaparak kolayca bulabilirsiniz :wink:
anahtar kelima databasename :wink:
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
mstsargin
Üye
Mesajlar: 12
Kayıt: 16 May 2009 04:21

Re: Firebird Client/Server,Master/Detail,IBEvent Kullanıcı H

Mesaj gönderen mstsargin »

arkadaşlar dosyanın linki kırık.daha önce indirmiş bir arkadaş yükleyebilir mi? şimdiden teşekkürler.
secret_boy
Üye
Mesajlar: 151
Kayıt: 17 Kas 2005 04:46

Re: Firebird Client/Server,Master/Detail,IBEvent Kullanıcı H

Mesaj gönderen secret_boy »

program elinde olan varsa linki düzenleyip yükleyebilir mi teşekkğrler
master_crazy
Üye
Mesajlar: 17
Kayıt: 09 Eyl 2016 11:57

Re: Firebird Client/Server,Master/Detail,IBEvent Kullanıcı Hak..

Mesaj gönderen master_crazy »

:bravo:
En son master_crazy tarafından 30 May 2017 09:24 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Cevapla