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

Stavljanje stringova u TStringGrid

[es] :: C/C++ programiranje :: Stavljanje stringova u TStringGrid

[ Pregleda: 2997 | Odgovora: 10 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Mr. Rejn
Deki Karamatijević
Sremčica

Član broj: 2514
Poruke: 515
195.252.126.*



+4 Profil

icon Stavljanje stringova u TStringGrid01.12.2005. u 12:42 - pre 223 meseci
Pravim klijent za baze podataka (u BCB6) u kome uzimam skup rezultata sa:
Code:

std::string fn;
std::string ln;
std::string jc; 
while (st->Fetch()) {
     //uzimam rezultate iz tri kolone:
     st->Get(1, fn);
     st->Get(2, ln);
     st->Get(3, jc);
     }

stavljanje ovoga u petlju:
Code:

std::cout << fn.c_str() << " - " << ln.c_str() << " - " << jc.c_str() << "\n";

prikazuje rezultate "tabelarno",znaci kao listu,na standardnom izlazu (koristim
MSYS terminal u testiranju).Inace upit ima 12 redova u rezultatu.
Pokusaj stavljanja dobijenih redova u mehanizam tipa TStringGrid (ovo sam stavljao i
unutar i van while petlje sa istim rezultatom):
Code:

     StringGrid1->RowCount = st->AffectedRows();//uzimam broj redova u rezult. i dodajem redove Gridu
     StringGrid1->ColCount = st->Columns();//uzimam broj kolona u rezult. i dodajem kolone Gridu

      for (int j=1; j < st->AffectedRows(); j++) { //i su kolone,j redovi (prvi red je fiksiran zbog atributa kolona)
      StringGrid1->Cells [0][j] = fn.c_str();
      StringGrid1->Cells [1][j] = ln.c_str();
      StringGrid1->Cells [2][j] = jc.c_str();
    }

Efekat ovoga je stavljanje pravog broja kolona i redova u Grid i jedan
problem:sadrzaj svih 12 redova je isti-samo prvi red iz skupa rezultata.

Mozda neko zna u cemu gresim?




Ag + Na -> Xe
 
Odgovor na temu

NastyBoy
Bojan Nastic
UK

Član broj: 12041
Poruke: 895
*.dsl.pipex.com.



+4 Profil

icon Re: Stavljanje stringova u TStringGrid01.12.2005. u 13:34 - pre 223 meseci
Koliko vidim, ti imash samo 3 stringa deklarisana i samo njih koristish, naravno da cesh i imati samo 3 stringa u tabeli.

Ovo :
Code:

while (st->Fetch()) {
     //uzimam rezultate iz tri kolone:
     st->Get(1, fn);
     st->Get(2, ln);
     st->Get(3, jc);
     }


... ce ostaviti fn/ln/jc na vrednosti zadnjeg reda iz tabele/upita. Sve shto ti kasnije radish je da u svaki red grid-a upisujesh te tri iste vrednosti, shto ochigledno ne valja.

[Ovu poruku je menjao NastyBoy dana 01.12.2005. u 14:34 GMT+1]
 
Odgovor na temu

leka
Dejan Lekić
senior software engineer, 3Developers
Ltd.
London, UK

Član broj: 234
Poruke: 2534
..31.216.81.gus.vf.siwnet.net.

Sajt: dejan.lekic.org


+2 Profil

icon Re: Stavljanje stringova u TStringGrid01.12.2005. u 15:11 - pre 223 meseci
Mr. Rejn, u svoju for-petlju ubaci linije koje ce osvezavati tri pomenuta stringa sa poljima novog reda iz ulazne tabele... Poslusaj savet NastyBoy-a, ali ti ne treba ta while() petlja koju je on dao u svom primeru. To bi otprilike bilo ovako:
Code:

// uzimam broj redova u rezult. i dodajem redove Gridu
StringGrid1->RowCount = st->AffectedRows();
//uzimam broj kolona u rezult. i dodajem kolone Gridu
StringGrid1->ColCount = st->Columns();

//i su kolone,j redovi (prvi red je fiksiran zbog atributa kolona)
for (int j=1; j < st->AffectedRows(); j++) { 
  st->Get(1, fn);
  st->Get(2, ln);
  st->Get(3, jc);
  StringGrid1->Cells [0][j] = fn.c_str();
  StringGrid1->Cells [1][j] = ln.c_str();
  StringGrid1->Cells [2][j] = jc.c_str();
}


Dejan Lekic
software engineer, MySQL/PgSQL DBA, sysadmin
 
Odgovor na temu

Mr. Rejn
Deki Karamatijević
Sremčica

Član broj: 2514
Poruke: 515
195.252.126.*



+4 Profil

icon Re: Stavljanje stringova u TStringGrid02.12.2005. u 22:49 - pre 223 meseci
Izvinjavam se na kasnjenju-problemi na (ISDN) linijama.
Ovo ne radi,tj. daje isti rezultat.Nisam pametan.
Code:

// uzimam broj redova u rezult. i dodajem redove Gridu
StringGrid1->RowCount = st->AffectedRows();
//uzimam broj kolona u rezult. i dodajem kolone Gridu
StringGrid1->ColCount = st->Columns();

//i su kolone,j redovi (prvi red je fiksiran zbog atributa kolona)
for (int j=1; j < st->AffectedRows(); j++) { 
  st->Get(1, fn);
  st->Get(2, ln);
  st->Get(3, jc);
  StringGrid1->Cells [0][j] = fn.c_str();
  StringGrid1->Cells [1][j] = ln.c_str();
  StringGrid1->Cells [2][j] = jc.c_str();
}

Ag + Na -> Xe
 
Odgovor na temu

NastyBoy
Bojan Nastic
UK

Član broj: 12041
Poruke: 895
*.plus.com.



+4 Profil

icon Re: Stavljanje stringova u TStringGrid02.12.2005. u 23:32 - pre 223 meseci
Izvini, ali ne znam shta je AffectedRows(), i Get()... ne mogu da ih nadjem u Help-u za Builder :\

Just a wild guess : koja ti od ovih funkcija "sheta" po redovima vratjenog upita? Ne vidim nijedan poziv funkciji/chemu-god koji imalo lichi na iterator.

Sa strane gledano, chini mi se da UVEK uzimash samo 3 kolone iz PRVOG reda rezultata, tj. da uopshte nema iteracije kroz redove vracenog rezultata (AffectedRwos() vraca broj, poziva se jednom za celu petlju, a funkciji Get() uvek prosledjujesh konstante 1,2,3... tj. petlja ti samo sheta po TStringGrid-u, dok za pristup rezultatu koristish uvek konstante!)
 
Odgovor na temu

Mr. Rejn
Deki Karamatijević
Sremčica

Član broj: 2514
Poruke: 515
*.bankerinter.net.



+4 Profil

icon Re: Stavljanje stringova u TStringGrid03.12.2005. u 17:11 - pre 222 meseci
AffectedRows() i Get() su interne metode klasa koje koristim za pristup bazi (ovo
su IBPP v2.3 za Firebird/Interbase), ne pripadaju Builder-u.AffectedRows() je int
i vraca broj redova u skupu rezultata,a Get() uzima redove iz objekta st(tatement),
za 1,2,3,n-tu kolonu (iz select prvi, drugi, treci,.. n-ti from...)-znaci 1,2 i 3
se odnose na kolone iz skupa rezultata.


Ag + Na -> Xe
 
Odgovor na temu

NastyBoy
Bojan Nastic
UK

Član broj: 12041
Poruke: 895
*.plus.com.



+4 Profil

icon Re: Stavljanje stringova u TStringGrid03.12.2005. u 17:23 - pre 222 meseci
I see... nazhalost, IBPP strana je sva u haosu shto se tiche dokumentacije, pa ne mogu da proverim sintaksu metoda (a mrzi me da instaliram ovaj API).

Ako je 'st' wrapper za klasichan tabelarni SQL query rezultat, pretpostavljam da mozhesh da vrshish iteracije kroz redove reultata (ne kolone).
Ako st->Get(column, ...) uzima kolonu iz TRENUTNOG reda, i dalje ne vidim u tvom kodu gde se 'st' prebacuje na sledeci red? Tvoja petlja uvek uzima prve tri kolone, ali ne vidim nigde poziv tipa '(*st)++' ili 'st->FetchNextRow()' ili koja se vec sintaksa koristi...

EDIT :

heh... sad tek primetih prvi post i metodu "fetch()" ... Probaj da koristish lokalne varijable tipa "AnsiString" u 'while' petlji. TStringGrid bi trebao da kopira sadrzhaj AnsiString-a koji si dobio iz tabele u interni AnsiString za odgovarajuci cell i TStringGrid-u.

[Ovu poruku je menjao NastyBoy dana 03.12.2005. u 18:24 GMT+1]

[Ovu poruku je menjao NastyBoy dana 03.12.2005. u 18:28 GMT+1]
 
Odgovor na temu

Mr. Rejn
Deki Karamatijević
Sremčica

Član broj: 2514
Poruke: 515
*.bankerinter.net.



+4 Profil

icon Re: Stavljanje stringova u TStringGrid03.12.2005. u 22:27 - pre 222 meseci
Najvise me zbunjuje cinjenica da standardni izlaz daje listu rezultata onako
kako bi ona trebala da "izgleda" u tabeli:
Code:

std::string fn;
std::string ln;
std::string jc; 
while (st->Fetch()) {
     //uzimam rezultate iz tri kolone:
     st->Get(1, fn);
     st->Get(2, ln);
     st->Get(3, jc);
std::cout << fn.c_str() << " - " << ln.c_str() << " - " << jc.c_str() << "\n";
}

Vec par dana se nalazim u nekoj vrsti logicke blokade zbog ovoga :)
Ag + Na -> Xe
 
Odgovor na temu

NastyBoy
Bojan Nastic
UK

Član broj: 12041
Poruke: 895
*.plus.com.



+4 Profil

icon Re: Stavljanje stringova u TStringGrid04.12.2005. u 00:15 - pre 222 meseci
Pa zar kombinacija dva postupka ne radi?

Code:

StringGrid1->RowCount = st->AffectedRows();
StringGrid1->ColCount = st->Columns();
int i=0;

while (st->Fetch()) 
{
     //uzimam rezultate iz tri kolone:
     st->Get(1, fn);
     st->Get(2, ln);
     st->Get(3, jc);

    StringGrid1->Cells [0][i] = AnsiString(fn.c_str()); // chisto da izbegnemo implicitnu konverziju
    StringGrid1->Cells [1][i] = AnsiString(ln.c_str());
    StringGrid1->Cells [2][i] = AnsiString(jc.c_str());
    i++;
}
 
Odgovor na temu

Mr. Rejn
Deki Karamatijević
Sremčica

Član broj: 2514
Poruke: 515
*.bankerinter.net.



+4 Profil

icon Re: Stavljanje stringova u TStringGrid05.12.2005. u 10:24 - pre 222 meseci
To daje samo prvi red iz skupa rezultata u prvom redu tabele,za razliku od
onog mog resenja koje je davalo prvi red iz skupa u svim redovima
tabele (tj .StringGrid-a) ;)
Ag + Na -> Xe
 
Odgovor na temu

Mr. Rejn
Deki Karamatijević
Sremčica

Član broj: 2514
Poruke: 515
*.bankerinter.net.



+4 Profil

icon Re: Stavljanje stringova u TStringGrid06.12.2005. u 17:47 - pre 222 meseci
Evo resenja :o
Treba DVA puta upotrebiti metodu Fetch(): jednom radi postavljenja
redova i kolona (jer st->AffectedRows() i st->Columns() ne mogu da se
pozovu pre st->Fetch()) i drugi put za iteraciju UNUTAR 'for' petlje:
Code:

st->Fetch();
//int j = 0;
StringGrid1->RowCount = st->AffectedRows();
StringGrid1->ColCount = st->Columns();
//i su kolone,j redovi (prvi red je fiksiran zbog atributa kolona)
for (int j=1; j < st->AffectedRows(); j++) {
  st->Fetch();
  st->Get(1, fn);
  st->Get(2, ln);
  st->Get(3, jc);
  StringGrid1->Cells [0][j] = fn.c_str();
  StringGrid1->Cells [1][j] = ln.c_str();
  StringGrid1->Cells [2][j] = jc.c_str();
 }

Ag + Na -> Xe
 
Odgovor na temu

[es] :: C/C++ programiranje :: Stavljanje stringova u TStringGrid

[ Pregleda: 2997 | Odgovora: 10 ] > FB > Twit

Postavi temu Odgovori

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