Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

ComboBox i podaci

[es] :: Pascal / Delphi / Kylix :: ComboBox i podaci

[ Pregleda: 2948 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

prginfo
NS

Član broj: 174814
Poruke: 133
*.ADSL.neobee.net.



+1 Profil

icon ComboBox i podaci09.11.2009. u 14:11 - pre 175 meseci
Koristim D2007 i InterBase

Na masci punim ComboBox.Items sa Query-jem i sve radi normalno.

Problem je sledeci:

ComboBox punim sa podacima iz 2 kolone iz jedne tabele.
Prvi podatak je tipa integer i on je primary (ID), dok je drugi podatak string

ComboBox se puni na sledeci nacin:

Code:

comboBOX.Items.Clear;
  query.Close;
  query.SQL.Clear;
  query.SQL.Add('select ID, NAZIV from TABELA order by NAZIV');
  query.Prepare;
  query.Open;
  query.First;
   while not query.Eof do
    begin
     comboBOX.Items.Add(query.Fields[0].AsString+'|'+query.Fields[1].AsString);
     query.Next;
    end;
  comboBOX.ItemIndex:=0;

Kakao posle selektovanja Itema iz ComboBoxa, da izdvojim podatak ID. On mi je u ComboBoxu razdvojen sa |

ID je integer i nije uvek iste duzine, tako da mi LeftStr ili ostale string funkcije ne rade dobro. Da li postoji resenje za ovakav problem?

Hvala.

[Ovu poruku je menjao savkic dana 09.11.2009. u 15:40 GMT+1]
 
Odgovor na temu

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: ComboBox i podaci09.11.2009. u 14:47 - pre 175 meseci
> Kakao posle selektovanja Itema iz ComboBoxa, da izdvojim podatak ID. On mi je u ComboBoxu razdvojen sa |
> ID je integer i nije uvek iste duzine, tako da mi LeftStr ili ostale string funkcije ne rade dobro. Da li postoji resenje za ovakav problem?

Skini JCL biblioteku i iskoristi funkciju StrToken. Npr. PrviDeo := StrToken(PunString, '|');

Inače, ako nije neophodno da korisnik vidi ID u listi možeš koristiti Objects svojstvo za čuvanje, npr:

comboBOX.Items.AddObject(query.Fields[0].AsString, Pointer(query.Fields[1].AsInteger));

i kada ti je potreban:

IntegerPromenljiva := Integer(ComboBox.Items.Objects[0]);
 
Odgovor na temu

priki

Član broj: 24732
Poruke: 700
*.datalab.si.

ICQ: 174153511


+26 Profil

icon Re: ComboBox i podaci09.11.2009. u 14:48 - pre 175 meseci
Ti itemsi su koliko znam string lista
probaj da deklarises neki record tipa

Code:

  type  
    TComboItems = record
      pId: Integer;
      pNaziv: String;
    end;
    PComboItems  = ^TComboItems 


pa da ga kasnije kreiras stavljas u tu string listu kao objekat

Code:

var
  test: PComboItems;  
begin  
  while not query.Eof do begin
    New(test);
    test^.pId := query.Fields[0].AsString;   //  bilo bi lepo kad bi koristio FieldByName umesto Fields[...]
    test^.pNaziv := query.Fields[1].AsString;
    comboBOX.Items.AddObject(query.Fields[1].AsString, TObject(test));
    query.Next;
  end;
end;


pazi kod oslobadjanje memorije, svaki pointer moras rucno osloboditi pre punjenja i na kraju

mozda ima neko i jednostavnije resenje......


[Ovu poruku je menjao priki dana 09.11.2009. u 16:00 GMT+1]
 
Odgovor na temu

.:Marvin:.
Taurunum

Član broj: 36626
Poruke: 94
91.143.212.*



Profil

icon Re: ComboBox i podaci09.11.2009. u 14:50 - pre 175 meseci
F-jom POS nadjes poziciju znaka | u tvom stringu, a zatim pomocu Copy izdvojis sve pre tog znaka. Procitaj u helpu sta rede pos i copy pa se javi ako nije jasno.

Pozdrav
 
Odgovor na temu

prginfo
NS

Član broj: 174814
Poruke: 133
*.ADSL.neobee.net.



+1 Profil

icon Re: ComboBox i podaci09.11.2009. u 15:07 - pre 175 meseci
Procitao sam za POS i COPY i mislim da ce to biti resenje.

Kada isprobam javicu da li je to OK.

Hvala.
 
Odgovor na temu

prginfo
NS

Član broj: 174814
Poruke: 133
*.adsl.neobee.net.



+1 Profil

icon Re: ComboBox i podaci09.11.2009. u 22:48 - pre 175 meseci
Sa funkcijama POS i COPY sve radi kako sam zamislio.

prvo sam ComboBox.Text prebacio u varijablu tipa String.
odredio sam poziciju znaka '|' i to dodelio varijabli tipa Integer.
na kraju sam uradio COPY

ID:=COPY(comboBox.Text,1,pozicija-1);

sve radi normalno.

Jos jednom hvala, naucio sam nesto novo, a nadam se i jos neko.
 
Odgovor na temu

.:Marvin:.
Taurunum

Član broj: 36626
Poruke: 94
91.143.212.*



Profil

icon Re: ComboBox i podaci10.11.2009. u 08:22 - pre 175 meseci
E bas mi je drago da si se snasao. Licno mislim da je ovakav pristup najbolji, gde ti neko da 'hint' gde da gledas i sta da trazis, a ti onda malo proanaliziras helpove, mogucnosti koje ti se nude, i pritom dosta naucis. Samo napred!
 
Odgovor na temu

rambo
Dejan Petković
Beograd

Član broj: 6095
Poruke: 190
*.dynamic.sbb.rs.



+6 Profil

icon Re: ComboBox i podaci10.11.2009. u 21:41 - pre 175 meseci
Items.Objects je mnogo bolje rešenje jer za svaki Item može da se veže pointer na bilo šta što ti treba za taj item. Jednostavno castovanje radi posao za Integer, a za sve ostalo, Savkićev primer je idealno rešenje.

Druga stvar, nije dobro da u ComboBox prikazuješ ID (naročito ne ako je varijabilne dužine) ukoliko to korisniku nije bitno. Pravilo je da korisnik nikada ne treba da radi sa ID-jevima već samo sa podacima koji njemu znače. Prikaz ID-ja je opcioni i obično se vidi samo na formama koje služe za unos/izmenu/pregled kompletnih podataka. Suština korišćenja baza podataka sa aspekta običnih korisnika je da im olakša posao, a ne da ga komplikuje. ID je podatak koji je bitan za sistem a ne za korisnika. Ako je ID Integer tipa, onda ga ne treba prikazivati ili koristiti za normalan rad. Ako je String tipa, onda se obično koristi u radu i prikazuje.
"There is a theory which states that if ever anybody discovers exactly what the
Universe is for and why it is here, it will instantly disappear and be replaced by
something even more bizarre and inexplicable. There is another theory which states
that this has already happened."
-- Douglas Adams
 
Odgovor na temu

[es] :: Pascal / Delphi / Kylix :: ComboBox i podaci

[ Pregleda: 2948 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.