> Hocu da napravim autoincrement polje za tabelu kupci koje ce da se formira pozivanjem stored procedure uz
> pomoc dbExpress komponentu SqlStoreProc !
> Ali posto moj "mentor"nezeli da mi kaze kako ali je rekao da moram pomocu stored proc to da uradim ne
> znam kako da pokrenem dbExpress komponentu SqlStoreProc za moj slucaj...
Ako mora iz DBExpress komponente da se sazna ID onda ti trebaju dva kverija, prvi da dobiješ naredni ID, i drugi da insertuješ novi slog sa datim IDom.
Nisam koristio DBExpress pa ćeš za ta dva kverija morati sam da se snađeš (jedan već imaš, samo ti treba i selektovanje vrednosti iz procedure).
Ako DBExpress nije obavezan a tražiš nešto slično autoincrement polju onda ti je rešenje sa triggerom najbolje, u insert kveriju izostaviš ID polje i onda se trigger pobrine da dobije vrednost.
Code:
U odnosu na tvoju proceduru dodato je SUSPEND jer je to neophodno ako procedura vraca neke vrednosti.
CREATE PROCEDURE ID_GENERATE
RETURNS (
RES INTEGER)
AS
BEGIN
RES = GEN_ID(PERA, 1);
SUSPEND;
END
U triggeru:
if (NEW.ID is NULL) then
EXECUTE PROCEDURE ID_GENERATE RETURNING_VALUES NEW.ID;
Ako upotreba stored procedure nije obavezna onda sve to možeš zameniti sa direktnim pozivom GEN_ID kako je pokazano u prethodnim porukama.
> Evo ovaj kod pravi autoincrement za imenovane konekcije
> sql := ' insert into kupci(id,sifra,naziv,opis) values ( '+QuotedStr(EditID.Text)+', ' + QuotedStr(EditSifra.Text) ....
Ne znam zašto si uporan sa ovakvim načinom rada, dobio si primer kako treba da se radi. Moraš odlučiti da li korisnik unosi ID (preko EditID kontrole) ili se to radi automatski kako i treba da bude.
> A sta bi trebalo da se promeni u njemu da bi mogao da se izvrsi i za neimenovane konekcije jer favorizuje se ini.
Nejasno pitanje, razjasni.
> Opet mi pokazuje gresku ' Incorrect values within SQLDA structure'? i posle f8 dva puta unese kupca!
> Ne razumem sta se to desava?
Tu si naveo dva kverija, jedan za insert drugi za izvršavanje procedure, ovako ne može da ti se pomogne moraš shvatiti da ovako nepreciznim pisanjem nigde ne dospevamo, mi ne možemo da ti pomognemo a ti ne možeš da rešiš problem. Zamolio bih te da pročitaš linkove koje se mogu naći u mom potpisu (kako postavljati pitanja).
> Posto aplikacija omogucava i brisanje kada izvrsim brisanje generator ostaje na prethodnoj vrednosti kako ovaj problem da resim?
> Treba mi neka procedura za smanjenje generatora?
Pozoveš generator sa -1, Npr: GEN_ID(NAZIV, -1);
Inače nikako ti ne bih preporučio da to radiš, ID brojevi ne smeju da imaju nikakvo značenje za korisnika (ako ti treba broj za korisnika uvedi novo polje) pa samim tim vođenje računa o neprekinutom nizu nema smisla. Dakle, sasvim je normalno da IDevi u tabeli budu 1, 2, 5, 100.