Procedure her yerden erişmek
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
-
- Üye
- Mesajlar: 20
- Kayıt: 13 Tem 2008 06:32
Procedure her yerden erişmek
S.A arkadaşlar kullanıcı yetkilendirme ile ilgi olarak aşağıdaki gibi bir procedure yazıp onshow yaptığım formun üzerideki actionları kullanıcı yekisine göre enable yada disable yapmak isityorum istediğimin %90 tmm ama aynı formu kapatıp açtığımda yani procedure 2 çalıştığında violation access hatası veriyor sanki create edilmemiş form için çalıştırılmış gibi bunu nasıl aşarım şimdiden herkese tşk.. procedure tek çalışmada sorun yok
procedure KullaniciYetkilendir(AForm: TForm; fKulID: Integer);
var
i, a: Integer;
Alan, Deger: string;
Sonuc: Boolean;
Yetki: SmallInt;
begin
With DMQ_1.qryUserItem do
begin
Close;
ParamByName('fuserid').AsInteger := fKulID;
Open;
end;
alan := 'menuadi';
//yetkiye göre true yapıyoz
try
try
for i := 0 to AForm.ComponentCount - 1 do
begin
if AForm.components is TAction then
begin
Deger := TAction(AForm.components).Name;
Sonuc := DMQ_1.qryUserItem.Locate(Alan, Deger,[]);
Yetki := DMQ_1.qryUserItem.FieldByName('ac').AsInteger;
if (Sonuc = True) and (Yetki = 1) then
TAction(AForm.components).Enabled := True;
//else TAction(AForm.components).Enabled := False;
end;//if TAction
end;//if component count
except
on E : Exception do
ShowMessage(' Kullanıcı yetkileri kontrol edilirken hata oluştu! HATA KODU : '+
E.ClassName+'&'+E.Message);
end;//
finally
DMQ_1.qryUserItem.Close;
end;
end;
kullanıımı
her formun onshow una
KullaniciYetkilendir(frmMenu, DM.qryKulKontuserid.AsInteger);
KullaniciYetkilendir(frmCariler, DM.qryKulKontuserid.AsInteger);
KullaniciYetkilendir(frmStoklar, DM.qryKulKontuserid.AsInteger);
vs...
gibi
procedure KullaniciYetkilendir(AForm: TForm; fKulID: Integer);
var
i, a: Integer;
Alan, Deger: string;
Sonuc: Boolean;
Yetki: SmallInt;
begin
With DMQ_1.qryUserItem do
begin
Close;
ParamByName('fuserid').AsInteger := fKulID;
Open;
end;
alan := 'menuadi';
//yetkiye göre true yapıyoz
try
try
for i := 0 to AForm.ComponentCount - 1 do
begin
if AForm.components is TAction then
begin
Deger := TAction(AForm.components).Name;
Sonuc := DMQ_1.qryUserItem.Locate(Alan, Deger,[]);
Yetki := DMQ_1.qryUserItem.FieldByName('ac').AsInteger;
if (Sonuc = True) and (Yetki = 1) then
TAction(AForm.components).Enabled := True;
//else TAction(AForm.components).Enabled := False;
end;//if TAction
end;//if component count
except
on E : Exception do
ShowMessage(' Kullanıcı yetkileri kontrol edilirken hata oluştu! HATA KODU : '+
E.ClassName+'&'+E.Message);
end;//
finally
DMQ_1.qryUserItem.Close;
end;
end;
kullanıımı
her formun onshow una
KullaniciYetkilendir(frmMenu, DM.qryKulKontuserid.AsInteger);
KullaniciYetkilendir(frmCariler, DM.qryKulKontuserid.AsInteger);
KullaniciYetkilendir(frmStoklar, DM.qryKulKontuserid.AsInteger);
vs...
gibi
-
- Üye
- Mesajlar: 16
- Kayıt: 25 Nis 2011 04:04
Re: Procedure her yerden erişmek
yeni bir unit oluşturun
birden çok formda kullanacağınız bütün metotları buraya taşıyın
metotları kullanacağınız formlarda bu uniti kullanın
birden çok formda kullanacağınız bütün metotları buraya taşıyın
metotları kullanacağınız formlarda bu uniti kullanın
-
- Üye
- Mesajlar: 20
- Kayıt: 13 Tem 2008 06:32
Re: Procedure her yerden erişmek
cevabın için tşk ama yeni bir unit oluşturmak işimi görmüyor hata yine alıyorum
-
- Üye
- Mesajlar: 16
- Kayıt: 25 Nis 2011 04:04
Re: Procedure her yerden erişmek
aslında şu şekilde bir çözüm geliyor aklıma
bu yetki sorgusu bir sefer çalıştırılır ilk uygulama açıldığında
buradaki değer bir genel değişkene atılır uygulama dosyasında
her formun onshow metodunda
switch case ile kontroller yapılıp
yetkisi varsa enable disable olayları yapılabilir
bu yetki sorgusu bir sefer çalıştırılır ilk uygulama açıldığında
buradaki değer bir genel değişkene atılır uygulama dosyasında
her formun onshow metodunda
switch case ile kontroller yapılıp
yetkisi varsa enable disable olayları yapılabilir
-
- Üye
- Mesajlar: 20
- Kayıt: 13 Tem 2008 06:32
Re: Procedure her yerden erişmek
actionları tarayacaksa component.count metodundan kurtulamıyoz dolayısılya her form için aynı procedure tekrar yazcaz yada tek procedurle ayrı formlardaki componentleri nasıl tarayacaz onu bulamadım işte 

