TRUNCATE TABLE radi čišćenje tabele i reset autoinc-a na 1 (ne na 0).
Ako već imaš "žive podatke" i ne radi ti se truncate, možeš da primeniš sledeći quick-hack na rođenom-ti-programu:
Na pocetku programa uradis "SELECT Min(MojePolje) FROM MojaTabela", zatim <MinID := Qr.Fields[0].AsInteger - 1> gde je MinID globalna promenjiva u datamodulu ili formi. Onda napravis calc. polje i u OnCalcFields event stavis <MojeIDPolje.AsInteger := MojaTabela.FieldByName('IDPolje').AsInteger - MinID> . I to je to. Za prikaz podataka koristis MojeIDPolje, a za sve ispod haube normalno koristis "pravo" IDPolje. Čak možeš i da koristiš Dataset.Tag umesto MinID.
Ako ti treba "veštačko" autoinc polje mogao bi i da upotrebiš sledeći SQL kod samo za upis novih recorda:
Code:
BEGIN TRANSACTION;
DECLARE @Broj AS INTEGER;
SELECT @Broj = MAX(ID) FROM Tabela WITH (UPDLOCK);
IF @Broj IS NULL SET @Broj = 1 ELSE SET @Broj = @Broj + 1;
INSERT INTO Tabela (ID, Polje1, Polje2, Polje3)
VALUES (@Broj, :V1, :V2, :V3);
COMMIT TRANSACTION;
Ubacis ovo u ADOQuery.SQL.Text, pozoves ParseParams, sa ParamByName('V1') := .... postavis vrednosti polja i pozoves ADOQuery.Execute. Nikada se neće ponoviti dve vrednosti za ID, radi posao za tako specijalan slučaj.
@loshmiscg
Ima sto puta boljih nacina za rbr. recorda od OwnerDrawing-a dbgrida, npr. novo calc. polje koje vraca dataset.RecNo (Delphi way), zatim 'SELECT COUNT(*), * .....' (SQL way) koji vraća sva polja plus rbr. U oba slučaja ne moraš ručno crtati grid nego imaš pravi TField gde piše rbr.
@Strog
To sa RecordCount+1 je upotrebljivo samo u slučaju da:
-da u bazu upisuje isključivo tvoj program (prilično čest slučaj)
-da je samo jedna instanca pokrenuta (manje čest slučaj nego što zvuči, pogotovu kada babe šalteruše rade u programu)
-da je baza tj. program ne radi u mreži (kod baza redak slučaj)
-da su SVI recordi fetchovani iz tabele (jaaaaako redak slučaj), da bi dobio pravi recCount moras povući sve recorde iz tabele. Pa i onda za to vreme je mozda neko drugi nešto dodao ili oduzeo iz tabele.
Znači slabo upotrebljivo i nepouzdano (rupe i ponavljanja vrednosti), bolje koristi onaj SQL gore. Ja sam se jednom zayebao tako pa sam 5 dana radio besplatno samo da popravim.