[ slavko13 @ 11.03.2005. 18:32 ] @
| Imam formu preko koje unosim kupljenu robu u tabelu "OrdersDetails".Imam jedan proizvod uz koji ide obavezno jedan drugi proizvod.Radi lakšeg unošenja robe da li moze da ako unesem taj proizvod(ProductID) odmah da mi u iducem unosu ponudi ovaj drugi proizvod i istu količinu.
Imam polja ProductID(Combo Box), Količina u formi.
ProductID uzimam iz tabele Products.
|
[ Zidar @ 11.03.2005. 19:00 ] @
Pitanje je na mestu, ali resenje nije ni malo pocetnicko. Ti znaci imas proizvod A koji podrazumeva proivod B (kad se unese A da se odmah doda i B u nekoj kolicini, recimo istoj). Koristis formu (moze i subform) za unos u tabelu OrdersDetails, recimo frmOrdersDetails.
Na formi frmOrdersDetails, na Form_AfterUpdate event, stavis kod koji provereva sta je upravo uneto. Form_AfterUpdate event se odigrava uvek, odmah posle operacije "save record", a pre nego sto se pomeris na novi rekord (Form_OnCurrent).
Posto si jos uvek na tekucem rekordu, proveris u kodu za Form_AfterUpdate neku proveru, kao ovaj pseudo-kod (nije pravi kod, vise kao skica):
Code:
sub Form_AfterUpdate()
dim db as dao.database
dim rs as dao.recordset
IF me!ItemID=Id_za_ProizvodA then
'otvori novi rekordset
set db=currentdb
set rs=db.operecordset ("SELECT * FROM OrdersDetails WHERE 1=2")
'ovo WHERE 1=2 je ozbiljno, ne zezam se, tako ti vraca 0 rekorda = brze je
'nemoj slucajno da si stavio bez WHERE, vratice ti celu tabelu = vrlo sporo
'dodaj novi rekord
rs.addnew
rs!ItemID=Id_za_ProizvodA
rs!Kolicina = me!kolicina
rs.update
rs.close
set db=nothing
End IF
'mozda ti treba i ovo, nisam siguran:
me.recalc
'ili
me.requery
'da bi se novi rekord video na formi
'Onda ti treba nesto kao
' pomeri se na poslednji dodati rekord
'9ovo se ne secam napamet kako ide
end sub
Za vise detalja, knjigu u ruke ;-)
[ slavko13 @ 11.03.2005. 19:37 ] @
Zidar puno sam Vam zahvalan ali to za knjigu u sake kao prvo ne znam koju a kao drugo ja sam strogi pocetnik pa bi to ucenje bojim se potrajalo.
Meni bi ovo mnogo pomoglo pa ako mozes malo detaljnije.
Proizvod A ima ProductID 12
Proizvod B ima ProductID 36
Probao sam ovo sto si mi pomogao ali nece da doda proizvod B kada se premestim u naredno polje i treba da se karat odmah postavi na vec upisanu kolicinu proizvoda B , i ja je samo potvrdim ili izmenim.
MNOGO BIH VAM BIO ZAHVALAN.
[ Zidar @ 11.03.2005. 21:36 ] @
Nazalost, ne mogu da ti pomognem detaljnije. Knjiga ima, i na srpskom i na engkleskom, potrazi malo i naci ces. A sto ce trajati duze, pa ni Rim nije sagradjen za jedan dan. Ja radim ovaj posao poslednjih 25 godina i stalno nesto ucim i stalno nesto ne znam, ali se mora, sta ces. Ako je problem koji resavas deo nekog skolskog projekta, onda ne vidim razlog da ne naucis kako treba. Ako je opet za neki posao, onda nije u redu da ja to resavam ovde za dzabe a ti za to dobijas platu.
Tacno je da ovde dolaze mnogi ljudi koji rade privatno i profesionalno, zaradjuju za zivot pisuci kod u Accessu. I svima pomognemo koliko mozemo, ali nikom ne resavamo osnovne zadatke, svi dobiju ideju i sami je posle razrade ili dorade.
Ne ljuti se, ali moraces da naucis sta su event procedure i kako se pise kod. to su osnovne stvari i tu nema popusta.
[ slavko13 @ 11.03.2005. 22:53 ] @
Mozes li mi reci zasto mi prijavljuje gresku u ovome:
Set rs = db.OpeRecordset("SELECT * FROM [Order Details] WHERE 1=2")
[ JogyII @ 12.03.2005. 02:19 ] @
nebi trebao da ti javlja gresku ako tabela postoji, ovde pise "[Order Details]" a gore je pisalo "OrdersDetails" da nisi pogresio spelling ?
[ JogyII @ 12.03.2005. 02:20 ] @
usput nije OpeRecordset nego OpenRecordset
[ slavko13 @ 12.03.2005. 08:56 ] @
Hvala za ovo "n" ali sad nece da doda nego prijavi kao gresku
"rs.update" kad izaberem proizvod A i uvek me vraca na prvi zapis kad izaberem neki drugi proizvod a ne na novi unos.
[ slavko13 @ 12.03.2005. 19:10 ] @
ZIDAR MOLIM VAS AKO MI MOZET RECI GDE MALO DETALJNIJE MOGU NACI O DAO OBJEKTIMA, IMAM ACCESS 2000 KNJIGU I U NJOJ SVEGA POLA STRANE O DAO3.6.
OVO STO SI MI POKAZAO NEMOZE DA FUNKCIONISE.
Zidar molim Vas ako mi mozete reci gde neke primere mogu naci za DAO objekte, imam knjigu Access 200 i u njoj svega pola strane o DAO 3.6.
Ovo sto si mi rekao ne moze da radi, probao sam na sve nacine, ispravio sam i greske u nazivu tabele i ono n ali opet nece.
[ Zidar @ 14.03.2005. 13:52 ] @
Ovo sam nasao pretrazujuci ovaj forum:
http://www.elitesecurity.org/tema/42335/0#279467
O knjigama na srpskom ne znam nista, odavno nisam tamo i nemam uvida u stanje literature. Sigura sam da neko sa forume moze da pomogne vise. Knjiga na engleskom mogu da ti preporucim mnogo, s nadom da su ti dostupne. evo ti nekoliko autora, pa sta nadjes:
Allen Browne, Alisson Balter, Ken Getz/Greg reddick, Rogger Jennings.
Zao mi je ali mi vreme ne dozvoljava da ti pomognem vise.
Srecan rad
:-)
[ JogyII @ 15.03.2005. 03:58 ] @
Citat: slavko13: Hvala za ovo "n" ali sad nece da doda nego prijavi kao gresku
"rs.update" kad izaberem proizvod A i uvek me vraca na prvi zapis kad izaberem neki drugi proizvod a ne na novi unos.
da si napisao kakvu ti gresku prijavljuje (tacnu poruku), dali je pri kompajliranju ili izvrsavanju i na kom tacno redu neko bi mozda mogao i da ti pomogne, ovako mozemo samo da nagadjamo LOL
[ slavko13 @ 15.03.2005. 07:38 ] @
Private Sub Form_AfterUpdate()
Dim db As dao.Database
Dim rs As dao.Recordset
If Me!ProductID = 10 Then
Set db = CurrentDb
Set rs = db.OpenRecordset("SELECT * FROM [Order Details] WHERE 1=2")
rs.AddNew
rs!ProductID = 11
rs!Quantity = Me!Quantity
rs.Update
rs.Close
Set db = Nothing
End If
End Sub
Znaci kad unesem proizvod sa ID=10 treba odmah kursor da predje u iduci red na polje Quantity gdje ce vec biti ponudjena kolicina i u prethodnom polju unet proizvod sa ID=11.
Ja kad unesem neki drugi proizvod sve radi normalno ali kad unesem ProductID=10
prijavi mi na Debug žuto rs.Update i ne doda u iduci red ProductID=11.
[ slavko13 @ 18.03.2005. 08:01 ] @
Nemogu da verujem da niko nezna u cemu je problem ili niko ne otvara ove starije teme.
[ Zidar @ 18.03.2005. 13:25 ] @
Citat: prijavi mi na Debug žuto rs.Update
Ovo bas i ne govori mnogo o gresci koju dobijes. Koji broj greske, koji tekst dobijes?
[ slavko13 @ 18.03.2005. 16:43 ] @
Kade izaberem proizvod koji se prodaje u kompletu sa ovim drugim, a kog bi trebalo automacki uneti u drugi red,prijavi mi gresku:
Run-time error `3058`
Index or primary key cannot contain a Null value.
End Debug Help
Kada izaberem Debug žuto označi Update.
[ TomaParComp @ 18.03.2005. 20:20 ] @
Pa što ne kažeš odmah!
Verovatno u tabeli order details imaš polje kojim tu tabelu linkuješ sa tabelom u kojoj čuvaš datum, šifru dobavljača i te stvari. E sad, kad se ona puni iz subforme, taj ID se sam updatuje, a kad ti updatuješ tabelu moraš ručno da updatuješ i taj ID.
Ja bih ti preporučio drugo rešenje.
Jednostavo odradi nešto tipa:
me![ime_subforme].addnew
me![ime_subforme]![ime_prvog_polja] = to_i_to
me![ime_subforme]![ime_drugog_polja] = to_i_to
.....
.....
Pišem napamet pa možda izgrešam sintaksu, ali sam ovakve situacije uglavnom rešavao tako da direktno POLJIMA FORME dodeljujem vrednosti i jednostavno pustim accessu da te podatke snimi u POLJA TABELE gde god da su one (recimo SQL).
Radi sporije ali za dodavanje jednog sloga zadovoljiće!
A i lepo izgleda, kao da neko popunjava podatke umesto tebe :)
Ako ne uspeš pošalji mi mdb.
[ Zidar @ 18.03.2005. 21:41 ] @
Toma je 100% u pravu. Fali ti OrderID, koji se automatski popunjava kad imas formu i subformu. Ono sto Toma predlaze je jednstavnije nego da sam pomocu rekordseta pronalazis OrderID s kojim trenutno radis pa da ga ubacis u tvoj rs.Addnew.. rs.Update kod.
[ TomaParComp @ 18.03.2005. 22:34 ] @
Yeah...
Mlogo zgodna stvar, ja je non stop koristim. Meni je u stvari najviše trebalo da povučem neke vezane vrednosti, tipa jedinica mere, tarifni broj, prodajna cena pa sam zbog toga "razradio" ovaj način upisivanja podataka.
Bio mi je problem da na osnovu šifre robe tražim ove podatke, nego sam ih lepo stavio u combo box kao kolone i kad upišem šifru robe, combo box se lepo ažurira i ja lepo pokupim vrednosti sa column(1), column(2)...
[ slavko13 @ 20.03.2005. 10:13 ] @
Uploadovao sam bazu uz prethodnu poruku pa neka neko proba da to izvede, ja nisam mogao.
[ slavko13 @ 20.03.2005. 11:56 ] @
Resio sam problem ovako:
Private Sub Form_AfterUpdate()
Dim db As dao.Database
Dim rs As dao.Recordset
If Me!ProductID = 10 Then
Set db = CurrentDb
Set rs = db.OpenRecordset("SELECT * FROM [Order Details] WHERE 1=2")
rs.AddNew
rs!OrderID = Parent.OrderID
rs!ProductID = 11
rs!Quantity = Me!Quantity
rs.Update
rs.Close
Set db = Nothing
End If
Me.Recalc
End Sub
Samo jos mi fali naredba da se kursor nadje na poslednjoj dodatoj kolicini.
Mnogo hvala svima.
[ slavko13 @ 21.03.2005. 09:33 ] @
Resio sam i ovaj problem sa naredbom:
DoCmd.GoToRecord , , acLast
ALI problemima nikad kraja, znam da sam previse dosadan ali kako da za proizvod koji mi access doda da doda i njegovu cenu(UnitPiece) iz tabele Products
rs!Quantity = Me!Quantity
rs!UnitPiece= Products!UnitPiece
Ovako ne moze?
[ slavko13 @ 24.03.2005. 17:20 ] @
Uspio sam sve ove probleme resiti ovako:
Dim db As dao.Database
Dim rs As dao.Recordset
Dim rs1 As dao.Recordset
If Me!ProductID = 10 Then
Set db = CurrentDb
Set rs1 = db.OpenRecordset("SELECT * FROM [Products] WHERE ProductID = 11;")
Set rs = db.OpenRecordset("SELECT * FROM [Order Details] WHERE 1=2")
rs.AddNew
rs!OrderID = Parent.OrderID
rs!ProductID = 11
rs!Quantity = Me!Quantity
rs!UnitPrice = rs1!UnitPrice
rs!Discount = Parent.Rabat
rs.Update
rs.Close
rs1.Close
Set rs = Nothing
Set rs1 = Nothing
Set db = Nothing
End If
i sve to lepo radi.
Ali ProductID=11 prodajem u kompletu i sa ProductID=79 pa sam i za njega napisao isti kod.
Kada unesem ProductID=10 doda se i ProductID=11 ali ako na istoj porudzbini treba uneti i ProductID=79 ne moze da ponovo doda ProductID=11 trebalo bi samo na vec unetu kolicinu ProductID=11 dodati kolicinu ProductID=79.
MNOGO JE OVO KOMPLIKOVANO DA LI SE OVO MOZE RESAVATI ILI DA ODUSTANEM.
[ Zidar @ 24.03.2005. 18:45 ] @
O, znaci iamamo vise od jednog 'kompleta', ko bi to rekao... :-) I sad naravno treba da dodajemo linije koda kad god se uvede novi komplet u igru. A onda se neki kompleti delimicno preklapaju... jos gore. To zahteva resenja na nivou dizajna tabela i analize celokupnog procesa.
Na pocetku si rekao da si pocetnik i veruj mi to sto hoces je potesko i za iskusnije majstore. Zato ti predlazem da batalis taj problem. Nije sto ga neces resiti nego ces usput jos i ponesto pogresno da naucis. Problem je mnogo dublji nego nepoznavanje sintakse za rad sa rekordsetima ili event procedurama. Ucenje sintakse i ponekih sitnih trikova ti nece pomoci. lepo je da se nauci sintaksa i upotreba nekih funkcija, ali ti nece pomoci da resis tvoj problem. Pusti malo taj problem, radi malo stvari koje umes, pa za nekoliko meseci pokusaj ponovo.
Ponavljam, problem nije u programiranju i ne moze se programiranjem ni resiti. problem je u dizajnu sistema, a to je mnogo teze objasniti i resiti.
[ banem @ 24.03.2005. 19:12 ] @
ALI problemima nikad kraja, znam da sam previse dosadan ali kako da za proizvod koji mi access doda da doda i njegovu cenu(UnitPiece) iz tabele Products
---------
Evo jedne ideje za jedostavno rešenje. Postavi Combo box kao i za product, samo što ćeš prepraviti da ne prikazuje naziv proizvoda već njegovu cenu. Ako je potrebno iskoristi vrednost polja i prebaci ga u drugo polje npr. Combo box možeš sakriti da se ne vidi.
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|