-
- Üye
- Mesajlar: 20
- Kayıt: 13 Tem 2008 06:32
Re: Procedure her yerden erişmek
arkadaşlar yapmak istediğim ekteki bu örnek bunu çalışır hale getirirsek işim görüleçek
- Dosya ekleri
-
- Projects.zip
- arkadaşlar yapmak istediğim bu örnek bunu çalışır hale getirirsek işim görüleçek
- (60.46 KiB) 80 kere indirildi
-
- Üye
- Mesajlar: 20
- Kayıt: 13 Tem 2008 06:32
Re: Procedure her yerden erişmek
S.A Arkadaşlar herkese tşk ederim ilgilendiğiniz içi özelliklede trex994 ve coder serdara ama ben sorunu şu şekilde çözdüm başka arkadaşlara yardımcı olur diye yayınlıyorum..
-
- Üye
- Mesajlar: 20
- Kayıt: 13 Tem 2008 06:32
Re: Procedure her yerden erişmek
procedure KullaniciYetkilendir(AForm: TForm; fKulID: Integer);
var
i: Integer;
fAction: TAction;
fActName: String;
begin
With DMQ_1.qryUserItem do
begin
Close;
ParamByName('fuserid').AsInteger := fKulID;
Open;
end;
//yetkiye göre true yapıyoz
try
DMQ_1.qryUserItem.First;
try
while not DMQ_1.qryUserItem.Eof do
begin
if DMQ_1.qryUserItem.FieldByName('ac').AsInteger = 1 then
begin //yetkisi yoksa true yap
fActName := DMQ_1.qryUserItem.FieldByName('menuadi').AsString;
if Assigned(TAction(AForm.FindComponent(fActName))) then
TAction(AForm.FindComponent(fActName)).Enabled := True;
end else begin //yetkisi yoksa false yap
fActName := DMQ_1.qryUserItem.FieldByName('menuadi').AsString;
if Assigned(TAction(AForm.FindComponent(fActName))) then
TAction(AForm.FindComponent(fActName)).Enabled := False;
end;
DMQ_1.qryUserItem.Next;
end;//while sonu
except
on E : Exception do
ShowMessage(' Kullanıcı yetkileri kontrol edilirken hata oluştu! HATA KODU : '+
E.ClassName+'&'+E.Message);
end;
finally
DMQ_1.qryUserItem.Close;
//FreeAndNil(fAction);
end;
end;
İşin püf noktası kullanımıda imiş procedure birinci aform parametresine form ismi değilde self dememiz gerekiyormuş ilk yazdımğım kodda bu şekilde çalışıyor
kullanımı
KullaniciYetkilendir(Self, DM.qryKulKontuserid.AsInteger);
gibi
var
i: Integer;
fAction: TAction;
fActName: String;
begin
With DMQ_1.qryUserItem do
begin
Close;
ParamByName('fuserid').AsInteger := fKulID;
Open;
end;
//yetkiye göre true yapıyoz
try
DMQ_1.qryUserItem.First;
try
while not DMQ_1.qryUserItem.Eof do
begin
if DMQ_1.qryUserItem.FieldByName('ac').AsInteger = 1 then
begin //yetkisi yoksa true yap
fActName := DMQ_1.qryUserItem.FieldByName('menuadi').AsString;
if Assigned(TAction(AForm.FindComponent(fActName))) then
TAction(AForm.FindComponent(fActName)).Enabled := True;
end else begin //yetkisi yoksa false yap
fActName := DMQ_1.qryUserItem.FieldByName('menuadi').AsString;
if Assigned(TAction(AForm.FindComponent(fActName))) then
TAction(AForm.FindComponent(fActName)).Enabled := False;
end;
DMQ_1.qryUserItem.Next;
end;//while sonu
except
on E : Exception do
ShowMessage(' Kullanıcı yetkileri kontrol edilirken hata oluştu! HATA KODU : '+
E.ClassName+'&'+E.Message);
end;
finally
DMQ_1.qryUserItem.Close;
//FreeAndNil(fAction);
end;
end;
İşin püf noktası kullanımıda imiş procedure birinci aform parametresine form ismi değilde self dememiz gerekiyormuş ilk yazdımğım kodda bu şekilde çalışıyor
kullanımı
KullaniciYetkilendir(Self, DM.qryKulKontuserid.AsInteger);
gibi