|
[ pmiroslav @ 20.04.2009. 18:00 ] @
| Sa donjom procedurom popunjavam tablicu u subformi sa podacima iz forme. Sve radi, osim što neće da mi prihvati polje datum.
Polje datum u tablici tblUlaz postavljeno je kao Date/Time - ShortDate.
Molim pomoć
DoCmd.RunSQL "INSERT INTO tblUlaz(IDTransakcije,SIFRA,Datum,Skl,Ulaz,IDdokumenta,BrojDokumenta,Dobavljac)" & _
"SELECT '" & Me.IDTransakcije & "','" & Me.ComboSifra.Column(0) & "','" & Me.Datum & "','" & _
Me.ComboSkl.Column(0) & "','" & Me.txtKomada & "','" & Me.IDdokumenta.Column(0) & "','" & _
Me.BrDokumenta & "','" & Me.Dobavljac.Column(0) & "'" |
[ Air Live @ 20.04.2009. 18:25 ] @
Evo pokušaj sada.

[ pmiroslav @ 20.04.2009. 19:15 ] @
Probao sam ali kod mene i dalje neće!
[ domaci_a_nas @ 20.04.2009. 20:20 ] @
Ne znam iskreno odakle ti ideja da datumsko polje postaviš između apostrofa. Da bi se osigurao da će datumsko polje biti upisano baš onako kako piše na tvom računaru bez obzira na regional settings koristi sledeće Code: DoCmd.RunSQL "INSERT INTO tblUlaz(IDTransakcije,SIFRA,Datum,Skl,Ulaz,IDdokumenta,BrojDokumenta,Dobavljac)" & _
"SELECT '" & Me.IDTransakcije & "','" & Me.ComboSifra.Column(0) & "'," & CLng(Me.Datum) & ",'" & _
Me.ComboSkl.Column(0) & "','" & Me.txtKomada & "','" & Me.IDdokumenta.Column(0) & "','" & _
Me.BrDokumenta & "','" & Me.Dobavljac.Column(0) & "'"
[ Zidar @ 20.04.2009. 20:40 ] @
Probaj ovako:
Code:
Private Sub Command27_Click()
'Zapazi kako se moze koristiti debug.print da ti otprinta SQL
'koji onda mozes da probas u SQL prozoru i tu lakse vidis sta ne valja
Dim strSQL As String
strSQL = "INSERT INTO tblUlaz(IDTransakcije,SIFRA,Datum,Skl,Ulaz,IDdokumenta,BrojDokumenta,Dobavljac)" & _
vbCrLf & "SELECT '" & Me.IDTransakcije & "','" & Me.ComboSifra.Column(0) & "','" & Me.Datum & "','" & _
Me.ComboSkl.Column(0) & "','" & Me.txtKomada & "','" & Me.IDdokumenta.Column(0) & "','" & _
Me.BrDokumenta & "','" & Me.Dobavljac.Column(0) & "'"
Debug.Print "Originalni strSQL:"
Debug.Print "------------------"
Debug.Print strSQL
'Ovako treba da ti izgleda strSQL, bez navodnika oko numerickih polja
strSQL = "INSERT INTO tblUlaz(IDTransakcije,SIFRA,Datum,Skl,Ulaz,IDdokumenta,BrojDokumenta,Dobavljac)" _
& vbCrLf & "SELECT " & Me!IDTransakcije & ",'" & Me!ComboSifra.Column(0) _
& "',#" & Me!Datum & "#,'" _
& Me.ComboSkl.Column(0) & "'," _
& Me.txtKomada & "," & Me.IDdokumenta.Column(0) & ",'" _
& Me.BrDokumenta & "'," & Me.Dobavljac.Column(0) & ""
Debug.Print "Ispravljen strSQL:"
Debug.Print "------------------"
Debug.Print strSQL
DoCmd.RunSQL strSQL
Me.subUlaz.Requery
Me![ComboSifra] = Null
Me![txtKomada] = Null
DoCmd.GoToControl "ComboSifra"
End Sub
Izvrsi kod i pogledaj debug window. Videces tvoj originalni SQL i promenjeni. Problem nije bio u datumu nego u numerickim polima. Nije bilo razloga da numericka polja stavis u znakove navoda oko nummerickih podataka. Zto je pucao kveri. Sto se tice datuma, datum moze da prodje i sa znakovima navoda ali je cistije kad se upotrebi #12.04.2008# nego '12.04.2008'
Ako vec ovako radis, preporucujem da umesto RunSQL koristis
set db = currentdb
db.execute failonerror
i da dodas Error handling. Onda ce ti tacno reci
Zatim, sta ce se desiti ako korisnik pritisne dugme a da nije izabrao sve podatke. Meni je pucao kveri, a verujem da ce i kod korisnika. Dakle, pre nego sto pokusas da izvrsis kveri, proveri da li su svi podaci prisutni. Ako je bilo sta NULL ili ima recimpo prazan string, nemoj ni da pokusas da izbvrsis kveri, nego pokazi korisniku poruku.
I na kraju, mozda najkorisnija stvar - umesto da se mucis sa postavljanjem apostrofa gde treba i korektnog oznacavanja datuma, nadji u Bazi Znanja na forumu funkcije QUoted i SQLDAte i koristi njih. SQLDate imas i na sajtu Alen Browne, pa mozes da uzmes i odatle.
http://allenbrowne.com/ser-36.html
Moram da priznam da mi dijagram relacija nije bas jasan, ali ko zna, mozda tebi bas tako treba. Zbog neobicnog dijagrama relacija mucis se da postignes veoma jednostavnu stavr - unos stavki sa dokumenta u tabelu Ulaz.
:-)
[ pmiroslav @ 20.04.2009. 21:02 ] @
Zahvaljujem na sugestijama.
Što se tiče provjere dali su sva potrebna polja popunjena tu sam mislio ispred strSQL dodati nešto kao
If IsNull(Me.Sifra) Then
MsgBox "Upiši šifru materijala!", vbExclamation, "Obavijest"
DoCmd.GoToControl "Sifra"
Exit Sub
End If
itd.
[Ovu poruku je menjao pmiroslav dana 20.04.2009. u 22:29 GMT+1]
[Ovu poruku je menjao pmiroslav dana 20.04.2009. u 22:29 GMT+1]
[ pmiroslav @ 28.04.2009. 12:18 ] @
Vračam se ponovno na ovo temu jer mi se pri kraju posla opet pojavljuju neki problemi.
Kod rada sa formama "frmUlaz" i "frmIzlaz" nakon pokušaja da unesem podatke u subformu javlja mi se poruka o greški:
Microsoft Office Access can't append records in the appemd query.
MS access set 1 field(s) to Null due to a type conversion falture, and it did'nt add 0 record(s) to thr table due key violations, 0 record(s) due to lock violations, and 0 record(s) due to validation rule violations.
Do you want to run action query anyway?
To ignore the error(s) and run the query anyway, click Yes.
For an explanation of the causes of violation, click Help.
Ovo mi se dešava kada pokušavam upisati podatke za novu Transakciju, tj kada u tablici "Ulaz" ili "Izlaz" još nema podataka, a ako ručno unesem samo jedan podatak direktno u tablicu tada mi se i iz forme dozvoljava upis.
U međuvremenu sam primjetio da nakon što ispunim sva polja u glavnoj formi pa ručno postavik kursor na polje IDtransakcije u subformi i onda pritisnem dugme za popunjavanje subforme procedura se ispravno odradi
[Ovu poruku je menjao pmiroslav dana 28.04.2009. u 14:35 GMT+1]
[ Zidar @ 28.04.2009. 17:33 ] @
Problem je u ovome Code: INSERT INTO tblUlaz(IDTransakcije,SIFRA,Datum,Skl,Ulaz,IDdokumenta,BrojDokumenta,Dobavljac)"
Pokusavsa da unese IDTransakcije koji ne postoji ako nemas ni jedan rekord u tabeli Transakcije. I sam si video da ako imas rekord u tabeli Transakcije, sve 'lepo radi',. Znaci da pre nego pritisnes ENTER dugme na formi, rekord na glavnoj formi (Transakcije) moras prvo da sacuvas.
A razlog svemu ovome je sto ti subforma nije vezana (bound). Ako subforma nije bound, onda moras sam da popunjavas podatke nekakvim kodom, ovo sto ti pokusavas. Kada je 'subforma' vezana, IDTransakcije se sam popunjavao i o ovome svemu ne moras da brines. Ukratko, ucini da tvoja subUlaz zaista bude subforma, vezana za glavnu formu. Onda ti dugme Enter nece trebati uopste, kao ni sav ovaj posao koji radis sa INSERT INTO.
Predlazem da potpuno batalis ovo dugme Enter i kod iza njega. Stavi da ti je subform vezana (bound) i kazi da je Link Master field = [ID Transakcije] s aglavne forme i da je Child Field = [ID transakciej] (sa subUlaz). I tako nece biti nikakvog koda. The best code is no code at all.
Ne razumem zasto mnogi uporno pokusavaju da pronandju toplu vodu. Jedna od kljucnih stvari koja Access odvaja u posebnu kategoriju u odnosu na druge nazovi front end alate za baze podataka, jesu upravo vezane subforme, bas na nacin kako ih je Microsoft zamislio i ugradio. Ako ne koristis vezane subfome za relacije 1:vise, bolje je sve uraditi u VB. Vezane subforme i report genmerator su dve stvari koje Access odvajaju od ostalih alata za pravljenje front enda za baze podatka.

