Valudation (Değer) Kontrolü
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
-
- Kıdemli Üye
- Mesajlar: 1026
- Kayıt: 11 Şub 2005 02:12
- Konum: İstanbul
Valudation (Değer) Kontrolü
Arkadaşlar veri tabanına bilgi girerken alanların değer kontrollerini yapmanın en kolay yolu nedir?
Beforepost olayına kod yazılabiliyor ancak bu pek pratik olmuyor.
Birde fieldların customconstraint diye bir özelliği var ancak bu da pek bir işe yaramıyor.Sql e dayanmayan kontrolleri yapamıyorsunuz.
Siz hangi yöntemleri kullanıyorsunuz.Örneğin bir parasal alanın boş geçilmemesi için veya bir tarih alanı 2 yıldan daha eski iken parasal değerin 20 den az olamaması vb. durumların kontrolü için ne gibi yollar izliyorsunuz.
Bunu yapmanın en iyi yolu bu kontrolleri veri tabanı kısmında yapmaktır sanırım.Ancak bunda da olumsuzluklar oluyor.Dediğim gibi bir datetimepicker ın vb. kontrolün durumuna göre de kontrol yapmak gerekebiliyor.
Beforepost olayına kod yazılabiliyor ancak bu pek pratik olmuyor.
Birde fieldların customconstraint diye bir özelliği var ancak bu da pek bir işe yaramıyor.Sql e dayanmayan kontrolleri yapamıyorsunuz.
Siz hangi yöntemleri kullanıyorsunuz.Örneğin bir parasal alanın boş geçilmemesi için veya bir tarih alanı 2 yıldan daha eski iken parasal değerin 20 den az olamaması vb. durumların kontrolü için ne gibi yollar izliyorsunuz.
Bunu yapmanın en iyi yolu bu kontrolleri veri tabanı kısmında yapmaktır sanırım.Ancak bunda da olumsuzluklar oluyor.Dediğim gibi bir datetimepicker ın vb. kontrolün durumuna göre de kontrol yapmak gerekebiliyor.
SQL kullanacaksan Database in desteğine göre if yada case olarak veri yi kontrol edebilirsin
Gazete manşetleri
* DİKKAT :Lütfen forum kurallarını okuyalım ve uyalım...!
* Warez,crack vs. paylaşımı kesinlikle yasaktır.
-
- Kıdemli Üye
- Mesajlar: 1223
- Kayıt: 26 Nis 2005 04:08
Merhaba.
Bunu veritabanı tarafında değil de exe'de yapmak daha mantıklı fikrimce..Bir proje ne kadar detaylı olursa olsun girilecek formatlar belli bir sınır içinde olacaktır..Bu tür işlemler için genelde bir kontrol uniti tanımlanır ve burada yazılacak fonksiyonlara değerler parametre olarak gönderilir.Dönecek değere göre de gerekli uyarıyı yapabilirsiniz..Birden fazla bileşen için aynı kontrolü yapmanız gerektiğinde de bileşenlerin eventini tek bir procedureye yönlendirmeniz işinizi kolaylaştıracaktır..Bir de bu işlemler için kimi bileşenlerde ekstra bir property oluyor..Ancak dilediğiniz kontrollerin tümüne hakim olmanız tahmininiz üzere manuel olarak yazmaktan geçiyor..
Saygılarımla.
Bunu veritabanı tarafında değil de exe'de yapmak daha mantıklı fikrimce..Bir proje ne kadar detaylı olursa olsun girilecek formatlar belli bir sınır içinde olacaktır..Bu tür işlemler için genelde bir kontrol uniti tanımlanır ve burada yazılacak fonksiyonlara değerler parametre olarak gönderilir.Dönecek değere göre de gerekli uyarıyı yapabilirsiniz..Birden fazla bileşen için aynı kontrolü yapmanız gerektiğinde de bileşenlerin eventini tek bir procedureye yönlendirmeniz işinizi kolaylaştıracaktır..Bir de bu işlemler için kimi bileşenlerde ekstra bir property oluyor..Ancak dilediğiniz kontrollerin tümüne hakim olmanız tahmininiz üzere manuel olarak yazmaktan geçiyor..
Saygılarımla.
s.a.
Kontrol işlemi alana girilecek bilgini tipine ve türüne göre değişkenlik arz eder.
bazı durumlarda kaydet düğmesinde post demeden önce. bazen tablonun beforepost olayında bazen ilgili dbkontrolun change inde bazende vt de triger ve chek lerle.
bu işlem için en iyi yöntm şudur. sürekli şunu kullanın gibi genelleme bence yapılamaz.
sizin yapacağınız en iyi şey ilgili alana ne tür bilgilerin girileceğini ve nasıl kontroller yapılması gerektiğini bilmek(kaydını tutmak) ve gerektiğinde ilgili durum için en uygun kontrolü yapıp kullanıcıyı duruma göre bilgilendirmek.
bence budur.
kolay gelsin.
Kontrol işlemi alana girilecek bilgini tipine ve türüne göre değişkenlik arz eder.
bazı durumlarda kaydet düğmesinde post demeden önce. bazen tablonun beforepost olayında bazen ilgili dbkontrolun change inde bazende vt de triger ve chek lerle.
bu işlem için en iyi yöntm şudur. sürekli şunu kullanın gibi genelleme bence yapılamaz.
sizin yapacağınız en iyi şey ilgili alana ne tür bilgilerin girileceğini ve nasıl kontroller yapılması gerektiğini bilmek(kaydını tutmak) ve gerektiğinde ilgili durum için en uygun kontrolü yapıp kullanıcıyı duruma göre bilgilendirmek.
bence budur.
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
-
- Kıdemli Üye
- Mesajlar: 1026
- Kayıt: 11 Şub 2005 02:12
- Konum: İstanbul
Bu şekilde bir genelleme yapılamıyacağını biliyorum.Ancak en pratik yolu arıyorum.Çünkü programlama aşamasında en çok zamanı bu validation kontrolü alıyor.Formları felan inherit edip pek çok şeyi çok kısa bir zaman sürecine yazabiliyorsunuz.Ancak her defasında bir yığın if-else yazmak bir sürü showmessage kullanmak benim zoruma gidiyor.Bunun yanında tam bir çözümde sağlamıyor.Çünkü veri tabanına farklı bir yolda erişildiğinde de geçersiz bir kaydın girilmemesi lazım veri tutarlılığını tam sağlayabilmek için.aslangeri yazdı:s.a.
Kontrol işlemi alana girilecek bilgini tipine ve türüne göre değişkenlik arz eder.
bazı durumlarda kaydet düğmesinde post demeden önce. bazen tablonun beforepost olayında bazen ilgili dbkontrolun change inde bazende vt de triger ve chek lerle.
bu işlem için en iyi yöntm şudur. sürekli şunu kullanın gibi genelleme bence yapılamaz.
sizin yapacağınız en iyi şey ilgili alana ne tür bilgilerin girileceğini ve nasıl kontroller yapılması gerektiğini bilmek(kaydını tutmak) ve gerektiğinde ilgili durum için en uygun kontrolü yapıp kullanıcıyı duruma göre bilgilendirmek.
bence budur.
kolay gelsin.
Bir şekilde bu validation kontrolünün de kolay bir yolu olmalı diye düşünüyorum.
Kod: Tümünü seç
procedure TChemPrmForm.ValidateInput(var M: TMessage);
begin
if TTntEdit(M.lParam).Text = '' then
begin
MessageDlg('Hatalı Değer!', mtWarning, [mbOk],0);
TTntEdit(M.lParam).SetFocus;
end;
end;
ek: tam yöntemle ilglii bkz: http://community.borland.com/article/0, ... 71,00.html
Kod: Tümünü seç
Technical Information Database
TI1171D.txt Validating input in TEdit components
Category :VCL
Platform :All
Product :Delphi All
Description:
Q: How can I validate input in my TEdit components?
A: Assuming you're using regular TEdit components,
during OnExit, you will see irregular behavior from
controls if you attempt to change focus at that time.
The solution is to post a message to your form in the TEdit's
OnExit event handler. This user-defined posted message will
indicate that the coast is clear to begin validating input.
Since posted messages are placed at the end of the message
queue, this gives Windows the opportunity to complete the
focus change before you attempt to change the focus back to
another control.
Attached is a unit and text representation of a DFM (form)
file which demonstrates this technique.
{ *** BEGIN CODE FOR UNIT5.PAS *** }
unit Unit5;
interface
uses
SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics,
Controls, Forms, Dialogs, StdCtrls, Mask;
const
{ User-defined message }
um_ValidateInput = wm_User + 100;
type
TForm5 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
Button1: TButton;
procedure EditExit(Sender: TObject);
procedure EditEnter(Sender: TObject);
private
Refocusing: TObject;
{ User-defined message handler }
procedure ValidateInput(var M: TMessage); message um_ValidateInput;
end;
var
Form5: TForm5;
implementation
{$R *.DFM}
procedure TForm5.ValidateInput(var M: TMessage);
var
E : TEdit;
begin
{ The following line is my validation. I want to make sure }
{ the first character is a lower case alpha character. Note }
{ the typecast of lParam to a TEdit. }
E := TEdit(M.lParam);
if not (E.Text[1] in ['a'..'z']) then begin
Refocusing := E; { Avoid a loop }
ShowMessage('Bad input'); { Yell at the user }
TEdit(E).SetFocus; { Set focus back }
end;
end;
procedure TForm5.EditExit(Sender: TObject);
begin
{ Post a message to myself which indicates it's time to }
{ validate the input. Pass the TEdit instance (Self) as }
{ the message lParam. }
if Refocusing = nil then
PostMessage(Handle, um_ValidateInput, 0, longint(Sender));
end;
procedure TForm5.EditEnter(Sender: TObject);
begin
if Refocusing = Sender then
Refocusing := nil;
end;
end.
{ *** END CODE FOR UNIT5.PAS *** }
.-.-.-.-.-.-.-. ^_^