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

Pomoc! Jako se nerviram! SOS!

[es] :: Access :: Pomoc! Jako se nerviram! SOS!

[ Pregleda: 2305 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

obradorriuss
Nikola Obradovic
CEO & Founder
NO SOLUTIONS
Novi Sad

Član broj: 30270
Poruke: 177
*.ptt.yu

ICQ: 329831125
Sajt: www.nosolutions.rs


Profil

icon Pomoc! Jako se nerviram! SOS!14.09.2004. u 10:34 - pre 238 meseci
Pozdrav, problem je sledeci:
Imam sve forme koje mi rade perfektno, medjutim imam jedan problem sa brisanjem zapisa. Kada startujem forme iz glavnog database prozora sve funkcionise kako treba ali posto imam kao uvodni ekran u kome mi se nalaze dugmici za sve izvestaje forme i kada iz tog uvodnog ekrana kliknem da otvorim neku formu on je otvori bez problema, ali kada kazem da obrise postojeci zapis on nece to da uradi. Znaci radi kada otvorim tu istu formu iz glavnog prozora baze podataka a nece da brise kada tu formu otvorim iz mog uvodnog ekrana. Da li neko zna u cemu je problem?
Code za brisanje mi ide na sledeci nacin, malo modifikovani wizzard:

Private Sub Command28_Click()
On Error GoTo Err_Command28_Click
If MsgBox("Da li zelite da obrisete ovaj zapis?", vbExclamation + vbYesNo, "UPOZORENJE!") = vbYes Then
DoCmd.DoMenuItem acFormBar, acEditMenu, 8, , acMenuVer70
DoCmd.DoMenuItem acFormBar, acEditMenu, 6, , acMenuVer70
DoCmd.RunMacro "Izbrisan"
Else
DoCmd.CancelEvent
End If
Me![Prezime].SetFocus
DoCmd.GoToRecord , , acLast
Exit_Command28_Click:
Exit Sub

Err_Command28_Click:
Resume Exit_Command28_Click

End Sub


(
 
Odgovor na temu

Zidar
Canada

Moderator
Član broj: 15387
Poruke: 3085
*.eqao.com



+79 Profil

icon Re: Pomoc! Jako se nerviram! SOS!14.09.2004. u 16:48 - pre 238 meseci
Za pocetak (i za uvek) zaboravi Acessove wizarde. Moras da naucis sam da kontrolise vazne stvari kao sto je brisanje. Znaci, napravi dugme za brisanje invisible za trenutak. Vrati na formu record selector i probaj brisanje na najprostiji nacin, a to je:
1) klikni na record selector bar
2) pritisni Delete taster

To probaj da uradis u dva slucaja, jednom kad direktno otvoris formu, drugi put kad formu otvoris sa uvodne forme. Ako oba rade, onda si siguran ad je brisanje moguce. Ako nece posle otvaranja sa uvodne forme, proveri kako otvaras tvoju formu sa uvodne. da nije kao read only? Proveri DoCmd iskaz.

Ako brisanje radi u oba slucaja, razdvoji kod za brisanje od koda za pomeranje na zeljeni rekord.
1) neka dugme odradi DOCmd.RunCommand accmdDeleteRecord (ili tako nenkako)
2) u forminom Delete eventu pitaj korisnika da potvrdi brisanje, pa ko to ne uradi, Cancel deletion:
Code:

Private Sub Form_Delete(Cancel As Integer)
'Ovo se izvrsi PRVO, bez obzira kako je brisanje inicirano
'Pitaj korisnika da potvrdi brisanje
    If MsgBox("Da li zelite da obrisete ovaj zapis?", _
            vbExclamation + vbYesNo, "UPOZORENJE!") <> vbYes Then
            Cancel = True 'brisanje se ponistava
    Else
        'ne radi nista, brisanje ide dalje
        'Normalno pojavila bi se poruka na Engleskom
        '"You are about to delete 1 record(1)....
        'Mozes tako da ostavis ili da kodom u BeforeDelConfirm
        'prevedes poruku na Srpski. U BeforeDelConfirm imas jos jednu
        'sansu da Cancel brisanje
    End If
End Sub

Private Sub Form_BeforeDelConfirm(Cancel As Integer, Response As Integer)
'Onda se izvrsi DRUGO
'Samo da sakrijemo poruku na Engleskom:
    Response = acDataErrContinue
End Sub

Private Sub Form_AfterDelConfirm(Status As Integer)
'Ovo se izvrsi TRECE (brisanje je vec obavljeno)
'Ovde se pomerimo na poslednji rekord
    DoCmd.GoToRecord , , acLast
End Sub

Kako ti se cini?
Evo ti kod za dugme napisan pomocu wizarda, pa malo modifikovan (zbacene ruzne inerazumljive komande DoMenuItem)
Code:

Private Sub cmdDelete_Click()
On Error GoTo Err_cmdDelete_Click


    DoCmd.RunCommand acCmdDeleteRecord
    
Exit_cmdDelete_Click:
    Exit Sub

Err_cmdDelete_Click:
    MsgBox Err.Description
    Resume Exit_cmdDelete_Click
    
End Sub


:-)
 
Odgovor na temu

obradorriuss
Nikola Obradovic
CEO & Founder
NO SOLUTIONS
Novi Sad

Član broj: 30270
Poruke: 177
*.ptt.yu

ICQ: 329831125
Sajt: www.nosolutions.rs


Profil

icon Re: Pomoc! Jako se nerviram! SOS!14.09.2004. u 19:01 - pre 238 meseci
Pa cini se OK! Ajd videcu nocas sve to lepo da isprobam pa ti javljam sta sam uradio. Hvala ti na pomoci i brzom odgovoru.
Pozdrav,
Nikola
 
Odgovor na temu

obradorriuss
Nikola Obradovic
CEO & Founder
NO SOLUTIONS
Novi Sad

Član broj: 30270
Poruke: 177
*.ptt.yu

ICQ: 329831125
Sajt: www.nosolutions.rs


Profil

icon Re: Pomoc! Jako se nerviram! SOS!14.09.2004. u 19:17 - pre 238 meseci
Zidar evo isprobao sam ovo sto si mi rekao i uspelo je. Medjutim posle zavrsenog brisanja nece da mi ode na zadnji record a ne znam zasto? Da nemas mozda neko objasnjenje za to?
Hvala u svakom slucaju!
Nikola
 
Odgovor na temu

Zidar
Canada

Moderator
Član broj: 15387
Poruke: 3085
*.eqao.com



+79 Profil

icon Re: Pomoc! Jako se nerviram! SOS!14.09.2004. u 19:48 - pre 238 meseci
Ne znam zasto nece na poslednji rekord. Ako si formu otvorio sa WhereCondition za zadati rekord, onda nema gde da ode. To mi jedino pada na pamet. Aktiviraj debugger i prati kako se izvrsava kod.

Ako ne stavis nista u AfterDelConfirm, posle brisanja izvrsava se OnCurrent event, znaci prirodno bi otisao na "sledeci" rekord, koji dodje odmah posle obrisanog (pod uslovom da ima gde da ode). Pazi kad brise poslednji rekord, gde ce da ode. Mislim da se sam vraca za jedan napred, proveri.

Uglavnom, nije mnogo uputno da se pozicioniras na neki specificni rekord posle brisanja. Najbolje je da to ostavis Access-u. Ili da imas specijalnu proceduru za brisanje, umesto da brises direktno sa forme. Zasto? Osim tvog dugmeta, postoji bar jos nekoliko nacina da se obrisu rekordi:
1) select, Edit, Delete Record iz menija
2) klik na Delete Record ikonu na tool baru
3) selektuj rekord i pritisni Del taster
4) pritisni Ctrl+Minus
na nesrecu, postoji jos brdo mocnih nacina da se selektuju svi ili mnogo rekorda:
1) Ctrl A = selektuje sve rekorde
2) Edit,Select All Records
3) Ctrl+SHIFT+razmaknica
A onda se primeni neki od navedenih nacina za brisanje. Ako samo tvoje dugme ima pitalicu za potvrdu brisanja, ode mast u propast.

Zato razmisli o resenju gde se sa forme ne moze obrisati NISTA. AKo hoce da brisu, neka postoji posebna forma (unbound), gde se ukuca PK za rekord koji se zeli obrisati, pa onda se to sa MsgBox potvrdi, i na kraju kroz programski kod, (recordsets, DAO ili ADO) se obrise rekord iz tabele. Tu se odrade i kaskadiranja - obrisu se child records i tako dalje. Moze da se i sacuvaju obrisani rekordi u nekoj tblHistory, za zlu ne trebalo. Na formi, Access dozvoljava previse stvari. U stvari, veci je problem ukinuti Accessove interaktivne mogucnosti nego napisati aplikaciju.

:-)
 
Odgovor na temu

[es] :: Access :: Pomoc! Jako se nerviram! SOS!

[ Pregleda: 2305 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

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