[ Vladimir Culum @ 13.07.2006. 11:24 ] @
Imam dva problema. Koristim Delphi 2006 i FireBird server sa IB-om.

1. Pokusavam da napravim malu bazu (npr. imenik). Napravio sam formu na kojoj mi je DBGrid, koji je vezan za TIBQuery. Kada hocu da vrsim novi upis, trebao bi da pokrenem generator iz baze da bi mi polje (ID_K) bilo autoincreament i da dodeli novi broj korisniku (npr. da se vezuje uz BeforePost). Polje u tabeli je definisano kao integer. Kako?

2. Kada vrsim novi upis, otvaram novu formu na kojoj su mi polja koja su vezana za tabelu. Pre otvaranja ove forme treba da se pozicioniram na rekord koji je obelezen u DBGridu, koji je vezan za TIBQuery da bi radio ispravku tacnog upisa, a ne da mi izbacuje stalno prvi. U delphiju 6 sam to radio po sledecem principu:

Table1.FindKey ([Query['ID_K']]);
Table1.Edit;

U delphiju 2006 FindKey nije definisan za IB tabele.

Kako ovo da resim?

Unapred se zahvaljujem na pomoci!
[ badam @ 13.07.2006. 12:33 ] @
1.
a) Ako vec pravis generator, mozes da napravis i trigger:

Code:

Create generator TABELA_GEN;

set term ^;

Create trigger TRIG_TABELA for TABELA
before insert AS BEGIN
        NEW.ID_K = GEN_ID(TABELA_GEN, 1);
    END
^


b) Mozes da napravis stored procedure (ili sf) koja ce da unosi novi record u bazu (prvo da proverei koja je najveca vrednost za dato polje u tabeli, pa da stavi +1), a iz programa pozivas sp (sf).

2.
Code:

  Table1.Locate('ID_K', IBQuery1ID_K.Value,[])
[ Vladimir Culum @ 13.07.2006. 12:53 ] @
Bio sam pokusao da napravim query koji trazi najvecu vrednost ID_K u tabeli, pa je uvecava za jedan i dodaje novom upisu, ali mi je pravilo dosta problema (stalno mi je izbacivao isti broj...)
[ badam @ 13.07.2006. 13:03 ] @
Evo koda za 1b
Code:

CREATE PROCEDURE TABELAINSERT (IME Char(30), TELEFON(20))

AS
DECLARE VARIABLE i INTEGER;
BEGIN
   I = SELECT MAX(ID_K) FROM TABELA;
   INSERT INTO TABELA(ID_K, IME, TELEFON) VALUES (I, :IME, :TELEFON);
   SUSPEND;
END
^


Napomena: Nisam trenutno kod kuce, pa ne mogu da proverim kod, a fb, ib nisam koristio par godina, pa nisam ispravan da je tacan. Ako neko zna da nije, neka ispravi.

Pozdrav.