Wyszukiwanie w Firebird a polskie znaki??

0

Witam !!
Mam aplikacje w delphi i pewien problem. Jest ona napisana na bazach Firebird i kiedy chce wyszukac jakies wyrazenie gdzie wystepuja polskie znaki to odroznia wtedy małe i wielkie litery. Nie dziala funkcja UPPER ?? Jednak bez polskich znakow wszystko dziala bez prblemu. Ktos ma moze jakis pomysl jak temu zaradzic ??? Do wyszukiwania uzywam komponentu TIBClientDataSet i jego wlasciwosci Filter. Prosze o drobna pomoc....
Pozdraiwam</url>

0

A nie lepiej spróbować zapytanie

Select from tabelka where

.....? :)

0

Moze ???? Zaraz to sprawdze :)

0

a kodowanie i typ porównania (collate) ustawiłeś w FB :>

0

Niektóre wersje FB miały problem z UPPER - ale działa LOWER :)

0

no niestety nie chce mi zadzialac wyszukiwanie polskich znaków.... :/:/:/
Baze mam ustrawiona na WIN1250 i Collate PXW_PLK ???

Wyszukiwanie robie przez IBClientDataSet i dziala wszystko oprucz polskich znaków :/
A moze cos zle robie ??

If Radiobutton1.Checked then
begin
DM.IBClientDataSet1.Filter:='UPPER(NAZWA) LIKE '+QuotedStr('%'+UpperCase(Edit1.Text)+'%');
DM.IBClientDataSet1.Filtered:=True;
end;

taki jest kod ..... [sciana] [sciana] [sciana]
moze ktos mi podpowie co nie tak jest ????

0
  1. zamiast UpperCase zobacz AnsiUpperCase
  2. czy w IBDataBase masz ustawione lc_ctype=WIN1250?
  3. jak 1 i 2 nie zadziała to pozostaje jedynie napisać (na pewno w sieci gdzieś są) własnego udfa, który bedzie robił upper i lower na danych z bazy bo z tego co pamiętam to jednak UPPER i LOWER SQLowy ma problemy z pl znaczkami
0

MAm ustawione

DM.IBDatabase1.Params.Values['lc_ctype'] := 'WIN1250';

hmmmmm zobacze z tym drugim ....
Pozdrawiam

0

OKi dzieki wielkie wszystko jakos dziala z AnsuUpperChar...
Jak juz tak dobrze idzie to mam jeszcze jedno pytanko. Jak mam NP.: IBDatabase i IBTransaction to jak jest lepiej czy jak mam IBDatabasei.Open to IBTRansaction1.Active:=True; Czy lepiej jest po kazdym zapytaniu robic IBTransaction1.Active:=False; Co jest lepsze ???????? i kiedy robic na false ????? Czy zalecane jest ustawianie poziomu izolowaia przy kazdym wlaczaniu i wylaczaniu czy lepiej jest na stale to ustawic ????
PLZ HELP... [sciana] [sciana] [sciana] [sciana] ;( ;(

0

eeee poziom izolacji ustawiasz zazwyczaj raz dla transakcji i tyle (zazwyczaj nie ma potrzeby zmieniania go). Połączenie z bazą zazwyczaj jest aktywne cały czas uruchomienia aplikacji (no chyba, że np. program kożysta z połączenia co 2 godziny przez 5 minut a działa 24h/dobe to wtedy nie trzyma otwartego połączenia cały czas)
Co do transakcji to jak już to nie Active := False tylko albo Commit (czyli zatwierdzenie zmian) albo Rollback (czyli cofnięcie zmian). Co do tego czy transakcję kończyć czy nie to powinieneś sam wiedzieć (jeśli rozumiesz co to jest transakcja i do czego)

0

z tego co wyczytalem transakcja to ciag operacji ktory jesli zostal rozpoczety to powinien byc zakonczony... Czyli po zakonczeniu jakiejs transakcji czyli jesli zrobie IBTransaction1.Commit; to moge puzniej zrobic IBTransaction1.Active:=False; Czy niebardzo ? Chyba ze cos bredze [???] [???]
Prosilbym o odpowiedz....
[sciana]

0
IBTransaction1.Commit; //zatwierdzasz zmiany
 IBTransaction1.Rollback; //cofasz zmiany
0

transakcja to ciąg operacji, który albo zostanie wykonany w całości albo wcale. Wyobraź sobie np. operację przelewu pieniędzy w banku z konta na konto. Trzeba wykonać conajmniej dwie główne operacje

  1. zmniejszyć ilość pieniędzy na koncie z którego przelewamy
  2. zwiększyć ilość pieniędzy na koncie na które przelewamy
  3. inne dodatkowe operacje jak zapis historii itp

i teraz nie mamy transakcji, każda operacja jest wykonywana oddzielnie. Zrobiliśmy operację nr 1 i w trakcie wykonywania operacji nr 2 zawiesił się serwer. Teraz czy operacja się udała czy nie? Jeśli się udała to mieliśmy szczęście jak nie to pieniądze wyparowały bo nie ma ich na żadnym koncie. Transakcje rozwiązują te problemy bo albo wykonają się wszystkie te operacje albo żadna (fizycznie zmiany zostają zapisane w momencie wydania transaction.commit). To tyle jeśli chodzi o transakcje. Na tej podstawie sam powinieneś decydować kiedy poszczególne transakcje chcesz zatwierdzić
Pamiętaj! zapis fizyczny do bazy odbywa się w momencie zatwierdzenia transakcji!

A co do "Czyli po zakonczeniu jakiejs transakcji czyli jesli zrobie IBTransaction1.Commit; to moge ort! zrobic IBTransaction1.Active:=False; Czy niebardzo ?" to jak dasz commit lub roolback to transakcja się kończy i jest nieaktywna więc IBTransaction1.Active := False; i tak nic nie da bo IBTransaction1.Active jest False;

0

Oooo i o to mi chodzilo w sumie ,,,, dzieki za odpowiedzi [browar] [browar] [browar] [browar] [browar] Pozdrawiam :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1