Avatar billede nca Juniormester
23. september 2011 - 14:26 Der er 13 kommentarer og
1 løsning

DBgrid Ændre 0 til false og 1 til true

Jeg henter nogle værdier ud fra en sql-database og placerer dem i en DBGrid.
Under feltet Client henter den 0 eller 1. Jeg vil gerne have værdierne Ja eller Nej til at stå i stedet for.
Et andet felt giver også 0 eller 1 og her vil jeg gerne have  Avanceret eller Standard til at stå i grid'en.
Er det muligt at oprettet et filter, som kan skifte databaseværdierne ud i grid'en?

mvh.
Niels Christian
Avatar billede martinlind Nybegynder
23. september 2011 - 18:25 #1
hvis du ikke kan ændre dit sql til at lave din convert, kan du loade felterne ind og brige de events der er til at ændre displaytext :-)
Avatar billede kroning Nybegynder
23. september 2011 - 20:15 #2
Du kan også lave Calculated fields i din TTable.
Avatar billede nca Juniormester
24. september 2011 - 16:46 #3
Til Martin
Jeg bestemmer selv min SQL forespørgsel.
Kunne du give et eksempel på en sql sætning der henter en værdi for client og ændrer den til noget andet, før den skrives i DBGrid'en.
Fx. Hvis Client har vædien 1 skal der i DBGrid'en skrives "Advanced"
Avatar billede nca Juniormester
24. september 2011 - 17:50 #4
Tror I denne kode kunne bruges?

Select Name, Client,
  CASE
    WHEN Client = 1 THEN 'ADVANCED'
    WHEN Client = 0 THEN 'STANDARD'
  ELSE
    'N/A'
  END,
COMPUTER, USER
FROM
  Customers
Avatar billede nca Juniormester
26. september 2011 - 09:27 #5
Sådan ser min løsning ud:
Select Name, SiteCode,
CASE
    WHEN IsClient = 1 THEN 'Ja'
    WHEN IsClient = 0 THEN 'Nej'
  ELSE
    'N/A'
  END
IsClient, IsApproved, IsAssigned, ClientType, IsObsolete, IsActive from dbo._RES_COLL_P0100097 ORDER BY "name"
Avatar billede kloge Nybegynder
26. september 2011 - 10:41 #6
Du skal bruge OnGetText/OnSetText til det formål.
Avatar billede nca Juniormester
26. september 2011 - 11:05 #7
Til kloge
Vil du venligst vedlægge et eksempel. Min løsning fungerer fint, men hvis OnGetText/OnSetText er State of the Art, vil jeg da hellere bruge det.
Avatar billede kloge Nybegynder
26. september 2011 - 11:54 #8
procedure TForm1.Table1Field1GetText(Sender: TField; var Text: String; DisplayText: Boolean);
begin
  case Sender.AsInteger of
  0 : Text := 'False';
  1 : Text := 'True';
  end; 
end;
Avatar billede kroning Nybegynder
26. september 2011 - 12:46 #9
Tror nu stadig mest på Calculated fields, så er det adskilt fra de originale fields og du har stadig mulighed for at tilgå de originale fields med værdien 0 eller 1.
Men hvis du ikke bruger TTable har du måske ikke den mulighed.
Avatar billede kloge Nybegynder
26. september 2011 - 13:08 #10
Calculated fields er en udmærket ting, men OnGetText er simpelthen beregnet til det omtalte formål. Man kan stadig tilgå feltet "uoversat" med AsInteger, AsString etc det er kun Text property'en, som går via OnGetText
Avatar billede nca Juniormester
26. september 2011 - 15:29 #11
Jeg har på min form flg. komponenter:
ADOConnection
ADOQuery
Datasource
DBGrid
og kan ikke finde en event OnGetText.
Jeg skal måske lige indføje, at jeg bruger Delphi 7
Har også Delphi 2007, men er aldrig rigtig kommet i gang med at bruge den.
Er DBGrid'en der skal udskiftes om med hvad?
Avatar billede kloge Nybegynder
26. september 2011 - 16:25 #12
Dobbeltklik på adoquery'en, højreklik i vinduet der kommer op, og vælg "Add all fields" Nu kan du sætte properties på felterne
Avatar billede nca Juniormester
27. september 2011 - 10:43 #13
Hej Kloge
Det virker fortræffeligt, men det gjorde min løsning også.
Jeg har ikke nok indblik i Delphi og SQL til at kunne vurdere, hvilken løsning, der kræver færrest resurser.
Jeg arbejder kun med små 10.000 poster, så det er ikke det store problem. Det er mere af nysgerrighed jeg spørger. Så hvis én eller anden kan redegøre for forskellen, ville det være interessant.
Avatar billede martinlind Nybegynder
11. oktober 2011 - 01:49 #14
nca >> er ikke lige så meget på :-)

Men kan se løsningerne er kommet på bordet.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester