[ Bojan Kopanja @ 05.05.2005. 21:46 ] @
Pretragom ovog foruma sam došao do linka za TnT komponentu koja omogućava jednostavno korišćenje ćirilice tj. "neobičnih" pisama uopšte u Delphiju i to radi fantastično, ali sam naišao na problemče. Pošto moj program koji MORA da bude na ćirilici radi sa bazama, doščo je do problema sa ADOQuery komponentom ( ili milo kojom drugom ), pošto ne prepoznaje sadržaj polja kada ga prosledim kroz SQL upit. Ne zam da li ste razumeli ovo, ali evo primera. Kod mene u bazi stoji recimo Ime: Pera, Prezime: Petrović, sada kad prosledim 'select * from tabela where prezime = ' + quotedstr(TnTEdit1.text); ne domijem ništa kao reziltat pretrage pošto je SQL property dobio brljotine na mestu prezimena i ne prepoznaje da to prezime već postoji u bazi.

Jbg, ne znam da li sam dovoljno dobro objasnio problem, ali to je trenutno najbolje što mogu pošto sam prilično iscrpljen .

Eh, sada, pitanje je kako da sredim ovo, tj. kako da koristim ćirilicu tako da ADOQuery.SQL može da provali šta tu u stvari piše ?

Rešenje ne mora da bude kroz neku komponentu, mogu i da batalim TnT komponentu, pošto nisam daleko odmakao, pa da radim nekako ručno sve to?

Help !
[ sasas @ 06.05.2005. 07:53 ] @
Nisi rekao koju bazu koristiš? Na MSSQL serveru na primer, unicode prosleđuješ ovako:

SELECT * FROM tabela WHERE Ime LIKE N'Saša%'

Fazon je u onom slovu N ispred parametra. Ne znam da li je ovo standard ili je T-SQL specijalitet.

ss.
[ gsinisa @ 06.05.2005. 08:37 ] @
Inace, ne moras da koristis Tnt komponente za cirilicu, i obicne komponente se sasvim lepo snalaza sa cirilicom, samo podesi Regional and Language Options, tab Advanced, pa stavi Serbian(Cyrilic) kao Language for non-unicode programs.
Tnt komponente se koriste samo kada je potrebno mešati više kodnih rasporeda u okviru iste aplikacije, npr ako hoces da unosis i cirilicu i latinicu u istoj aplikaciji. Pri tome moras da pazis prilikom rada sa tnt komponentama na cinjenicu da koristi unicode karaktere tj. 16-bitni wstring. Sve db komponente Delphi-a koriste običan 8-bitni string, tako da ces uvek dobiti brljotine ako probas nesto tipa Query1.SQL.Add(TntEdit.Text) jer će Delphi unicode prebaciti u obican string.
[ Bojan Kopanja @ 06.05.2005. 08:44 ] @
Hm, koristim ADO komponente, tj. Access-ovu bazu i izgleda da ovo ne radi posto kada stavim

SELECT * FROM tabela where prezime= N'+QuotedStr(TntEdit2.Text)

izbaci mi gresku oko parametra "prezime= N'??????'"
[ bondja @ 06.05.2005. 09:51 ] @
Primer koda gde se ne koriste TnT komponente, a SQL izraz se izvrsava (odradio sam podesavanja za nasa slova , kao sto je @gsinisa savetovao)...

pozdrav!
[ nikola.j @ 06.05.2005. 10:25 ] @
>
>


Na Tnt sajtu se nalaze i LX komponente. Medju njima je i TntADOQueryLX (kao i
ekvivalenti za Table i Dataset). Pretpostavljam da joj je zadatak upravo to sto
tebi treba
[ Bojan Kopanja @ 06.05.2005. 19:28 ] @
OK, ljudi hvala vam na pomoci, probavam soon, pa cu da javim da li sam uspeo!
[ morlic @ 06.05.2005. 23:08 ] @
Ja sam probao tnt + sdac komponente za pristup SQL serveru i radi sve: i cirilica i latinica i makedonski i sve to zajedno u jednom stringu :)

Kod upita koji si dao kao primer ime prosledjujem kao parametar, a ne direktnim umetanjem, cisto da znas i da probas.

Naravno polje u bazi je nvarchar() tipa.
[ _v!rus_ @ 07.05.2005. 11:32 ] @
Mislim da nije problem u ADOqr komponenti, njen posao je da sirovi PChar koji predstavlja SQL upit prosledi DBEngine-u koji je ispod komponente, a ako je taj PChar u stvari PWChar, ne bi trebalo da je nikakav problem jer je MS ADO potpuno unicode-aware. Pogledaj ti da li ti taj QuoteStr vraca WString kako treba.
[ Nemanja Avramović @ 07.05.2005. 11:35 ] @
Citat:
bondja: Primer koda gde se ne koriste TnT komponente, a SQL izraz se izvrsava (odradio sam podesavanja za nasa slova , kao sto je @gsinisa savetovao)...

pozdrav!


ja owde vidim samo slovo Đ a ostala su prikazana kao |
[ Bojan Kopanja @ 07.05.2005. 22:45 ] @
@JaHvram

Citat:
Inace, ne moras da koristis Tnt komponente za cirilicu, i obicne komponente se sasvim lepo snalaza sa cirilicom, samo podesi Regional and Language Options, tab Advanced, pa stavi Serbian(Cyrilic) kao Language for non-unicode programs.


Kao što čovek reče . Jesi li podesio ovo ( verovatno na latinicu u ovom slučaju ), pošto meni sada radi savršeno bez ikakvih komponenti i sa ćirilicom!

Hvala ljudi, pomogli ste mi dosta !
[ _v!rus_ @ 08.05.2005. 00:44 ] @
Da, ali to nije resenje, onda ces morati na svakoj klijent masini da podesavas isto (pogledaj JaHvram-ov post), a i ta promena ima sa sobom i mnoge druge iritirajuce posledice u samom windows-u.

Ako ti je proradilo kada si to promenio, znaci da od starta nisi koristio unicode, tebi su podaci u tabeli zapisani kao ASCII tekst (8-bitno).
[ engineer @ 08.05.2005. 09:42 ] @
_v!rus_ je u pravu, za unicode moraš koristiti odgovarajuće WideString funkcije. Funkcije koje rade sa stringovima kao što je QuotedStr umesto karaktera šđžčć vratiće ti šdžcc tako da ti query ili filter neće raditi kako treba.
Koristi query parametre i uncode kontrole (TNT), i sve će raditi kako treba, bez potrebe da svom klijentu objašnjavaš šta da podešava u regional settings...
[ Bojan Kopanja @ 08.05.2005. 11:03 ] @
OK, ubedili ste me :D. Probaću onda da se prebacim na TNT komponente, pa
javljam ponovo šta sam uradio ;).