|
[ Beky86 @ 24.06.2008. 22:21 ] @
| Pozdrav !
Radi se o formi koja prikazuje sve unesene članove jedne organizacije, nije bitno . . . U toj formi samo pregledavam unešene članove, a koristim drugu formu za unos tih članova.
Nazovimo ih: "frm_clanovi" i "frm_noviClan" !
Kod forme "frm_clanovi" je izgašeno dodavanje novih članova ("allow additions") . . .
Kada dodajem članove (u formi "frm_noviClan"), imam polje status kod kojeg mi je dropdown menu, te mi izlista status: student, srednjoškolac, osnovnoškolac, drugo.
Dole imam polja: Fakultet i godina, Škola i razred i zanimanje !
* Kada unesem status: student --> 'disable' polje škola, razred i zanimanje, a 'enable' samo fakultet i godina.
* Kada unesem status: srednjoškolac ili osnovnoškolac --> 'disable' polja fakultet, godina i zanimanje, a 'enable' škola i razred.
* A, kada unesem status: drugo --> 'disable' sva ova gore polja osim zanimanja.
E, sad, u drugoj formi "frm_clanovi" ja pregledavam unešene članove.
Napravim event 'onLoad' forme da mi provjeri status člana i isto kao gore ako je student da 'enable' samo fakultet i godinu, i tako dalje...
--------------------
Šta se događa?!
Kada izbrišem posljednjeg člana u bazi, izbaci mi error:
###
"Runtime error '2427':
You entered an expression that has no value
###
Moj code izgleda ovako:
=============================
Private Sub Form_Load()
If (Me.status.Value = "Student") Then
Me.skola_faks.Enabled = True
Me.razred_godina.Enabled = True
Me.zanimanje.Value = "Null"
Me.zanimanje.Enabled = False
End If
If (Me.status.Value = "Srednjoškolac") Then
Me.skola_faks.Enabled = True
Me.razred_godina.Enabled = True
Me.zanimanje.Value = "Null"
Me.zanimanje.Enabled = False
End If
If (Me.status.Value = "Osnovnoškolac") Then
Me.skola_faks.Enabled = True
Me.razred_godina.Enabled = True
Me.zanimanje.Value = "Null"
Me.zanimanje.Enabled = False
End If
If (Me.status.Value = "Drugo") Then
Me.skola_faks.Value = "Null"
Me.razred_godina.Value = "Null"
Me.skola_faks.Enabled = False
Me.razred_godina.Enabled = False
Me.zanimanje.Enabled = True
End If
End Sub
=============================
I pošto sam izbrisao sve članove, nema rekorda na formi i baza ne vidi polje "status"?!?!?
Šta mogu da uradim kako mi se ovo ne bi dešavalo. Mislio sam da mi prilikom eventa 'onLoad' najprije provjerava je li postoji ijedan rekord u bazi, pa ako postoji da izvršava ovaj moj code, a ako ne da možda zatvori formu "frm_clanovi" i otvori formu "frm_noviClan" kako bi se odmah ponudilo unošenje novog člana.
No ne znam kako provjeriti je li postoji rekord i kako napraviti ovaj uslov !?!? |
[ domaci_a_nas @ 25.06.2008. 00:23 ] @
Hm, zašto je problem da postaviš default vrednost za polje status, ili umesto Status.Value koristiš Nz(Status,"") = "Student".
Kad smo već kod toga, zašto ne bi koristio combo box sa row source : 1;Osnovna Škola;2;Srednja Škola;3;Fakultet / Visoka Škola gde bi row source type bio Value List i Column Count = 2 i skrivenom prvom kolonom.
Mislim da će ti biti lakše u radu a i tabela će zauzimati manje prostora na disku. Sem toga, lakše je u kodu kucati Status = 1 nego Status = Osnovna škola.
[ Beky86 @ 25.06.2008. 01:33 ] @
Hvala na savjetima!
Ja sam u biti tek "početnik", nemam puno iskustva s bazama ni s VBA. Da poznajem bolje VBA, palo bi mi na pamet više načina za implementaciju svega ovoga . . .
Meni ne treba default vrijednost za polje status.
Ja u biti želim da prilikom loada forme "frm_clanovi", da se odmah zaključaju polja koja nemaju veze sa unesenim članom i stavi im se vrijednost 'Null', tj. ako je osoba student, zaključaj polja škola i razred, te zanimanje . . .
A imam ja i event 'afterUpdate' status polja --> ako je npr. član prešao iz srednje škole na fakultet, ja mu samo promijenim "status" u 'student' i dole se ključaju polja: škola, razred i zanimanje, te im se vrijednost postavlja na 'Null', a polje fakultet i godina se otključavaju.
Znači onaj moj code se pokreće prilikom loada forme. On provjerava automatski status.value, a kada nema rekorda u tabeli, odnosno na formi, izbaci onu grešku !!
E, da ja ne bi mijenjao sada kompletan dizajn baze, treba mi code da postavim uslov kada se pali forma --> da provjeri prvo je li ima rekorda, ako ima da radi onaj moj code, a ako nema da preskoči, ili čak da pokrene formu za unos članova.
[ Getsbi @ 25.06.2008. 06:17 ] @
Citat: Beky86: ......E, da ja ne bi mijenjao sada kompletan dizajn baze, treba mi code da postavim uslov kada se pali forma --> da provjeri prvo je li ima rekorda, ako ima da radi onaj moj code, a ako nema da preskoči, ili čak da pokrene formu za unos članova.
Pošto nemam primer, ne mogu da tvrdim ali probaj ovako.
Ovaj tvoj kod koji si napisao u prvom postu treba da postavš na događaj On Curent (kada pređeš na drugi zapis i on postane tekući zapis) forme "frm_clanovi"
Pri učitavanju forme "frm_clanovi", na događaj On Load, trebalo bi da proveriš broj rekorda u tabeli. Recimo ovako, pod uslovom da je DAO 3.6 metodologija uključena u VBA editor, Tools, References.
Code:
Dim Baza As Database ' dmenzionisanje baze
Dim rs As Recordset ' dimenzionisanje reordseta
Set Baza = CurrentDb() ' setovanje baze
Set rs = Baza.OpenRecordset("NAZIV_TVOJE_TABELE", dbOpenDynaset) ' setovanje recordeseta
If rs.RecordCount > 0 Then ' ako je broj recorda veći od nule
rs.MoveFirst 'otidi na prvi zapis
Else
MsgBox "Nema podataka u tabeli", vbCritical, "Paznja"
DoCmd.OpenForm "frm_noviClan" ' otvara novu formu
End If
rs.Close ' zatvara recordset
Set baza = Nothing 'skida referencu sa baze
[ Beky86 @ 25.06.2008. 12:00 ] @
Kolega 'Getsbi' hvala !
Problem sam riješio jednostavno što sam umjesto 'onLoad' event-a stavio 'onCurrent' i nakon što pobrišem zadnji rekord baza to shvati i ne puca onaj moj code :)
Golemo !!!
Hvala svima, pozdrav !!!
[ Zidar @ 25.06.2008. 13:36 ] @
Citat: E, da ja ne bi mijenjao sada kompletan dizajn baze, treba mi code da postavim uslov kada se pali forma --> da provjeri prvo je li ima rekorda, ako ima da radi onaj moj code, a ako nema da preskoči, ili čak da pokrene formu za unos članova.
A da ipak razmislis o promeni dizjna baze? Ako nije dobar, nije dobar i nikakav kod ga ence uciniti boljim. A bice potrebno sve vise i vise koda da potignes ono sto bi samo od sebe bilo tu da je baza dizajnirana kako treba.
Ako je ovo primer za vezbu, bar si naucio cemu sluzi OnCurrent a cemu OnLoad. Nije dobro da od pocetka pravis los dizajn baza i nadas se da ces kasnije programiranjem ispraviti greske dizajna.

[ Beky86 @ 25.06.2008. 15:03 ] @
U pravu si ti.
Međutim, evo, greška je ispravljena, a ja sam zadovoljan, postigao sam što sam naumio, baza je gotova i posao završen !!
Svakako za buduće poteze namjeravam sagledati sve svoje pogreške i krenuti boljom strategijom i nadam se sa više znanja !!
Hvala na savjetima, ovo sam usput radio, nemam vremena ispiti sada :)
Pozz svima !
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|