[ pmiroslav @ 28.04.2009. 18:08 ] @
Citat: Zidar:
Predlazem da potpuno batalis ovo dugme Enter i kod iza njega. Stavi da ti je subform vezana (bound) i kazi da je Link Master field = [ID Transakcije] s aglavne forme i da je Child Field = [ID transakciej] (sa subUlaz). I tako nece biti nikakvog koda. The best code is no code at al
:-)
Hvala na sugestiji ,ali ako si primjetio moja subforma je vezana kako predlažeš jedino što u subformi nisam polja za šifru i skladište postavio da budu combo kako bi se sadržaj kojim se popunjava izabirao iz tablice MAT odnosno skladište. Znam da može i tako.
Ali mi se ovakav način koji ja pokušavam napraviti čini malo više "šminkerski" pa bi ipak volio ako bi se to moglo tako nekako napraviti
[ pmiroslav @ 28.04.2009. 18:36 ] @
Evo napravio sam to tako kako je Zidar predložio.
Jedino mi je još imam kako izbječi sistemsku poruku o grešci.
U tablici ulaz postavio sam dvostruki ključ kako bih zabranio dupli unos šifre pod istim IDtransakcije i sada kada se to desi Acces izbaci svoju poruku, a ja bih želo umjesto nje napraviti svoju kao npr " Materijal pod tom šifrom več je upisan"
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|