[ miso.miso @ 09.07.2008. 13:39 ] @
Pozdrav svima,
hocu malo da doradim bazu za fakturisanje i imam par pitanja:
1. Na Command Button snimam dokument(racun) postavio sam u OnClick kod

...
If IsNull(Me.datum) Or IsNull(Me.DPD) Or IsNull(Me.Kupac) Or IsNull(Me.Placanje) Or IsNull(Me.IF_VRSTA) Then
MsgBox "Niste popunili sva polja u zaglavlju!", vbInformation, "Obavestenje"
Cancel = True
Else .....

da li je ovo uredu ili neko zna bolje resenje.(hteo sam da mi u obavestenju javi koje polje nije popunjeno, ali mi deluje komplikovano )



2. Kada napustam formu hocu da mi izbrise sve zapise koji nisu prihvaceni odnosno gde je status razlicit od '1'
[ Miro35 @ 09.07.2008. 13:48 ] @
Brobaj za svako polje da napraviš ovako:

If IsNull(Me.Datum) Then
MsgBox "Unesite datum!", vbExclamation, "Obavijest"
DoCmd.GoToControl "Datum"
Exit Sub
End If
[ domaci_a_nas @ 09.07.2008. 15:29 ] @
Opet Trle naširoko Možda da za obavezne kontrole postaviš Tag "O" (Obavezno)

I onda recimo:
Code:
Public Function DozvoliSnimanje(KojaForma As Form) As Boolean
Dim Ctl As Control
DozvoliSnimanje = False
For Each Ctl In KojaForma.Controls
If Ctl.Tag = "O" And Len(Nz(Ctl,"")) = 0 Then 
Ctl.SetFocus
MsgBox "Polje " & Ctl.Name & " ne sme biti prazno"
Exit Function
End If
Next Ctl
DozvoliSnimanje = True
End Function
Ovo možeš da ubaciš u modul, da ne bi pisao u svakoj formi, a u samoj formi ubaci u red u kome treba da snimaš podatak :
Code:
Private Sub Command1_Click
If DozvoliSnimanje(Me) = False Then Exit Sub
Me.Dirty = False
End Sub


Kod je iz glave, ali trebalo bi da radi, a za drugi deo pitanja, možda bi Me.Undo vršio posao
[ Trtko @ 09.07.2008. 22:34 ] @
E nikola , vidim da si danas pogledao duboko u bocu
pa koji Trle, pa nisam ništ komentirao

Al kontrole su itekako potrebne, pa makar ih napisao i 100
program nesmije pasti niti iz bilo kojeg razloga.

Ja ne držim toliko do ljepote koda ko domaci_as ( u prijevodu Nikola, ali se učim i od njega )
itekako provjeravam svaki input ..... unos


dakako da je u redu što si napisao da se sva polja moraju popuniti
ali

gdje ti je provjera za duljinu unosa
što ako ti unese za kupca neki naziv ili šifru dužu od definirane dužine u tabeli
pada program ,

od sutra prelazim na bezalkoholno pivo

časna mi pionirska

pozdrav ekipi

[ domaci_a_nas @ 10.07.2008. 00:30 ] @
Nemoj Trle zaboga na bezalkoholno, meni je ovo od trave Potpuno sam zabezeknut svojim previdom... Nadam se da nisam pravio baš tolike propuste kad sam programirao danas, doduše, javiće mi klijenti ako jesam
[ miso.miso @ 10.07.2008. 07:55 ] @
Probao sam varijantu od domaci_a_nas deluje mi ok. resenje ali mi ne radi,
prvo ne razumem sta znaci u kodu 'KojaForma'


Evo greske koju mi javlja.

Compile error: Expected variable or procedure, not module

