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
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]
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:
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!
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.
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!
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???
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.