[ smal @ 15.11.2010. 22:17 ] @
Pravim neku aplikaciju za lažne fakture E sad, pri unosu stavki u subformu, na Before Update event šifre artikla sam upotrebio sledeći kod, koji služi da obavesti korisnika da pokušava da unese više puta da isti artikl:
Code:
Dim SID As String
Dim SIV As String
Dim LResponse As Integer
Dim stLinkCriteria As String
Dim rsc As DAO.Recordset

Set rsc = Me.RecordsetClone
SID = Me.SifraArt.Value
stLinkCriteria = "[SifraArt]=" & "'" & SID & "'"
        
        If DCount("SifraArt", "qryPresif", stLinkCriteria) > 0 Then
        Me.Undo
        MsgBox " Artikl " & SID & " je već izabran!", vbInformation, "Obaveštenje"
        DoCmd.CancelEvent

    End If
Set rsc = Nothing

To mi se sviđa, jer se poruka o grešci javlja odmah nakon izbora šifre, bez obaveze da se popuni ceo Record (šifra, količina, cena), e da bi Access tek onda prijavio grešku.

Ali, imam još i modal formicu (listbox) za pretraživanje šifarnika, a kad sa nje preuzmem šifru artikla u subformu Stavke, onda gore navedeni kod ne funkcioniše, već moram da hvatam DataErr 3022...

Dakle, pitanje glasi - kako da mi se gornja poruka odmah javlja i kad šifru prenesem iz eksterne forme?

Uz poruku je celo programče, pa ako može neko da pogleda, biće valjda jasnije nego kad ovako objašnjavam.
[ banem @ 15.11.2010. 22:51 ] @
Napravi od tog programa funkciju, pa je pozivaj po potrebi - i po ručnom unosu i po odabiru artikla. Neka funkcija vraća True/False, tako ćeš znati da li je artikal već odabran.
[ izonic @ 15.11.2010. 22:53 ] @
Code:
Private Sub cmdPreuzmi_Click()
Dim Rs As Recordset

Set Rs = Forms![frmRacuniZaglavlje]![RacuniStavkeSubform].Form.RecordsetClone
Rs.MoveFirst
Do While Not Rs.EOF
If Rs.Fields(2) = Me.List30 Then
MsgBox "Vec postoji"
GoTo Kraj
End If
Rs.MoveNext
Loop
'Screen.MousePointer = False
If Me.List30 <> "" Then
Forms!frmRacuniZaglavlje.Form!RacuniStavkeSubform!SifraArt = Me.List30.Value
DoCmd.Close
SendKeys Chr(vbKeyReturn)
End If
Kraj:
End Sub
[ smal @ 15.11.2010. 23:17 ] @
Hvala izonic! Radi savršeno!
[ smal @ 17.11.2010. 10:21 ] @
Heh, ipak nije baš skroz savršeno

Ako se upis prvog recorda u subformi vrši preko forme za pretragu, onda program blokira, zbog Rs.MoveFirst, pošto je u tom slučaju Recordset prazan.
Rešio sam problemčić postavljanjem još jednog uslova:

Code:
If DCount("SifraArt", "qryPresif", "[SifraArt] = '" & Me.List30.Value & "'") = 0 Then ...

ali me interesuje kako se to inače rešava samo tehnikom programiranja recorsetova, ako je neko raspoložen da objasni.
[ izonic @ 17.11.2010. 12:39 ] @
Hehe nije dobro bas reci savreseno, uvijek nesto ispadne da nije dobro.
Htio sam napomenuti jedno drugo.
Koliko se sada sjecam tebi u prvom redu i netreba taj kod jer nemas niti jednog artikla pa bi mozda bolje bilo da se preskoci kod pod uslovo ako je rs=0.
[ smal @ 17.11.2010. 15:09 ] @
Aha, ukapirao sam (najzad ). Stavio sam uslov:
Code:
If Rs.RecordCount > 0 Then...

i sad šljaka. Hvala još jednom!