Šta je novo?

Access: Query form i subform

bobby63

Čuven
Učlanjen(a)
20.07.2002
Poruke
636
Poena
620
Pozdrav svima
Da bih filtrirao ulaz podataka, za unos koristim FORMU koja se bazira na QUERY-ju, u toj FORMI se takodje nalazi i SUBFORMA.
Ako korisnik popunjava po redu: prvo popuni podatke u FORMI pa onda predje na popunjavanje SUBFORME sve je u redu ali...
Ako prvo popuni SUBFORMU pa predje na popunjavanje FORME Access prvo upise SUBFORM koji vise ne zadovoljava uslove QUERY-ja i postaje nevidljiv za tu formu ali ostaje upisan u tabelu sto kvari sve ostale kalkulacije.

Kako da zabranim upis u SUBFORMU dok se barem neki podatak ne unese u FORMU?
Nadam se da sam dovoljno jasno izlozio problem.

Unapred hvala

PS
Privremeno sam zakrpio problem sa

Private Sub Form_Current()
DoCmd.GoToControl "PurchaseOrderNumber"
End Sub
' Koji pri svakoj promeni sloga prebacuje fokus na prvo polje u formi i

Private Sub PurchaseOrderNumber_LostFocus()
PurchaseOrderNumber = Me![PurchaseOrderNumber]
End Sub
' Koji na silu upisuje default ili postojecu vrednost kada prvo polje izgubi fokus

Ali ovo resenje je lose jer se svaki novi slog upisuje sa default vrenostima bez obzira da li ga neko popunjava ili ne, pa se povecava broj praznih slogova
 
Poslednja izmena:
Pretpostavljam da si napravio relaciju izmedju tabela koje ulaze u taj query. To bi moralo da radi. Ako ne, moras da imas neki ID na glavnoj formi, pa ga nasilno unesi pri promeni podataka u subformi. To ce ocuvati integritet, mada je jako dirty resenje. Resi problem uz pomoc relacija.
 
Da relacije su postavljene i to je OK. ID se nalazi u glavnoj formi i to je problem jer kada se SUBFORM upise pre FORM onda ID fali i slog postaje nevidljiv za QUERY.
Pokusavao sam vec da iz SUBFORM-e na silu upisem ID ali Access ne moze da ga nadje jer taj slog u tom trenutku ne postoji (sto i jeste glavni problem), to jest postaje vidljiv za Access samo ako je nesto vec unoseno u FORM-u.
Problem je sto sam ovakvo ponasanje kasno primetio pa je sada previse posla da menjam osnovne tabele.
 
malo sam zardjao sa Access-om, ali znam da sam jednom imao slican problem!!
Ja to uglavnom resavam sa enable\disable property-jem za odredjeno polje! U ovom slucaju ja bi stavio disable na celu subformu, sve dok se ne popuni bilo koje polje u main formi, nakon cega se enable-uje i cela subforma 🙂
ako sam te dobro razumeo 🙂
 
Kopajuci malo po internetu nasao sam da je ovo problem do Acces-a 2002, koji koristim pa sam updateovao na 2003.
Sada ako prvo unesem podatke u subform pa predjem na form dobijam prozor sa porukom.

"The record has been changed by another user since you started editing it. If you save record, you will overwrite the changes the other user made..."

i nudi mi "Save changes", "Copy to clipboard" i "Drop Changes" sto je vec malo bolje.

Ali u 2003 se javlja drugi problem u toj istoj SUBFORM-i, naime, kada dodajem novi podatak moram dva puta da selektujem Combo Box-u jer nakon prve selekcije ostaje prazan a kod promene vec postojeceg radi normalno. U ostalim formama (nebaziranim na Query-ju) Combo Box radi normalno.

@ToxiC probacu prvo da vidim da li mogu da promenim poruku koju izbacuje Access pa ako to ne ide onda cu pokusati sa disable-ovanjem (cudan ovaj nas jezik)
 
Evo ti SIGURNOG rešenja (malo modifikovano, ali generalno to što je rekao Toxic):

1. postavi subform na disabled, jedino tako možeš da onemogućiš unos podataka
2. na BeforeInsert property glavne forme postavi VBA kod koji enable-uje subformu
3. Ukucavaj normalno podatke (bilo gde).


Objašnjenje: ovakav pristup omogućava da ćeš uvek imati konzistentne podatke, jer se generiše ID za glavnu formu, i onda subforma može da prihvata taj ID i da ga upisuje u svoje podatke. Kontaš? Malo sam konfuzan, jasnije će ti biti kad pogledaš primer koji sam okačio. Javi ako ti je nejasno.
 

Prilozi

I da dodam, ovo što je tebi problem NIKAKO nije problem do Accessa, jer to Access radi savršeno još od verzije 2.0, već je skoro sigurno problem u pogrešno postavljenoj bazi.

Možeš ovde da postuješ izgled tabela sa test podacima pa da ti damo neki savet.
 
Poslednja izmena:
U medjuvremenu sam napravio slicno resenje, takodje se bazira na disable-ovanju subforme mada sam koristio druge event-e ("On current" i "after Insert"). Ovako to izgleda u mom slucaju:

Private Sub Form_Current()
'DoCmd.GoToControl "PurchaseOrderNumber"
If Me!PurchaseOrderID.Value > 0 Then
Form!Porudzbenica.Locked = False
Else
MsgBox ("Dosli ste do PRAZNOG sloga. Prvo se popuni gornji obrazac ili se potvrdi barem jedna od ponudjenih vrednosti, na primer DOBAVLJAC, i tek onda postaje moguce unositi podatke u donji obrazac")
Form!Porudzbenica.Locked = True
End If
End Sub

Private Sub Form_AfterInsert()
If Me!PurchaseOrderID.Value > 0 Then
Beep
Form!Porudzbenica.Locked = False
Else
Form!Porudzbenica.Locked = True
End If
End Sub

Sada Access dozvoljava upis i editovanje postojecih rekorda a kada naidje na praznu formu zakljucava subform dok se u formi nesto ne upise, ovo je zgodno i da se editovanje postojecih recorda zastiti sifrom sto trazi narucilac posla.

Pozdrav svima i Puno hvala

PS
Greska jeste do Accessa i opisana je i u helpu pod "When can I update data from a query? (MDB)". Solution koji nudi i koji je primenjiv u mom slucaju je da korisnik prvo nesto upise u formi pa tek onda u subformi, sto je neprihvatljivo jer zahteva obucenog i disciplinovanog korisnika a dozvoljava gresku.
 
E da, ostao mi je problem (samo u Accessu 2003) da u KomboBox-u vrenost mora da se bira dva puta, ima li neko neku ideju?
 
Kako to misliš da mora vrednost da se bira dva puta?
 
Verovatno je mislio kada klikne jednom da se nista ne dogodi, pa kada klikne ponovo, otvori se meni. I meni se to cini mi se dogadjalo nekad...ne mogu da se setim kako sam resio
 
Kada kliknem jednom otvori se meni ali posle izbora ostaje prazan dok se ne selektuje opet, ako se pre toga popuni neka vrednost u tom slogu radi normalno ali je taj ComboBox prvi na redu. Kod editovanja vec postojecih radi normalno, zeza samo kod prvog ubacivanja dok jos uvek ne postoji taj slog.
 
Nazad
Vrh Dno