Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Wendys
Člen
Avatar
Wendys:21.6.2016 7:27

Zdravím všechny, prosím o radu s tabulkou lokální databáze. Když zadám nová data do databaze , tak sloupec ID píše -1;-2;atd. (narůstá do záporných čísel). Pouze když program ukončím a spustím znovu, tak potom v tabulce už je to zapsané správně (3;4;5;atd.) Sloupec ID identity increment nastaveno 1a seed taky 1. Snad jsem to vyvoslil srozumitelně! Díky za váš čas.

Odpovědět
21.6.2016 7:27
Wokna jsou vopruz!
Avatar
Marian Benčat:30.6.2016 20:02

novější verze EF dávají negativní identity id dokud nedojde k uložení do databáze. je možné tedy, že se ti to uklád někde samo při ukončování.. negativní index u identity u objektů se používá poměrně často, aby jsi věděl, že jde o nově vkládaný objekt.

Nahoru Odpovědět
30.6.2016 20:02
Totalitní admini..
Avatar
Wendys
Člen
Avatar
Odpovídá na Marian Benčat
Wendys:12.7.2016 6:27

Děkuji za odpověď, už jsem myslel, že nikdo nezareaguje. Jde mi o to že, při zadání nového id do tabulky a jeho následného tisku, je místo (např. id145) na listu id-1. A nevěděl jsem, jestli tam mám jenom něco blbě nastavenýho. Ale bude to asi složitější, aby to fungovalo, jak chci. Každopádně děkuji za info!

Nahoru Odpovědět
12.7.2016 6:27
Wokna jsou vopruz!
Avatar
Wendys
Člen
Avatar
Wendys:26.7.2016 8:51

Tak přece nakonec to byl jenom blbě nastavený autoincrement. Nastavoval jsem to jinde, než bylo potřeba. Ale ještě mám jeden problém! Pokud do databáze řádky vkládám, tak ID je o.k. (vždy o jednu větší), ale když poslední řádek vymažu, tak se ID o -1 neodečte a při dalším novým řádku je o jeden větší a místo toho vymazanýho je díra. (1,2,4,5....)

Nahoru Odpovědět
26.7.2016 8:51
Wokna jsou vopruz!
Avatar
Odpovídá na Wendys
Patrik Valkovič:26.7.2016 8:59

Ano, tak databáze pracuje. Na starý id může být nejde odkaz a podobně, proti se nikdy id neopakují.

Nahoru Odpovědět
26.7.2016 8:59
Nikdy neumíme dost na to, abychom se nemohli něco nového naučit.
Avatar
Honza
Člen
Avatar
Odpovídá na Wendys
Honza:26.7.2016 9:01

Pokud je to ID jako primární klíč tak to je v pořádku, ID by se nemělo "recyklovat". Jde totiž o to že v jiné tabulce můžeš mít uloženou nějakou položku s vazbou na ID z té první tabulky (cizí klíč). Pokud bys vymazal záznam např. s ID = 2 a pak tam vložil nějaký úplně jiný záznam zase s ID = 2, vznikla by ti relace se záznamem který ukazoval na tu původní položku před vymazáním a to nedává smysl. Spojily by se ti 2 záznamy které spolu nesouvisejí.

Na SQL serveru to jde nějakým příkazem "setřást" aby tam nebyly ty mezery, ale nevím o nikom že by to v praxi někdo použil. Ty "mezery" jsou standardní a žádoucí chování.

Editováno 26.7.2016 9:02
Nahoru Odpovědět
26.7.2016 9:01
Snadnou cestou se daleko nedostanete, je tam velká tlačenice...
Avatar
Wendys
Člen
Avatar
Odpovídá na Honza
Wendys:5.10.2016 22:53

Po delší době se zase vracím a popíšu můj problém s databází. Chci si zakládat karty s nějakými údaji do databáze. Ty karty mít očíslované posputně od 1 až..... Myslel jsem, že použiji na číslování karet ID autoincrement, ale mám problém, když poslední kartu vymažu, tak nové číslo karty se o jednu nezmenší, ale pokračuje dál a tím vznikne díra v číslech. Takže takhle to asi nepůjde. Prosím vás o radu nebo hození lasa, jak to vyřešit! Díky.

Nahoru Odpovědět
5.10.2016 22:53
Wokna jsou vopruz!
Avatar
Honza
Člen
Avatar
Honza:6.10.2016 7:40

Ahoj, pokud potřebuješ aby číselná posloupnost byla bez mezer, tak to jde řešit několika způsoby. Nepoužívej autoincrement (ten ti tam při vymazání vytvoří ty mezery), ale vytvoř si ještě jeden sloupec, kde si ty hodnoty budeš dopočítávat sám. A pokud se jejich pořadová čísla nemají opakovat, nezapomeň ho označit jako Uniqe (na SQL serveru to najdeš v indexech).
Pořadové číslo si budeš muset počítat sám, ale musíš si dobře nastavit logiku, protože může nastat několik případů (vkládání na konec, odmazání z prostředku a vznik mezer které budeš muset setřást atd.) Obecně to můžeš řešit buď při vkládání např. pomocí přes T-SQL a nebo v tomto případě by bylo možná lepší použití triggerů.

Můžu se ale zeptat proč ti tam tolik vadí ty mezery? Tohle řešení není úplně standardní a zbytečně si to tím celé komplikuješ. Pořadí záznamů v jakém byly do databáze vloženy získáš seřazením podle primárního klíče (nesmíš samozřejmě používat to "setřesení", popř. si můžeš do nějakého sloupečku vkládat datum a čas přidání záznamu a řadit to podle něj) a jedinečnost záznamů je dána zase primárním klíčem (a to že tam jsou mezery je úplně fuk, důležité je že je unikátní).

Nahoru Odpovědět
6.10.2016 7:40
Snadnou cestou se daleko nedostanete, je tam velká tlačenice...
Avatar
Wendys
Člen
Avatar
Odpovídá na Honza
Wendys:6.10.2016 8:45

Děkuji za odpověď a vysvětlím to třeba na příkladu seznamu faktur. V databázi jsou uloženy faktury s pořadovými čísly, které se vždy o jedno zvětší, když uložím novou. A potřebuji, aby se při smazání pouze poslední faktury (nikoli někde z prostředka seznamu), pořadové číslo o jedno zmenšilo, aby při další nové faktuře, nebyla v číslech díra. Možná vám připadá můj problém docela malicherný, ale jsem "rookie" a nikde jsem takový tutoriál o databázi, který by tohle řešil nenašel.

Nahoru Odpovědět
6.10.2016 8:45
Wokna jsou vopruz!
Avatar
Honza
Člen
Avatar
Honza:6.10.2016 8:58

Pokud bude povoleno smazání pouze posledního záznamu, tak by to šlo řešit tak jak jsem popisoval. Nepoužívej autoincrement, ale do nějakého sloupce (pokud možno označeného jako unique) si číslo vkládej sám. Vždycky před vložením nového záznamu si vytáhní poslední číslo (SELECT MAX(poradove_cislo) FROM nazevTabulky) a zvyš si ho o jednu.
Popř. to můžeš řešit pomocí triggerů, ale to by sis musel nastudovat, pokud s tím nemáš zkušenosti.

Nahoru Odpovědět
6.10.2016 8:58
Snadnou cestou se daleko nedostanete, je tam velká tlačenice...
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 10.