[ Fanta @ 23.01.2007. 11:47 ] @
| Evo jednog problemčića!
Mada postoji takva mogučnost u accessu, ja želim napraviti vlastiti događaj.
Problem je u tome što pokušavam da obrišem redove u jednoj subformi(zelim da napravim događaj na dugme), redovi mogu biti odabrani po redu(najčešći slučaj, ali i nasumice). Subforma je datasheet, a redovi se odabiru klikom na njih.Našao sam kod na ovom forumu, ali problem mi je u tome što mi obriše samo jedan red od svih onih koje odaberem i to samo prvi, a ostale ne.
Kod glasi ovako:
Dim strSQL As String
Dim xmojID As Variant
xmojID = Me.subforma.Form!RedniBroj
strSQL = "DELETE * FROM T_tvrtke_proizvodi WHERE ((RedniBroj)=" & xmojID & ");"
CurrentDb.Execute strSQL, dbFailOnError
Me.subforma.Form.Requery
|
[ Getsbi @ 23.01.2007. 13:26 ] @
Ne vidim nikakvu grešku u kodu osim što bi možda trebalo osvežiti tabelu sa "T_tvrtke_proizvodi.Requery". Moja iskustva sa CurrentDb.Execute su da mora da se izvrši pre referenciranja na Recordset po toj tabeli odnosno odmah iza deklarisanja u proceduri, što ovde kako vidim i jeste slučaj. Pozicija kursora u tabeli ne mora da odgovara poziciji kursora u datasheet subforme. Probaj da koristiš "pozicija = T_tvrtke_proizvodi.BookMark" da bi odredio na kom se slogu nalaziš.
[ Fanta @ 23.01.2007. 19:59 ] @
Nažalost tek učim o recodsetima, iskreno dosad se nisam baš njima morao služiti jer je moje učenje uz zadnjih godinu dana bilo više vezano uz PHP i MySQL. Iako su nas na faksu učili baze i uz njih access, tip nam nikad nije objašnjavo ono nabitnije kao što je naprimjer programiranje u VBA ili ADO, on se je služio i pokazivao sve uz pomoć Access wizarda, buttone i događaje.
Više sam stari naučio na ovom forumu odkada sam njegov član vezano uz baze nego na faksu, pogotovo o Accessu u kojemu moram raditi posljednjih deset dana.
@Getsbi stoga bih te zamolio pomoć ako može do kraja, pokušao sam, ali i dalje mi baš ne radi. Kao što rekoh on mi obriše prvi red u subformi od svih koje odaberem, ali ostale ne
Frend mi je sugerirao da koristim možda array, tj. da xmojID pretvorim u to, pa da možda pamti svaki red u subformi kao jedno polje, ali nigdje no mogu, pa ni u ove 2 knjige koje imam o accessu pronaći upustvo kako se koristi.
[ Getsbi @ 23.01.2007. 20:19 ] @
Ajde zakači problem pa da pokušam da nađem rešenje.
[ BiloKoje @ 24.01.2007. 07:47 ] @
Sumnjam da možeš to da uradiš na elegantan način. Na formi nema načina za višestruko selektovanje zapisa ako nisu uzastopni. Čak i kad na formi selektuješ više zapisa VBA kodu se prosleđuje samo onaj u kojem se nalazi kursor.
Za brisanje iz koda više zapisa mora da postoji neki drugi uslov, recimo da postoji ček boks na formi pa da se brišu svi čekirani zapisi.
[ Fanta @ 30.01.2007. 14:59 ] @
@BiloKoje u potpunosti si u pravu, tražio sam svuda i svugdje, cak sam i nasao primjer gdje objašnjavaju da je takvo što nemoguće budući da čim se klikne na button svi odabrani redovi u datasheet-u gube sva odabrana svojstva, moguće ih je samo koristi uz pomoć funkcije OnTimer, pa sam na kraju odustao od tog načina i pokušao sam sa tvojim savjetom.
Međutim sada imam malo drugačiji problem, kad checkiram odabrane redove, npr. njih 6, zadnji checkbox mi uopće ne uzme u obzir i obriše mi samo njih pet. Čak sam pokušao i sa msgBox-om da vidim u čemu je greška i on mi isto kaže da sam odabrao samo 5 redova. Kod za brisanje mi glasi ovako:
DELETE T_tvrtke_proizvodi.RedniBroj, T_tvrtke_proizvodi.Idtvrtka, T_tvrtke_proizvodi.idproizvoda, T_tvrtke_proizvodi.imeproizvoda, T_tvrtke_proizvodi.proizvodac, T_tvrtke_proizvodi.cijena, T_tvrtke_proizvodi.Brisati
FROM T_tvrtke_proizvodi
WHERE (((T_tvrtke_proizvodi.Brisati)=True));
Može li mi tko reči u čemu je problem???
[ BiloKoje @ 31.01.2007. 05:44 ] @
Jedino što mi pada na pamet je da kad čekiraš zadnji zapis ne pređeš u sledeći već izvršavaš upit tako da zadnja promena nije upamćena. Pokušaj da pre izvršenja upita pređeš u prazan red ili na početku goda staviš Refresh.
[ Fanta @ 31.01.2007. 08:20 ] @
Problem riješen, samo sam stavio na OnClick Mr.Requary
Hvala BiloKoje
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.