Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Obavezna polja u Formama

[es] :: Access :: Obavezna polja u Formama

[ Pregleda: 2281 | Odgovora: 10 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Englishman
Vladimir Ognjenovic
Srbija

Član broj: 99083
Poruke: 14
*.dynamic.adsl.itsisp.net.



Profil

icon Obavezna polja u Formama08.01.2008. u 22:59 - pre 198 meseci
Kako da dam osobinu jednom polju u Formi da bude Required - Yes (da bude obavezan unos) a da to ne uradim u dizajnu tabele.
Naime, kako da nateram korisnika da mora u neko polje da unese neku vrednost.
Hvala unapred.
 
Odgovor na temu

Getsbi

Moderator
Član broj: 124608
Poruke: 2831



+45 Profil

icon Re: Obavezna polja u Formama09.01.2008. u 06:53 - pre 198 meseci
1. Popuni osobine Validation Rule i Validation Text
ili
2. Na događaj On Exit napiši kod sličan ovom
Code:

Private Sub Tvoje Polje_Exit(Cancel As Integer)
   If IsNull([TvojePolje]) Then
       MsgBox "Morate uneti vrednost", vbCritical, "Pažnja"
       Cancel = True
       Me![TvojePolje].SetFocus
       Exit Sub
   End If
End Sub

 
Odgovor na temu

Zidar
Canada

Moderator
Član broj: 15387
Poruke: 3085
*.100.46-69.q9.net.



+79 Profil

icon Re: Obavezna polja u Formama09.01.2008. u 15:19 - pre 198 meseci
Slobodno uradi Required=Yes u dizajnu tabele. To ne boli a stiti od gresaka u programiranju. Na primer, kod koji ti je predlozio Getsbi radi OK pod uslovom da uopste udjes u to plje. Ako na formi uneses podatke u samo neka polja, a preskocis ostala, kod na Polje_Exit nece se nikada startovati za polaj koja si preskocio.

Ako hoces da ti se ama bas sva polja provere, onda kod koji ti je Getsbi predlozio stavi u Form_BeforeUpdate event proceduru. Naravno da ti treba po jedna porvera za svako polje. Otprilike ovako:
Code:

Private Sub Tvoje Form_BeforeUpdate(Cancel As Integer)

'Provera Required polja:
   If IsNull([TvojePolje]) Then
       MsgBox "Morate uneti vrednost u TvojePolje", vbCritical, "Pažnja"
       Cancel = True
       Me![TvojePolje].SetFocus
       Exit Sub
   End If

   If IsNull([NekoDrugoPolje]) Then
       MsgBox "Morate uneti vrednost u NekoDrugoPolje", vbCritical, "Pažnja"
       Cancel = True
       Me![TvojePolje].SetFocus
       Exit Sub
   End If

   If IsNull([NekoTrecePolje]) Then
       MsgBox "Morate uneti vrednost u NekoTrecePolje", vbCritical, "Pažnja"
       Cancel = True
       Me![TvojePolje].SetFocus
       Exit Sub
   End If

End Sub


Formin BeforeUpdate aktivira se u sledecim slucajevima:
1. kad kliknes na Save dugme na formi
2. kad se pomeris sa rekorda na rekord, namerno ili slucajno
3. kad snimis rekord na bilo koji nacin
4. kad zatvoris formu, namerno ili slucajno

Dogadjaj OnExit za kontrolu aktivira se samo kada udjes u kontrolu pa izadjes.

Zato se kontrola valjanosti podatka vrsi na Form BeforeUpdate.
Na nivou kontrole, moze se koristiti beforeUpdate za kontrolu, pa i Exit, pa cak i LostFocus, ali se to radi samo kad od te kontrole zavisi nek adruga kontrola, sto opet nije mnogo preporucljivo (ali se desava
 
Odgovor na temu

nidisa

Član broj: 78939
Poruke: 88
161.51.11.*



Profil

icon Re: Obavezna polja u Formama10.01.2008. u 07:43 - pre 198 meseci
Ako smijem da dodam:

Da bi sprijecio korisnika da klikne na save dugme nakon sto je unio " " (razmak ili space) na "On Key Down" dodaj ovaj kod:

Select Case KeyCode
Case 32
If Len(Me.txtSearch.Text) < 1 Then
KeyCode = 0
end if
End Select

Na ovakav nacin ces sprijeciti korisnika da unese razmak na pocetku texta, ali ako je u pitanju dvije ili vise rijeci tu nece biti problema.

Razlog za ovo je taj sto razmak odnosno " " nije null. Ukoliko korisnik ukuca razmak, access to nece prepoznati kao gresku. U stvari to i nije greska ali u vecini slucajeva ti ne treba prazno polje nego neki drugi karakter (ili rijec, broj)
----There is no place like 127.0.0.1-----
 
Odgovor na temu

Zidar
Canada

Moderator
Član broj: 15387
Poruke: 3085
*.100.46-69.q9.net.



+79 Profil

icon Re: Obavezna polja u Formama10.01.2008. u 15:59 - pre 198 meseci
@nidisa Lepo zapazenje.

Medjutim, i to moze da se resi na nivou tabele. Ako ne sme da bude prazan space na pocetku podatka, niti niz razmaka, kao ' ', sve to moze da se stavi u Field Validation Rule, na dizajnu tabele. Na primer: Left(MojePolje,1) <> ' ' sprecava razmak na pocetku, Right(MojePolje,1) ne dozvoljava razmak na kraju podatka. ovo bi trebalo da uhvati i visestruke razmake. Nesto kao LEN(trim(MojePolje))=LEN(MojePolje) bi takodje odradilo posao. Trim funkcija skida sve razmake sa obe strane mislim, pa prema tome ako duzina trimovanog stringa nije ista duzini originalnog stringa, znaci imamo negde razmake i to validation rule nece dozvoliti.

Ako ne zellis da se unese prazan string, mozes da stavis Allow Zero length string = FALSE.

Setite se Zidareve teoreme: Best code is no code at all.

 
Odgovor na temu

nidisa

Član broj: 78939
Poruke: 88
161.51.11.*



Profil

icon Re: Obavezna polja u Formama11.01.2008. u 06:50 - pre 198 meseci
Slazem se sa postavkama na tabeli, medjutim samo sam htio da ostanem unutar zahtjeva problema koji je postavio Englishman:

Citat:
Kako da dam osobinu jednom polju u Formi da bude Required - Yes (da bude obavezan unos) a da to ne uradim u dizajnu tabele.


Po meni je nacin rjesavanja zadatog problema samo stvar "ukusa" programera.

:-)
----There is no place like 127.0.0.1-----
 
Odgovor na temu

Zidar
Canada

Moderator
Član broj: 15387
Poruke: 3085
*.100.46-69.q9.net.



+79 Profil

icon Re: Obavezna polja u Formama11.01.2008. u 15:01 - pre 198 meseci
Citat:
Po meni je nacin rjesavanja zadatog problema samo stvar "ukusa" programera.

Ni slucajno. Ovde je u pitanju integritet podataka. Zasto bi nesto bilo obavezno da se unese na formi, a da nije obavezno da postyoji u tabeli? Obezbedjivanje integriteta podataka na front endu a ne na back endu je veoma losa praksa. Po tome s prepoznaju profesionalci od amatera. To je kao projektovati most, a zanemariti temelje na kojima ce most da stoji. Stvar ukusa, zaista.

Mislim da ovaj 'ukus' dolazi kod programera usled neznanja ili lenjosti. Ne zna svako kako se obezbedjuje integritet na back endu. To nije malo znanje i ne stice se pokretanjem wizarda i postavljanjem pitanja na forumu u stilu 'ja sam absolutni pocetnik i hteo bih da napravim prostu aplikaciju za knjigovodstvo'. Ako se zna, a ne radi se tako, zato sto to uzima puno vremea (tacno, uzima puno vremena i zahteva paznju i koncentraciju), onda je to cista lenjost, ili jos gore, nizak nivo profesionalne etike.

U gradjevinarstvu, ako projektujes most, a zanemaris temelje, odes u zatvor i izgubis dozvolu za rad. nazalost, razvoj aplikacija nije gradjevinarstvo.

Usput, razvoj aplikacija je prevod engleske fraze 'application development'. Onaj ko radi application development zove se 'developer'. Kako bi se to prevelo na srpsk/hrvatski/bosanski/crnogorski? Kao 'razvijač' ili 'razvojnik'? Ako nekom razvijamo softver i uzimamo mu pare za to, ne moramo bas da budemo 'razvojnici'


 
Odgovor na temu

nidisa

Član broj: 78939
Poruke: 88
161.51.11.*



Profil

icon Re: Obavezna polja u Formama12.01.2008. u 14:00 - pre 198 meseci
Citat:
integriteta podataka na front endu a ne na back endu je veoma losa praksa.


Sa ovim se nikako ne mogu sloziti, bar kada je rijec o bazama podataka koje rade na mrezama koje koriste puno korisnika. Potrebno je smanjiti saobracaj u mrezi. Vaznost pravilnog podesenja back-enda je velika, slazem se, ali ipak nekada morate vise paznje dodijeliti front-endu.

Evo i primjer: trenutno radim bazu podataka za firmu koja ima svoje poslovnice u 3 susjedne drzave. Imaju svoju mrezu servera i uvezani su putem satelitskih antena, tj. satelitskog interneta (ovdje valja napomenuti da je smanjenje nepotrebnog network traffic-a izmedju drzavnih centara VEOMA vazno).
Zahtjev kompanije je da back-end bude jedinstven (samo na jednom mjestu) zbog osjetljivosti podataka. Korisnici baze koji se nalaze u fizickoj blizini servera sa back-end podatcima nece imati problema ako se integritet podataka postavi na nivou back-enda. Ali sta je sa korisnicima koji su udaljeni?
Ti su korisnici i onako "zakinuti" fizickom razdaljinom. Ako jos moraju svaki put cekati da podatci odu do servera i onda da dobiju nazad poruku kako se operacija ne moze izvrsiti jer uneseni podatci ne odgovaraju zahtjevu, onda imamo puno zalbi na nas dizajn.

Ali ako poruka o nekompletnosti podataka dolazi odmah nakon unosa, onda je to puno lakse za podnijeti. A samim tim se "ubrzao" citav proces, tj. korisnik ima utisak da je cijeli program puno brzi.


----There is no place like 127.0.0.1-----
 
Odgovor na temu

Getsbi

Moderator
Član broj: 124608
Poruke: 2831



+45 Profil

icon Re: Obavezna polja u Formama12.01.2008. u 15:28 - pre 198 meseci
@ nidisa
Primer koji si dao je iz domena internet mreža. I to je uredu. Ono čime se najveća većina ovde bavi (iako to nije nigde definisano) je intranet i lokalne mreže, a ponajčešće jednokorisničke aplikacije. Ne sporim da je možda nekad kao u tvom slučaju bolje odraditi sve provere na FE, pa tek onda uputiti zahtev serveru. Ovde se radilo o jednom principijelnom stavu da je mnogo bolje koristiti ono što je proizvođač RDBMS-a dao i za čega postoji verodostojna dokumentacija nego to isto praviti po sopstvenom nahođenju, iz čega zbog nedovoljnog poznavanja problematike može da se zapadne u poteškoće. Ne mali broj puta smo svi ovde bili svedoci ispravljanja aplikacija koje su mogle biti rešene kvalitetnije postavljanjem neke osobine na nivou tabele. I sam se često upecam i dajem kood koji može da bude izbegnut jednostavnijim rešenjem. Ponekad je to zbog neokačenog fajla, ponekad iz brzopletosti, a neretko i zbog neznanja. Ne koristim ni ja baš sve opcije koje su na raspolaganju. Cilj svih nas treba da bude da koristimo što više opšteg i već ugrađenog, a što manje specifičnog. Naravno da ni ovo nije neki isključivi recept već tendencija koju treba imati u vidu.
 
Odgovor na temu

nidisa

Član broj: 78939
Poruke: 88
161.51.11.*



Profil

icon Re: Obavezna polja u Formama13.01.2008. u 08:05 - pre 198 meseci
Mislim da smo malo skrenuli sa teme, ali diskusije ipak nikad dosta jer mozemo cuti razlicita misljenja i iskustva i to je jedna od stvari koje nam svima trebaju. Zato evo mog licnog iskustva (nadugo i nasiroko, nadam se da necete zamjeriti):

Provjera podataka na nivou BE je nesto sto bi se trebalo uraditi prilikom dizajna baze podataka jer se uvijek mora poceti upravo od tabela. Ovdje cu se sloziti sa misljenjem Zidara i Getsbija, mnogo je jednostavnije i brze raditi ovako u bazama koje su jednokorisnicke ili u bazama gdje su tabele linkovane u FE. Ako nema potrebe, nemoj ni komplikovati.

Medjutim, projekat koji sam radio prosle godine poceo sam sa linkovanim tabelama u FE. Provjera podataka je bila na nivou BE. Bilo je to nesto sto bi smo rekli klasika:multiuser okruzenje (oko 5 korisnika), BE na serveru, FE na racunarima, linkovane table na FE. Mrezno okruzenje je bilo jako dobro, upravo su zavrsili sa postavljanjem optickih kabala izmedju routera i switch-eva, a od switch-eva do racunara su vodili standardni CAT5 kablovi. Rekli bi smo: prava idila za bazu podataka. Ali nije sve radilo tako. Bilo je mnogo zalbi na sporost rada. Pretpostavljao sam da je problem u postavci administratora mreze, ali je isti tvrdio da je sve OK i da je "problem u dizajnu tvoje baze podataka, a ne moje mreze". Obzirom da je on bio IT za firmu, nisam imao nacina da tu bilo sta izmijenim.

Tada sam se odlucio na mijenjanje cijelog dizajna FE baze podataka i smanjenja koristenja BE koliko god je to moguce. Provjera podataka na nivou BE je ostalo u upotrebi za svaki slucaj, ali sam dodao i provjere na FE. Tabele vise ne linkujem nego pristupam podatcima samo onda kad je neophodno. Prilikom otvaranja forme, podatci se snime na privremene tabele u FE, a nakon obrade isti se tek onda snimaju u BE. Jos sam morao osigurati koristenje jednog sloga od strane samo jednog korisnika kako ne bi doslo do konflikta i "pucanja" BE baze.

Razumijem da je to dupli posao, mozda i nepotreban, ali od kako sam napravio ove izmjene zalbe na sporost i cekanje su prestale. Ponosam sam reci da taj program radi vec skoro 7 mjeseci i od tada slicnih problema nema. Naravno pojavile su se druge stvari koje sam morao prepravljati na zahtjev korisnika. Nema savrsenog programa, to znamo odavno ;-).

Upravo zbog toga sam odlucio istu stvar uraditi i sa ovim projektom, jer je jos zahtjevniji sto se tice udaljenosti i mreznog ogranicenja.

I ovdje ponoviti ono sto su rekli Getsbi i Zidar: provjera integriteta podataka na nivou tabele je neophodna za sve tabele u BE bazi podataka kako bi se osigurao integritet podataka.

Moj nacin rada, sa dodatnim provjerama u FE, je moj "stil" programiranja, nista vise.



----There is no place like 127.0.0.1-----
 
Odgovor na temu

Zidar
Canada

Moderator
Član broj: 15387
Poruke: 3085
*.100.46-69.q9.net.



+79 Profil

icon Re: Obavezna polja u Formama14.01.2008. u 15:05 - pre 197 meseci
@Nidsa
Sad znamo sta nismo znali ranije - situaciju na terenu.
U tvom slucaju, izabrao si verovatno najbolje moguce resenje. Nemam nista protiv provere na FE, ukoliko postoji solidno resen BE. U vecini slucajeva ljudi se oslone na FE a zanemare BE. Zato Zidar galami.

U tvojoj situaciji mnogi bi otisli na web soluciju. To je opet mnogo komplikovanije da se napravi i tek treba da dostigne 'user friendlines' nivo koji daju windows aplikacije. Naravno, nista ne tuce brzinu razvoja u Accessu, sa ili bez FE provere.

Hvala ti na strpljenju i razumevanju

 
Odgovor na temu

[es] :: Access :: Obavezna polja u Formama

[ Pregleda: 2281 | Odgovora: 10 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.