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

Autoincrement polja nakon pražnjenja tabele nisu na nuli

[es] :: Pascal / Delphi / Kylix :: Autoincrement polja nakon pražnjenja tabele nisu na nuli

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

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

chips
Blazin Srdjan

Član broj: 14803
Poruke: 342
212.200.78.*



Profil

icon Autoincrement polja nakon pražnjenja tabele nisu na nuli11.06.2006. u 01:55 - pre 216 meseci
Nakon pražnjena tabele koja ima jedno polje AUTOINCREMENT i kada pokrenem aplikaciju i ponovo započnem unos u tu tabelu polje neodbrojava od 1 već od zadnjeg broja sloga koji je bio unet pre pražnjenja. Tabela je PARADOX 7 i praznio sam je sa Database Desktop 7.

Ako iz Database Desktop 7. nemože da se resetuje na 0, kako bi se uradilo iz koda?
Sto puta sam ti SRPSKI rekao:
ono što jednom crack-uješ,
ne možeš više da patch-uješ!
 
Odgovor na temu

Nemanja Avramović
Engineering Manager
MENU Technologies
Beograd, Srbija

Član broj: 32202
Poruke: 4391
195.252.99.*

Sajt: https://avramovic.info


+46 Profil

icon Re: Autoincrement polja nakon pražnjenja tabele nisu na nuli11.06.2006. u 10:02 - pre 216 meseci
Meni se to dešavalo na nekom čudnom hostingu sa MySQL tabelom (truncate table nije resetovao autoincrement polje) pa je jedino pomoglo drop table i ponovo create table... :|
Laravel Srbija.

[NE PRUŽAM PODRŠKU ZA PHP PREKO PRIVATNIH PORUKA!]
 
Odgovor na temu

Srki_82
Srdjan Tot
Me @ My Home
Ljubljana

Član broj: 28226
Poruke: 1403
82.208.201.*

ICQ: 246436949


+10 Profil

icon Re: Autoincrement polja nakon pražnjenja tabele nisu na nuli11.06.2006. u 11:56 - pre 216 meseci
Tako radi engine za bazu... koliko znam i Access i MySQL i SQLite i InterBase rade tako.
Za sta koristis to AUTOINC polje... ako je to neki identifikacioni broj onda nema veze da li pocinje od 1 ili od 45.
 
Odgovor na temu

Bojan Kopanja
Bojan Kopanja
Senior Web Developer, ZeusSoftware
Stara Pazova

Član broj: 6155
Poruke: 507
80.93.238.*

ICQ: 346697685
Sajt: www.zeussoftware.rs


Profil

icon Re: Autoincrement polja nakon pražnjenja tabele nisu na nuli11.06.2006. u 12:51 - pre 216 meseci
Upravo tako... Ako obrises sve iz neke tabele nece se nulirati vrednosti AutoInc polja vec ce nastaviti tamo gde su stala, a upravo zato je JaHvram-u radilo onako kako je napisao posto se tada tabela ponovo kreirala i u tom slucaju se sve AutoInc vrednosti se nuliraju...

U svakom slucaju ako ti je to neko identifikaciono polje kao sto Srki rece ne sekiraj se, nije uopste bitno sto ne krece od 0, ali ako ti je to neko polje tipa sifra nekog artikla ili CD-a ili sl. pa si mislio da ti pri svakom novom dodavanju da sledeci broj to neces moci da resis bas tako vec uzmi obicne Integer vrednosti za to polje, sortiraj tabelu po tom polju idi na pocetak ili kraj tabele ( u zavisnosti da li si sortirao ASC ili DESC ) i pogledaj koji ti sledeci broj treba... Jedina provera u ovom slucaju je da ako ti je ADOQTable.RecordCount = 0 ili ADOQuery.RecordCount = 0 ili koje vec komponente koristis ( valjda BDE posto je PARADOX ) sledeci broj treba da ti bude 1 .
 
Odgovor na temu

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

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



Profil

icon Re: Autoincrement polja nakon pražnjenja tabele nisu na nuli11.06.2006. u 13:19 - pre 216 meseci
Pozdrav,

možeš na DBGrid-u, dodati kolonu koja će prikazati broj redova u DBGrid-u. Event DBGridPeopleDrawColumnCell, odnosno prvo moraš dodati kolonu u samom DBGrid-u, postaviti, recimo, Caption na No. Kod:
Code:

if DataSource1.DataSet.RecNo > 0 then
 begin
  if Column.Title.Caption = 'No' then
     DBGridPeople.Canvas.TextOut(Rect.Left + 2, Rect.Top, IntToStr(DataSource1.DataSet.RecNo));
  end

