[ prginfo @ 13.01.2010. 00:47 ] @
Koristim D2007 i IB.

Hteo bih da napravim odredjeni izvestaj pomocu SQL-a.

Ono sto me zanima, a sto mi normalno radi sa informix bazom je sledece:

Kako, i da li je moguce da pustam nesto tipa

create sequence t start with 1 increament by 1;

select t.nextval rbr, polje1, polje2, polje3 from tabela;

Naravno, u D2007 okuzenju, i ako moze, da li mogu da koristim standardne komponente tipa TIBQuery?
Pitanje je vezano za deo create sequence i select t.nextval, naravno :)

Hvala.
[ dogriz @ 13.01.2010. 06:27 ] @
Ako vrednosti za "sequence t" treba da ti budu sačuvane u bazi, procedura je sledeća - kreiraš sequence (generator) i trigger za tabelu:
Code:
CREATE SEQUENCE GEN_TABELA_ID;

CREATE TRIGGER TABELA_BI FOR TABELA
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
  IF (NEW.T IS NULL) THEN
    NEW.T = GEN_ID(GEN_TABELA_ID,1);
END;


Kad imaš ovo gore, možeš koristiti TIBQuery za dobijanje vrednosti generatora (recimo za insert novog recorda u bazu):
Code:
SELECT GEN_ID(GEN_TABELA_ID, 1) FROM RDB$DATABASE


Ukoliko ti sequence treba samo zbog izveštaja i ne mora da se sačuva u bazi, mnogo je jednostavnije koristiti ClientDataSet i kreirati Calculated polje "RBr", kome ćeš vrednosti dodeljivati npr. ovako:
Code:

procedure TForm1.ClientDataSet1CalcFields(DataSet: TDataSet);
begin
  ClientDataSet1RBr.Value := ClientDataSet1.RecNo;
end;
[ prginfo @ 13.01.2010. 09:46 ] @
Radi, to je to. Hvala.