Sortowanie bazy przy pomocy Query

Odpowiedz Nowy wątek
Klimba
2010-01-10 14:02
Klimba
0

Witam !

Szlifuję sobie ten mój projekcik i natrafiłem na kolejny problem. Czytałem już kilka postów na ten temat ale nic z tego. Otóż mam tabelę w bazie którą chcę posortować.

  1. Stworzyłem dodatkowy formularz nazwijmy go form4 i wrzuciłem na niego TTable, TDataSource, TDBGrid i TQuery. Chciałem żeby po kliknięciu w tytuł kolumny w DBGridzie posortowała mi się tabela wg danej kolumny. Na tym forum dotarłem do kodu
var
     atrybut, wartosc: string;
begin
     atrybut:=Column.Title.Caption;
     if atrybut='imie' then wartosc:='NR_ID';
     if atrybut='LP' then wartosc:='LP';
     if atrybut='IMIĘ' then wartosc:='IMIE';
     if atrybut='nazwisko' then wartosc:='nazwisko';
     if atrybut='DATA URODZENIA' then wartosc:='DATA_UR';
     if atrybut='ADRES' then wartosc:='ADRES';
     if atrybut='TELEFON' then wartosc:='TELEFON';

with IBQuery1, SQL do begin
    Close;
    Clear;
    Add('SELECT * FROM Book ORDER BY '+wartosc+';');
    Open;
end;
end;

i starałem się przerobić to na swoje potrzemy. Przede wszystkim co to jest za komponent IBQuery ja nie mam takiego używam Delphi 5. Ale próbowałem dalej

Wrzuciłem kod

var
     atrybut, wartosc: string;
begin
     atrybut:=Column.Title.Caption;
     if atrybut='NAZWISKO' then wartosc:='NAZWISKO';

with Query1, SQL do begin
    Close;
    Clear;
    Add('SELECT * FROM temp ORDER BY '+wartosc+';');  //temp to tabela z którą jest połączony Table1 
    Open;
end;
end;

do obsługi zdarzenia DBGrid > OnTitleClick. Program się uruchamia ale przy próbie sortowania wyrzuca jakiś błąd

Project Uruchom.exe raised exception class EDBEngineError with message 'Invalid use of keyword.
Token:BY
Line number: 1'.Process stopped .Use Step or Run to continue.

może ktoś znajdzie błąd co robię źle??

z góry dzięki

acha przy próbie wpisania zapytania SQLowego do Query1.SQL
"SELECT * FROM temp ORDER BY Nazwisko ;" i zmianie parametru Active z False na True też wywala jakiś błąd

Pozostało 580 znaków

2010-01-10 14:14

Rejestracja: 16 lat temu

Ostatnio: 7 lat temu

0
  1. jakiś błąd to nie jest konkret.
  2. jak masz to wszystko połączone
  3. po co tam jest ttable

- Ciemna druga strona jest.
- Nie marudź Yoda, tylko jedz tego tosta.
Google NIE GRYZIE!
Pomogłem - kliknij

Pozostało 580 znaków

klimba
2010-01-10 16:02
klimba
0

odp 1. w parametrze SQL dla Query1 mam wpisane

SELECT * FROM temp ORDER BY 'Nazwisko';

a błąd wyświetla mi się taki:

Unexpekted end of command.
Token
Line number 1.

Odp 2.
Jak mam to wszystko połączone........hmmmmmmmmmm
na formularzu mam obiekt TTable o nazwie Table1 który wskazuje na tabele temp
TDataSource wiadomo połączone z TTable
A TTable jest po to żebym w TDBGrid widział rekordy z tabeli w której mam rekordy (Table1)
TQuery (Query1) wrzuciłem po to żeby sortować TDBGrida i nie wiem jak wykorzystać ten obiekt Query ?

Odp 3.

TTable jest po to żebym widział w TDBGridzie rekordy. I klikając w tytuł kolumny w TDBGridzie sortował tą kolumnę.

Pozostało 580 znaków

klimba
2010-01-10 16:12
klimba
0

Witam!

Już wszystko wiem :) a dowiedziałem się stąd
http://www.issi.uz.zgora.pl/stpd/pomoce/bazy_danych_lab6.pdf
polecam i miłej lektury

Pozostało 580 znaków

klimba
2010-01-10 16:23
klimba
0

I rzeczywiście TTable jest niepotrzebne :)

Pozostało 580 znaków

2010-01-13 14:14

Rejestracja: 14 lat temu

Ostatnio: 1 rok temu

0

Drobna uwaga - to znaczy nei wiem jak jest w IBQuery, ale wiekszosc DataSetów automatycznie zamyka źródło danych jeżeli dasz Clear wiec pisanie Close, a pozniej Clear jest moim zdaniem bez sensu (chyba, że IB rzeczywiście wymaga takiej sekwencji operatji to zwracam honor).

Poza tym ... walenie pełnego zapytania SELECT * FROm tabela tylko dla posortowania elementów ... to przepraszam, ale jest to fuszerka.

Spróbuj odpalić ten soft po wolnym łączu, nawal do tej tabeli np. milion rekordów i posadź przed tym zwykłego użytkownika - gwarantuje ci, że po 5 minutach dostaniesz monitorem w głowe ;)

Lepiej poszukaj komponentu Gridowego (jest ich masa), który robi sortowanie DataSeta po stronie klienta.

Poza tym. Nie da sie do jednego Grida podpiac dwoch DataSetów - zamien TTable na TQuery - to przynajmniej jako tako będzie ci to działać (w sensie wypierdziel TTable i używaj tylko TQuery). Zreszta - Ja w swoich programach stosuję tylko TQuery lub podobne innych dostawców (TMyQuery czy TZQuery) - TTable jest wygodne średnio.

Pozostało 580 znaków

Odpowiedz

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