Na taj način u koloni No se broje redovi u DBGrid-u, bilo da se obriše podatak ili doda, redosled je propraćen sa adekvatnom vrednošću u koloni No.
Naravno, ovo ne utiče na polje sa vrednošću AUTOINCREMENT u tabeli. Ovo bi mogao primeniti u situaciji kad podatke iz te tabele filtriraš ili spajaš s nekom drugom tabelom na osnovu neke druge kolone iz tabele, ako želiš da se vidi i broj redova po "redu".
Someone's sitting in the shade today because someone planted a tree a long time ago.
 
Odgovor na temu

delalt

Član broj: 68360
Poruke: 198
*.teol.net.



Profil

icon Re: Autoincrement polja nakon pražnjenja tabele nisu na nuli11.06.2006. u 13:48 - pre 216 meseci
Citat:
chips: Nakon pražnjena tabele koja ima jedno polje AUTOINCREMENT i kada pokrenem aplikaciju i ponovo započnem unos u tu tabelu polje neodbrojava od 1 već od zadnjeg broja sloga koji je bio unet pre pražnjenja. Tabela je PARADOX 7 i praznio sam je sa Database Desktop 7.

Ako iz Database Desktop 7. nemože da se resetuje na 0, kako bi se uradilo iz koda?

Kad već koristiš Database Desktop, probaj da pretvoriš to polje u tip Integer ili ako možeš,
potpuno ga obriši, pa napravi restructure i sačuvaj tako.
Zatim ponovo vratiš na autoincrement ili ga ponovo definiši (ako je obrisano), pa opet restructure i
sačuvaj. Ovo sve naravno poslije pražnjenja tabele.
 
Odgovor na temu

chips
Blazin Srdjan

Član broj: 14803
Poruke: 342
212.200.78.*



Profil

icon Re: Autoincrement polja nakon pražnjenja tabele nisu na nuli11.06.2006. u 14:40 - pre 216 meseci
Negde na ovom forumu sam našao nesto ovako:

ALERT TABLE tabla AUTO_INCREMENT=100

Kako ovo može da se primeni? Nakon pražnjenja tabele.
Sto puta sam ti SRPSKI rekao:
ono što jednom crack-uješ,
ne možeš više da patch-uješ!
 
Odgovor na temu

_v!rus_
BGD

Član broj: 40451
Poruke: 313
*.zaslon-telecom.si.



+1 Profil

icon Re: Autoincrement polja nakon pražnjenja tabele nisu na nuli14.06.2006. u 12:45 - pre 216 meseci
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.


 
Odgovor na temu

Bojan Kopanja
Bojan Kopanja
Senior Web Developer, ZeusSoftware
Stara Pazova

Član broj: 6155
Poruke: 507
80.93.238.*

ICQ: 346697685
Sajt: www.zeussoftware.rs


Profil

icon Re: Autoincrement polja nakon pražnjenja tabele nisu na nuli14.06.2006. u 13:20 - pre 216 meseci
@ _v!rus_

Znam da je to lose resenje i ni ja ga u sustini nikada ne koristim, ali to sam naveo samo kao mogucnost za pocetak dok covek ne dodje do neceg slozenijeg tipa ovog koda koji si ti naveo . U sustini za neki program tipa vodjenje CD Kluba i sl. nista vise od onoga RecordCount+1 ne treba posto je tu najcesce samo jedna instanca programa pokrenuta ( sto se da lepo i zastititi da bude uvek slucaj ), baza je u lokalu i najcesce je samo taj jedan korisnik azurira, tako da nema potrebe za nekim dodatnim proverama i sl. A i u onom primeru nisam ni uzimao RecordCount+1 za sledeci broj vec sam samo gledao da li je RecordCount = 0 da bih znao ako jeste da je sledeci broj 1, a ako nije sledeci broj je poslednji broj iz tabele + 1 . Znaci ne fetchujem sve rekorde iz baze nego samo gledam za ono sto meni treba da li je prazno ili ne, cisto kao neka provera, mada nije strasno ni povuci 4-5 hiljada rekorda ako se radi o nekom asortimanu artikala ili sl, mada se to naravno nikako ne preporucuje ...

@ chips

U svakom slucaju ovo sto je _v!rus_ naveo je verovatno najsigurnije resenje ako ti uopste treba to sto mi pretpostavljamo da treba, tako da probaj to da ubacis u svoj program, a ako ce ti program raditi samo u lokalu, sa 1 korisnikom, onda ti ni ovo sto sam ja napisao ne predstavlja nikakav problem.
 
Odgovor na temu

[es] :: Pascal / Delphi / Kylix :: Autoincrement polja nakon pražnjenja tabele nisu na nuli

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

Postavi temu Odgovori

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