Ja se izvinjavam ako pitam gluposti, imam muke sa codovima tek sad ucim.
[ domaci_a_nas @ 10.07.2008. 08:38 ] @
Evo nov, prepravljen i testiran kod koji mora da ti radi.
Code:
Public Function AllowSave(WhForm As Form) As Boolean
Dim Ctl As Control
AllowSave = False
For Each Ctl In WhForm.Controls
If Left(Ctl.Tag, 3) <> "Req" Then GoTo NextCtl
If Len(Nz(Ctl, "")) = 0 Then
Ctl.SetFocus
MsgBox Mid(Ctl.Tag, 4) & " is required !", vbOKOnly, "Notice"
Exit Function
End If
NextCtl: Next Ctl
AllowSave = True
End Function
Ovo ubacujes u MODUL, znači ideš u object navigator, tamo gde su tables, forms, queries, reports, modules i napraviš nov modul. Ovo sigurno znaš, al' kad neko kaže da nešto ne radi ja se maximalno osiguram da ima najpreciznije i najopširnije uputstvo pa često i preteram iz dobre namere

Ovaj kod se razlikuje od prošlog jer nemaju sve kontrole u formi svojstvo Value, kao što su command button, imagebox i to je pravilo grešku. Sad se to ne ispituje u istom redu kao svojstvo TAG. Još jedna izmena je ta što sad u svojstvo tag ne upisuješ O, nego nešto tipa ReqNaziv Kupca. Ovo sam uveo jer su meni nazivi polja i kontrola skraćenice, kako bih pisao što kraći kod, a pošto će korisnik videti msgbox valjalo bi da vidi pun naziv polja.

KojaForma (sada WhForm) predstavlja argument funkcije, odnosno formu koju treba ispitati. Da ne bi u kodu za svaku formu dodavao ovaj istovetni kod, ti sa forme samo pozivaš funkciju na sledeći način :
Code:
Private Sub Command1_Click()
If AllowSave(Me) = False Then Exit Sub
Me.Dirty = False
End Sub
Pošto imaš problema sa codom, možeš dodati na formu dugme nazvano Command1 i samo u formi prekopiraš ovaj Command1_Click() i rešio si sve probleme
[ miso.miso @ 10.07.2008. 13:28 ] @
Care opete ista greska
sve sam odradio kako si rekao ali u codu u OnClick selectuje 'AllowSave' i prijavi gresku

Compile error: Expected variable or procedure, not module

poceo sam da jedem sam sebe, jos me je malo ostalo.

[ Getsbi @ 10.07.2008. 14:57 ] @
Savet: U VBA kodu ispod reda Option Compare Database napiši: Option Explicit. Nakon svake izmene koda obavezno uradi File, Save, a potom iskompajliraj kod sa Debug, Compile. Tako ćeš biti siguran gde je greška.

Ovo oko AllowSave, govori da ne može da nađe očekivanu varijablu ili proceduru.
[ domaci_a_nas @ 10.07.2008. 20:57 ] @
Care, ako si snimio modul koji si napravio pod imenom AllowSave, nije ni čudo što neće da radi. Ako koza laže rog ne laže, pa ti šaljem primer sa doslovce istim kodom kao što je u prethodnom postu i koji radi. Ako kažem da je testirano i da radi, znači radi, nema zbora.

Pozz
[ miso.miso @ 11.07.2008. 07:41 ] @
Care, ako kazes da radi onda radi,
dao sam naziv modula 'AllowSave' nisam znao da ne moze.

Hvala puno.
Pozdrav
[ Scelle @ 11.07.2008. 10:14 ] @
Cudi me da seki ljudi nisu pobunili zbog ovakvog nacina razmisljanja. Mozda im je dosadilo da ponavljaju iste stvari u nedogled? Salim se, ali moram da iznesem svoje misljenje:

naime, ja mislim da je najbolje (ili da kazem, obavezno) ogranicenja postavljati direktno na tabelama. Sve sto se moze uraditi na tom, osnovnom nivou treba uraditi. Od Caption, preko Input Mask, Format .... Default value, do REQUIRED. To je jedno od osnovnih pravila dobrog projektovanja, koje sam ja vec naucio, iako jos uvijek studiram.

E, ako oces sminku kasnije, mozes u ErrorHandler da postavis prikazivanje dijaloga, na foru:

Code:

If Err.Code==NekiKod Then  'Ovdje ide kod greske praznih zahtevanih polja, ne znam sad koji je
MessageBox "Niste popunili sva polja......." blablabla
End If


Svakako ne preporucujem da provjeravas za svako polje posebno. Da li bi ti volio da ti iskacu upozorenja svaki cas i zveče onim groznim zvukom?