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
DBGridde listelenen kolonlara gore rapor alabilmesi veya excel, html aktarim
DBGrid deki kolonlari kullanicinin duzenleyebilmesine izin verme.
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;
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.
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;
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;
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;
Client kullanim icin Network ayarlari
Firebird veritabani yedekleme, geri yukleme
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