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

Zna li neko sta me zeza

[es] :: Pascal / Delphi / Kylix :: Zna li neko sta me zeza

[ Pregleda: 2045 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Safet Susic
Gorazde BiH

Član broj: 99925
Poruke: 14
*.PPPoE-960.sa.bih.net.ba.



Profil

icon Zna li neko sta me zeza23.09.2006. u 12:45 - pre 214 meseci
Pozdrav svima,
Pokusavam da napravim formu koja ce dodavati nove narudzbe. Koristi se Interbase baza podataka. Kod generisanja forme, zelim da postavim ID narudzbe da generise slijedeci slobodan kljuc i koji korisnik ne bi mogao mijenjati. To sam uradio ovako:

procedure TAddOrderForm.FormCreate(Sender: TObject);
begin
ID_Edit.Text := IntToStr(DataModule1.Orders.RecordCount + 1);
end;

ili ovako

procedure TAddOrderForm.Timer1Timer(Sender: TObject);
begin
ID_Edit.Text := IntToStr(DataModule1.Orders.RecordCount + 1);
end;

Medjutim ovo neradi. Stalno mi prikazuje broj 2 (nekad 1). Uvidio sam kada na istu formu postavim DBGrid koji prikazuje Orders, i postavim svojstvo Visible na True (kada je False nema efekta) onda prethodi dio koda obavlja svoj posao.
Da li neko zna da li se radi o nekom bugu ili sta je vec?
Unaprijed zahvalan na pomoci.
 
Odgovor na temu

Miloš Baić
Miloš Baić
ERP (Dynamics NAV) programer
Beograd

Član broj: 72468
Poruke: 1155
*.dialup.neobee.net.



Profil

icon Re: Zna li neko sta me zeza23.09.2006. u 13:17 - pre 214 meseci
Probaj ovako:
Code:

...
var rb:integer;
begin
   with ADOQuery do begin
     Close;
     SQL.Clear;
     SQL.Add('SELECT TOP 1 Naziv_Kolone FROM Tabela');
     SQL.Add('ORDER BY Naziv_Kolone DESC');
     Open;
     if ADOQuery.RecordCount=0 then
       rb := 1
     else
       rb:= StrToInt(ADOQuery.FieldByName('Naziv_Kolone').AsString)+1;
  end;
    Edit.Text:=IntToStr(rb);
...

Umesto TADOQuery odradi sa komponentama koje si koristio...

Pozdrav.
Someone's sitting in the shade today because someone planted a tree a long time ago.
 
Odgovor na temu

Safet Susic
Gorazde BiH

Član broj: 99925
Poruke: 14
*.PPPoE-960.sa.bih.net.ba.



Profil

icon Re: Zna li neko sta me zeza23.09.2006. u 13:55 - pre 214 meseci
Mislim da me nisi razumio. Meni treba samo broj kolona inkrementiran za 1.Probao sam tvoj kod u ovom obliku ali bezuspjesno:

procedure TDataModule1.IBDatabase1AfterConnect(Sender: TObject);
var
rb:integer;
begin
with Datamodule1.IBQuery do begin
Close;
SQL.Clear;
SQL.Add('SELECT ID_Narudzbe FROM Narudzbe');
Open;
if RecordCount=0 then
rb := 1
else
rb:= RecordCount +1;
end;
AddOrderForm.ID1.Text:=IntToStr(rb);
end;
 
Odgovor na temu

Milos D
Beograd

Član broj: 5621
Poruke: 280
*.adsl.sezampro.yu.



+1 Profil

icon Re: Zna li neko sta me zeza23.09.2006. u 16:00 - pre 214 meseci
Pretpostavljam da Orders dataset u stvari ne zna ukupan broj redova (a ne kolona) sve dok ga ne "skrolujes" ili ne pozoves Orders.Last

To je verovatno zbog optimizacije (sto da se ucita ceo dataset ako ti treba samo jedan red)

Grid-u treba broj redova pa on verovatno pozove .Last i zato ti tada kod radi.

Znaci ili sam pozovi Orders.Last nakon otvaranja tog dataseta ili upotrebi neki Query tipa select count(*) from orders koji ce ti vratiti broj redova.

Naravno, sve ovo ima smisla samo ako nikada ne brises recorde iz orders tabele, i ako je u pitanju softver koji nece raditi na vise racunara istovremeno...
 
Odgovor na temu

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: Zna li neko sta me zeza23.09.2006. u 16:25 - pre 214 meseci
> Pokusavam da napravim formu koja ce dodavati nove narudzbe. Koristi se Interbase baza podataka. Kod generisanja forme, zelim da postavim
> ID narudzbe da generise slijedeci slobodan kljuc i koji korisnik ne bi mogao mijenjati. To sam uradio ovako:

> ID_Edit.Text := IntToStr(DataModule1.Orders.RecordCount + 1);

> Medjutim ovo neradi. Stalno mi prikazuje broj 2 (nekad 1). Uvidio sam kada na istu formu postavim DBGrid koji prikazuje Orders,
> i postavim svojstvo Visible na True (kada je False nema efekta) onda prethodi dio koda obavlja svoj posao.
> Da li neko zna da li se radi o nekom bugu ili sta je vec?

Ne smeš tako raditi, pre ili kasnije će doći do dupliranja ključeva, konflikata ili usporenja. Ako već koristiš IB onda treba da iskoristiš generatore, koji su i napravljeni za tu svrhu. Takođe iz tvog koda imam utisak da koristiš TTable odnosno neku njegovu varijantu, to je takođe loše rešenje, treba da koristiš kveri komponente (za IBX komponente su to TIBDataSet, TIBQuery, TIBSql).
 
Odgovor na temu

Safet Susic
Gorazde BiH

Član broj: 99925
Poruke: 14
*.PPPoE-960.sa.bih.net.ba.



Profil

icon Re: Zna li neko sta me zeza23.09.2006. u 18:40 - pre 214 meseci
Da, Orders dataset u stvari ne zna ukupan broj redova, sve dok se ne skroluje. Nisam probao ovo sa Orders.Last. Vec sam probavao Query tipa select count(*) from orders, ali nema rezultata.

Sto se tice dupliranja kljuceva, zato i radim DataModule1.Orders.RecordCount + 1 svaki put kad se unosi nova narudzba i taj kljuc korisnik ne moze promijeniti.
Generatore nisam koristio, pa cu pogledati. Ne koristim TTable.

Puno vam hvala na savjetima
 
Odgovor na temu

Safet Susic
Gorazde BiH

Član broj: 99925
Poruke: 14
*.PPPoE-960.sa.bih.net.ba.



Profil

icon Re: Zna li neko sta me zeza23.09.2006. u 18:45 - pre 214 meseci
E ljudi radi ovo:

procedure TAddOrderForm.FormShow(Sender: TObject);
begin
Datamodule1.Orders.Last;
ID1.Text := IntToStr(Datamodule1.Orders.RecordCount + 1);
end;

Hvala jos jednom!!!
 
Odgovor na temu

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: Zna li neko sta me zeza23.09.2006. u 21:09 - pre 214 meseci

> Sto se tice dupliranja kljuceva, zato i radim DataModule1.Orders.RecordCount + 1 svaki put kad se unosi nova narudzba i taj
> kljuc korisnik ne moze promijeniti.

Startuj program sa dva računara (ili sa istog) i pokušaj da u oba istovremeno pokreneš unos nove narudžbenice, koje ćeš IDeve dobiti?
 
Odgovor na temu

Safet Susic
Gorazde BiH

Član broj: 99925
Poruke: 14
*.PPPoE-5413.sa.bih.net.ba.



Profil

icon Re: Zna li neko sta me zeza25.09.2006. u 14:18 - pre 214 meseci
Program je planiran da se izvrsava na jednom racunaru, te zbog toga mislim da je ovo rjesenje dovoljno. U svakom slucaju probacu Generatore.
 
Odgovor na temu

[es] :: Pascal / Delphi / Kylix :: Zna li neko sta me zeza

[ Pregleda: 2045 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

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