Maska wyświetlania danych z bazy w dbgridzie

Odpowiedz Nowy wątek
2015-01-11 02:25
0

Mam za zadanie stworzenie programu na zajecia. Zawiesilem sie. Podczas dodawania do bazy (firebird) jedna z kolumn jest typu small integer wiec po pobraniu informacji z RadioGroup (indeks) zapisuje go do bazy. Problem jest taki, że przy wyswietlaniu informacji w dbgridzie w tej kolumnie ma wyswietlac sie string odpowiadajacy itemom z radiogroupa.

Na przykładzie - zasilenie tej kolumny w bazie:

SQL_WLAD_D.SQL.Text:='insert into WLADAJACY (NAZWA, TYP_WLADANIA) values (:nazwa4, :typ)';
SQL_WLAD_D.ParamByName('nazwa4').AsString:=Edit5.text;
SQL_WLAD_D.ParamByName('typ').AsInteger:=RadioGroup1.ItemIndex;

Kolejnym indeksom odpowiada 0 - wlasciciel, 1 - wspolwlasciciel, 2 -uzytkownik wieczysty i w takiej postac Stringa ma sie wyswietlic w dbgridzie...

Odpada stworzenie dodatkowej kolumny w bazie - bedzie to traktowane jako powielanie danych.

Napisalem cos takiego:

i:integer;
begin
   for i:=0 to 2 do
   if SQL_WLAD.FieldByName('Typ_Wladania').AsInteger = i then
   SQL_WLAD.FieldByName('Typ').AsString := RadioGroup1.Items[i];
end;

ale nie wiem co z tym kodem zrobic zeby moj dbgrid zobaczyl 'Typ' jako kolumne do wyboru... <--w ten sposob sie bawilem gdy mialem np kolumny dlugosc, szerokosc a wyswietlalem w dgbridzie pole - korzystalem z SQLQuery zdarzenie OnCalcFields i wszystko tralało... a z tym nie wiem co zrobic.

prosze o pomoc

dodanie znaczników <code class="delphi"> - @furious programming

edytowany 1x, ostatnio: furious programming, 2015-01-11 02:59
Wstawiaj kod w znaczniki kolorujące składnię; Jeśli nie wiesz jak się to robi, zobacz do tego artykułu: Formatowanie treści postów na forum - furious programming 2015-01-11 02:59

Pozostało 580 znaków

2015-01-11 10:19

zastosuj w zapytaniu klauzulę 'CASE'

select typ,
        case 
           when typ=1 then 'tekst1'
           when typ=2 then 'tekst2' 
           when typ=3 then 'tekst3'
           else 'tekst4'
        end as opis
from tabela 
edytowany 1x, ostatnio: grzegorz_so, 2015-01-11 10:27

Pozostało 580 znaków

2015-01-11 12:32
0

Dziękuje bardzo za pomoc - napisałem to tak:

select ID_W, NAZWA, CASE upper(TYP_WLADANIA)
WHEN 0 THEN 'wlasnosc'
WHEN 1 THEN 'wspolwlasnosc'
WHEN 2 THEN 'uzytkowanie wieczyste'
END AS FORMA_WLADANIA
from WLADAJACY

Nie do końca to jednak działa jak chciałem. Musze zassać do programu ID_W - jest mi niezbedne w niektorych działaniach, ale nie chce by wyswietlalo sie w dbgridzie - dlatego definiowalem dbgrida przez atrybut columns. Niestety w atrybucie kolumn prog nie widzi czegos takiego jak 'FORMA_WLADNIA'. Probowalem bez czesc

AS FORMA_WLADANIA

sqlquery realizuje poprawnie zapytania i naspisuje kolumne TYP_WLADANIA - niestety w dbgridzie wyswietla sie tylko NAZWA a kolumna z TYPEM jest pusta...

zamiana znaczników <code class="delphi"> na <code class="sql"> - @furious programming

edytowany 1x, ostatnio: furious programming, 2015-01-11 15:53
Jak podajesz kod SQL, to wrzucaj w znaczniki kolorujące składnię SQL; - furious programming 2015-01-11 15:53

Pozostało 580 znaków

2015-01-11 12:51
0
CASE upper(TYP_WLADANIA)

'TYP_WLADANIA' to char czy int ??

Pozostało 580 znaków

2015-01-11 13:02
0

TYP_WLADANIA - int

Pozostało 580 znaków

2015-01-11 13:06
0

to w jakim celu robisz upper(int) ??
fakt że to i tak pewnie zadziała , ale jest zupełnie bez sensu

Pozostało 580 znaków

2015-01-11 13:11
0

może w polu 'typ_wladania' nie ma żadnej wartości ze zbioru (0,1,2)
spróbuj tak:

select ID_W, NAZWA, CASE TYP_WLADANIA
WHEN 0 THEN 'wlasnosc'
WHEN 1 THEN 'wspolwlasnosc'
WHEN 2 THEN 'uzytkowanie wieczyste'
else 'typ_wladania poza zbiorem  (0,1,2)' 
END AS FORMA_WLADANIA
from WLADAJACY

Pozostało 580 znaków

2015-01-11 13:27
0

Skorzystalem z gotowego kawałka kodu i nie zwróciłem uwagi na te UPPER...

No niestety - w bazie sa tylko wartości 0,1,2 - bo sa tylko takie indexy radiobuttonow...

Pozostało 580 znaków

2015-01-11 13:36
0

pokaż więcej kodu

Pozostało 580 znaków

2015-01-11 13:57
0

Tak wyglada cale zadanie:

http://ti.geomatyka.eu/aj/sdipo/zajecia.pdf

chodzi o zakladke wladajacy...

dodawanie do bazy:

procedure TForm1.Button4Click(Sender: TObject);
begin
    SQL_WLAD_D.SQL.Text:='insert into WLADAJACY (NAZWA, TYP_WLADANIA) values (:nazwa4, :typ)';
    SQL_WLAD_D.ParamByName('nazwa4').AsString:=Edit5.text;
    SQL_WLAD_D.ParamByName('typ').AsInteger:=RadioGroup1.ItemIndex;
    SQL_WLAD_D.ExecSQL;
    SQL_WLAD_D.Close;
    form1.SQLTransaction8.commit;
end;  

wyciaganie z bazy do dbgrida -> tu mamy powyzsze SQLQuery i podpiete pod DBGrida DataSource

jak widac w pdfie - program jest pisany w lazarusie...

Pozostało 580 znaków

2015-01-11 14:07
0

masz problem z odczytem więc pokaz kod czytający a nie zapisujący
w jaki sposób budujesz kolumny w dbgridzie ?

edytowany 1x, ostatnio: grzegorz_so, 2015-01-11 14:08

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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

Robot: CCBot