Autoincrement w tabeli Paradox 7

0

Zrobiłem sobie w tabelce pole ID typu autoincrement aby sobie zapewnić klucz głowny (ciągłość nie jest mi konieczna więc pomysł wydaje się być dobry).
Przy testowaniu kilkakrotnie wstawiwałem i dodawałem rekordy i w pewnym momencie przy próbie dodania nowego rekordu zaczął pojawiać się błąd "key violation".
Po kilku doświadczeniach doszedłem, że pomaga skasowanie ostatnio dodanego rekordu. Po tej operacji insert się zrobił i dodał i ID z numerem tego rekordu, który skasowałem.

Uznałem, że musiał się posypać jakiś licznik nadający kolejne identyfikatory dla tego pola.

Pytanie:
Czy wiecie gdzie Paradox trzyma tą informację o kolejnej wartości pola autoincrement i czy można się do tego dobrać programowo ?

0

Zrobiłem sobie w tabelce pole ID typu autoincrement aby sobie zapewnić klucz głowny.

No i całkiem sensownie, bo nie musisz się o nic martwić

Przy testowaniu kilkakrotnie dodawałem rekordy i w pewnym momencie przy próbie dodania nowego rekordu zaczął pojawiać się błąd "key violation".

Przed dodaniem nowego rekordu rób Tabela.insert a po dodaniu Tabela.post

Po kilku doświadczeniach doszedłem, że pomaga skasowanie ostatnio dodanego rekordu. Po tej operacji insert się zrobił i dodał i ID z numerem tego rekordu, który skasowałem.

A jesteś pewien, że poprzednią operację zatwierdziłeś? Jeżeli tak to może potrzebne jest też odświeżenie tablicy, ale wg. mnie nie.

Czy wiecie gdzie Paradox trzyma tą informację o kolejnej wartości pola autoincrement i czy można się do tego dobrać programowo ?

Gdzieś w zasobach powiązanych z tabelą.
Programowo dobierasz się jak do każdego innego pola np
nrAutoInc:=TwojaTabelaID.AsInteger;
lub
nrAutoInc:=TwojaTabela.FieldByName('ID').AsInteger;

W drugą stronę przypisania też są poprawne.

Zauważ że element TwojaTabelaID jest typu TAutoIncFiled

ps. jeszcze lepiej używać TQuery lub TQuery wraz z TUpdateSQL. Wtedy masz obsłużone odświeżanie i zagwarantowaną poprawność zapytań SQL-owych.

0

Nie zrozumiałeś do końca posta.
Transakcję zatwierdziłem i wszystko było OK. Insert próbowałem kilka razy zarówno z aplikacji jak i SQL Explorera, to nie to, nie rób ze mnie laika ;-)

Nie interesuje mnie wartość użyta (to jest banalne) tylko jaka będzie użyta przy następnym insercie. Interesuje mnie skąd Paradox wie, że następne ID jakie wstawi to będzie 11 (domyślam się, bo poprzednio wstawił 10, a na pewno nie bierze MAX(ID)+1, bo taki błąd nigdy by nie wystąpił).
Odpowiednikiem tej sytuacji w Oracle jest coś takiego jak sequence, jeżeli coś mi się posypie to zawsze mogę go zrekreować i ustawić aby zaczynał inkrementację od dowolnej wartości.
W Paradoxie musi gdzies to być, tylko nie wiem jak to znaleźć i zmienić.

Pozdrawiam

1 użytkowników online, w tym zalogowanych: 0, gości: 1