|
[ niconne @ 06.03.2011. 08:30 ] @
| Poštovani, radim jednu bazu za lekarsku ordinaciju i taman kada sam završio pojavio mi se problem odsecanja karaktera u memo polju kada dužina prelazi 255. To je u ovoj bazi uvek slučaj jer je lekarski pregled opširan. Pri ubacivanju u drugu tabelu obavezno mi odseče tekst i na kraj doda neke kukice. Koristim DoCmd.RunSQL naredbu tipa insert into tabela2 (sifra, memo) values (sifra, memo). Našao sam dosta toga na forumu, ali ničega konkretno, a još me više zbunjuje što nekome radi, a nekome ne. Koristim Access 2003. U prilogu je kompletan primer koji ilustruje problem. Hvala |
[ galac1968 @ 06.03.2011. 09:00 ] @
Pregledaj ovo http://office.microsoft.com/sr...je-memo-polja-HA010096313.aspx
Promeni na PROPERTY SHEET na kartici DATA osobinu TEXT FORMAT u Rich text i resio si problem,al se ipak na gornjem linku informisi o ososbinama memo polaj
[Ovu poruku je menjao galac1968 dana 06.03.2011. u 10:11 GMT+1]
[ niconne @ 06.03.2011. 09:45 ] @
Da, li toga nema u verziji 2003. Ili grešim?
[ galac1968 @ 06.03.2011. 10:47 ] @
Izvini nisam primetio da je 2003. Evo ti ovaj link imas na njemu brdo stavari za Access 2003. Pa potrazi,ja nemam vremena.
http://www.ic.ims.hr/office/access2003/kazalo-access.html
[ banem @ 06.03.2011. 13:29 ] @
1) Promeni naziv polja tabel iz Memo > fMemo. "Memo" je rezervisana reč
2) Promeni naziv polja forme ize Memo u > fMemo
3) Izmeni programsku liniju u ovo:
CurrentDb.Execute "INSERT INTO Table2 (Sifra, fMemo) VALUES (" & Sifra & ", '" & fMemo & "')"
Sad radi.
[ niconne @ 07.03.2011. 06:01 ] @
Rešili ste mi veliki problem. Fajl koji sam postavio je samo demo varijanta koja ilustruje primer, u realnoj aplikaciji ta polja se zovu pregled, nalaz, dijagnoza... Samim tim nisam koristio rezervisanu reč memo. Takođe, radi i DoCmd.RunSQL naredba. Upit prenosi 10-ak vrednosti, a samo tri su memo. Samo njih sam stavio između znakova & i " tako da izgleda ovako npr: '" & Nalaz & "'. Sada sve radi normalno i prilikom prenosa ceo tekst je sačuvan i izgleda isto kao u izvorišnom polju. Ovaj deo sa navodnicima za mene je potpuna novost i nadam se da će pomoći i drugima koji su imali sličan problem.
Branislave, kao višegodišnji pretplatnik PC PRESS-a redovno čitam access bajtove, a to mi je i omiljena rubrika. Moje aplikacije su pune primere iz nje. Najiskreniji komplimenti. Hvala mnogo i veliki pozdrav od Nikole!
[ banem @ 07.03.2011. 06:20 ] @
Ja koristim CurrentDB.Execute iz više razloga; recimo jedan od njih je to što ne moraš da stavljaš DoCmd.SetWarnings False/True da isključiš poruku za potvrdu akcije.
Za ostatak komentara, uh, hvala. :)
[ niconne @ 07.03.2011. 10:14 ] @
Ako mislimo na isto, ja to jednostavno isključim u Tools/Options/Edit-Find/Confirm. Pozdrav :)
[ banem @ 07.03.2011. 11:53 ] @
Jeste, ali to je lokalna opcija tj. važi samo na tom računaru gde ste te opcije isključili.
[ niconne @ 08.03.2011. 09:42 ] @
Problem sam rešio kod sebe na računaru na onoj maloj bazi koju sam priložio. Sinoć kod klijenta ipak nisam uspeo. Moj kod u potpunosti radi, osim u delu kada treba ubaciti više od 255 karaktera. Kod je:
Private Sub Command9_Click()
Dim UslovPa As String
Dim BrojacPa As Byte
Dim BrojacPr As Byte
Dim UslovPr As String
If Me!PacijentID <> Empty Then
UslovPa = "[PacijentID]=" & "'" & Me!PacijentID & "'"
UslovPr = "[PregledID]=" & "" & Me!PregledID & ""
BrojacPa = DCount("PacijentID", "Pacijenti1", UslovPa) ' prebrojava pacijente
BrojacPr = DCount("PregledID", "Pregled1", UslovPr) ' prebrojava preglede
If BrojacPa = 0 Then ' ako nema pacijenata upisuje i pacijenta i pregled
DoCmd.RunSQL "INSERT INTO Pacijenti1 (PacijentID, ImePacijenta, GodRodjenja, Zanimanje, BrojTelefona, NazivUlice, PostanskiBroj, NazivMesta, Napomena) VALUES (PacijentID, ImePacijenta, GodRodjenja, Zanimanje, BrojTelefona, NazivUlice, PostanskiBroj, NazivMesta, Napomena)"
DoCmd.RunSQL "INSERT INTO Pregled1 (PregledID, Datum, PacijentID, Nalaz, Dijagnoza, Terapija) VALUES (PregledID, Datum, PacijentID, Nalaz, Dijagnoza, Terapija)"
MsgBox "Podaci su uspesno sacuvani!"
DoCmd.RunCommand acCmdRefresh
Else
If (BrojacPa = 1) And (BrojacPr = 0) Then ' ako je pacijent tu upisuje samo pregled
DoCmd.RunSQL "INSERT INTO Pregled1 (PregledID, Datum, PacijentID, Nalaz, Dijagnoza, Terapija) VALUES (PregledID, Datum, PacijentID, Nalaz, Dijagnoza, Terapija)"
DoCmd.RunCommand acCmdRefresh
Else
MsgBox "Ovaj pregled je vec sacuvan!" ' ima i pacijenta i pregleda
End If
End If
Else
MsgBox "Nema podataka za cuvanje!"
End If
' sve ovo radi savrseno osim kada su memo polja duza od 255. Kada ubacim ono sto sam saznao na forumu nece da radi
' izbacuje poruke key violations, greska u upitu i mnogo toga jos, a ne znam zasto kada nista ne menjam osim u VALUES delu
End Sub
Gde grešim? U prilogu šaljem konkretan primer. Hvala unapred!
[ banem @ 08.03.2011. 10:33 ] @
Zar nismo problem već rešili, a vi opet istu grešku?
...PacijentID, '" & Nalaz & "', Dijagnoza,...
[ niconne @ 08.03.2011. 11:12 ] @
Pa to i kažem i sam se čudim. Nije opet ista greška, ovo je izvorni kod pre promena. Kada izmenjam to što smo rekli, dobijam poruku od drugim greškama. Npr. key violation, query expresion... Ne znam šta sve, to se ne javlja u kodu koji sam priložio, ali kad promenim kako smo rekli, greška za greškom???
[ banem @ 08.03.2011. 11:44 ] @
Napravite ovako:
Dim strSQL As String
strSQL = "INSERT INTO Pacijenti1 (PacijentID, ImePacijenta, GodRodjenja, Zanimanje, BrojTelefona, NazivUlice, PostanskiBroj, NazivMesta, Napomena) VALUES (PacijentID, ImePacijenta, GodRodjenja, Zanimanje, BrojTelefona, NazivUlice, PostanskiBroj, NazivMesta, Napomena)"
Debug.Print strSQL
Exit Sub
Zatim iz Immediate okna prenesite iskaz u novi upit, SQL view. Pokrenite upit. Da li radi ili ne?
To što sam savetovao radi kod mene, ali ja uvek izmenim DoCmd.RunSQL u CurrentDB.Execute. Jednu izvršava JET, drugu VB...
[ banem @ 08.03.2011. 11:53 ] @
Hmmmm, ja tek sad vidim ovo:
"INSERT INTO Pregled1 (PregledID, Datum, PacijentID, Nalaz, Dijagnoza, Terapija) VALUES (PregledID, Datum, PacijentID, Nalaz, Dijagnoza, Terapija)"
Ono iza VALUES (vrednosti) nisu "values" već običan tekst koga niko ne razume - ni VBA, ni Access ni JET.
Daću jedan jednostavan primer:
INSERT INTO tblTest (ID, Broj) VALUES (1, 10)
Ovo će da radi. Međutim, bez gledanja ove gornje linije možete mi reći koje vrednosti ima ID i Broj i da li su to promenljive?
INSERT INTO tblTest (ID, Broj) VALUES (ID, Broj)
Za program to nisu, to je običan string a ne promenljiva.
[ niconne @ 08.03.2011. 13:29 ] @
Ok, ovo poslednje razumem, ali ne vidim kontekst. U mom slučaju se to ne dešava jer su u zagradama promenljive, odnosno nazivi polja. I još kada se kod pozove na formi u kojoj svaki slog ima dugme sa tim kodom, ne bi trebalo da bude problema. Klikom na dugme već smo fokusirani na tekući zapis i to sve radi normalno.
Suština ove teme je bila prenos iz memo polja u drugo polje kada dužina teksta prelazi 255 karakrera i Vi ste Branislave rešili taj problem i Vaš kod je potpuno korektan. Iz nekog razloga to kod mene ne radi. Ali sam nekako rešio i to priznajem slučajno.
Moj kod bio je:
DoCmd.RunSQL "INSERT INTO Pregled1 (PregledID, Datum, PacijentID, Nalaz, Dijagnoza, Terapija) VALUES (PregledID, Datum, PacijentID, Nalaz, Dijagnoza, Terapija)"
Branislavljevo rešenje:
DoCmd.RunSQL "INSERT INTO Pregled1 (PregledID, Datum, PacijentID, Nalaz, Dijagnoza, Terapija) VALUES (PregledID, Datum, PacijentID, '" & Nalaz & "', '" & Dijagnoza & "', '" & Terapija & "')"
Ovo je potpuno tačno i radi to što sam ja hteo.
Ipak, to kod mene nije htelo da radi. Promenim nalaz, radi, dijagnozu, radi i stignem do polja terapija koje ne radi, odnosno u tom slučaju dobijam grešku tipa key violation...
Sada mi izgleda bezveze, ali problem je izazvan time što je u odredišnoj tabeli bilo zabranjeno da memo polje bude null.
Iz razloga koje ne razumem sasvim, naredba: terapija radi, a '" & terapija & "' NE, kada je svojstvo Allow Zero Lenght postavljeno na No.
Vama se Branislave, zahvaljujem na rešenju i vremenu koje ste mi posvetili.
[ branko967 @ 14.12.2011. 12:53 ] @
Niconne jel mozemo da vidimo te primere aplikacija u access-u koje imas?
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|