Conferințe vbstreets - vizualizați subiectul - datele în acces

1. Există un tabel cu obiecte imobile.
2. Obiectul este definit de ID-ul său ("Object ID")
3. Obiectele au o dată de încheiere ("Data de încheiere")
4. Utilizați interogarea pentru a selecta toate înregistrările unde data de încheiere este mai mică sau egală cu data curentă.






5. Mergeți la prima înregistrare
6. Dacă data de încheiere este mai mică sau egală cu 7 ("șapte"), scrieți "Object ID" al înregistrării curente din matrice.
7. Mergem la următoarea. înregistrare (ciclu până la .eof)

8. Emiteți un avertisment, spunând că "termenul limită pentru unele obiecte se apropie de sfârșit"
9. Deschideți formularul numai cu acele înregistrări unde "Object ID" = date din matrice.


Private Sub Form_Open (Anulare ca Integer)
Dim okdate, okdate2, msg, dt, df, d, m, y ca șir
Dim ssd ca dată
Dim ar As String ar trebui să fie, probabil
okdate = DateValue (Now ()) 'În interogare, două câmpuri sunt "Object ID" și "End Date", unde "End Date"

Cu CurrentDb.QueryDefs ("Data de încheiere")
.Parametrii ("N") = okdate
Cu .openrecordset
Dacă nu .EOF Atunci
.MoveFirst
face
dt = .File ("Data de încheiere")
d = Nz (stânga (dt, 2), ")" zi
m = Nz (Mid (dt, 4, 2), ")" lună
y = Nz (dreapta (dt, 4), ")) an (dreapta?)
ssd = d "" m "" y
df = DateDiff ("d", ssd, Now) "definită ca diferența dintre zilele dintre data curentă și data de încheiere

Dacă df <= "7" Then
ar = .Fields ("Object ID") "într-un fel trebuie să fie scris într-un matrice
.MoveNext
altfel
.MoveNext
Sfârșit Dacă






Buclă până la .EOF
Sfârșit Dacă
Sfârșit cu
Sfârșit cu

Dacă ar = Null Atunci `dacă matricea este goală
Exit Sub `ieșire
altfel
msg = MsgBox ("Există obiecte care expiră în curând!", vbYesNo + vbCritical, "Avertisment!")
Dacă msg = vbYes Apoi
DoCmd.OpenForm "Obiect". [Object ID] = ar `cu date" Object ID "din array (mai multe înregistrări)
altfel
Ieșire Sub
Sfârșit Dacă
Sfârșit Dacă
End Sub

Cele mai complexe cauze penale.

dar nu este mai simplu să scrieți un filtru după dată direct în șirul de filtre al formularului?

Ei bine, dacă procedura, atunci:

Cod: Selectați toate
Dim ar fi ca String
Dacă ar = "" Atunci
ar = "[Obiect ID] =" .Fields ("Object ID") "filtrul este format pentru o singură valoare de câmp
altfel
ar = ar "sau [Object ID] =" Se adaugă valori de valori ("Obiect ID"), dacă există
Sfârșit Dacă

DoCmd.OpenForm "Obiect". Ar

nu, nu merge așa.
trebuie să completați mai întâi matricea (ca, nu știu)
și apoi deschideți formularul nu cu OR, ci cu AND

În versiunea dvs., sunt posibile numai două opțiuni

sau cu ultima înregistrare va deschide formularul (așa cum este acum)
sau x. că se va dovedi)))
Există un ciclu, care este necesar.

ar = ar "sau [Object ID] =" Se adaugă valori de valori ("Obiect ID"), dacă există

Se mai adaugă o valoare, cum ar fi.

Cele mai complexe cauze penale.

Forlaw a scris: nu, nu merge așa.
trebuie să completați mai întâi matricea (ca, nu știu)
și apoi deschideți formularul nu cu OR, ci cu AND


Am adus, de asemenea, o bucată de cod în care se formează "matricea" ar. Un șir este locul unde valorile câmpului [Obiect ID] sunt listate prin Or. cu Și nimic nu va veni de la ea. nu pot fi opt în același timp cu cei cinci și nouă

[/ quote]
astfel încât va fi:
inserarea codului se face cu text simplu, deci nu pot urmări cu exactitate cuiburile
Cod: Selectați toate
Dacă df <= "7" Then
Dacă ar = "" Atunci
ar = "[Obiect ID] =" .Fields ("Object ID") "filtrul este format pentru o singură valoare de câmp
altfel
ar = ar "sau [Object ID] =" Se adaugă valori de valori ("Obiect ID"), dacă există
Sfârșit Dacă
.MoveNext
altfel
.MoveNext
Sfârșit Dacă

dar, în general, este mai bine să folosiți un filtru direct după dată, decât să păcăliți cu comparații







Articole similare

Trimiteți-le prietenilor: