ahoj,
narazil jsem na problémek při editaci číselníků v DB pomocí Query.
Mám tabulku-číselník výrobních linek, když se pokusím smazat výrobní linku která nemá nikam vazbu/není nikde jinde použita, pomocí TADOQuery SQL.text = 'DELETE FROM Linky Where ID= ' + strLinkaID
a sleduji stav Tabulky pomocí SQLManageru, tak to ten záznam smaže, ALE v okamžiku, kdy ukončím aplikaci se mi tam vrátí.
U nově přidaného a pak smazaného se mi to nestává.
Přemýslel jsem o tom včera celé odpoledne, jediné co mě napadlo, bylo, že to blokuje aktivní dataset nad danou tabulkou někde jinde v programu - mám formulář, kde je ta tabulka propojená do nějakého aktivního datasetu..
napadla mě 3 řešení:
1) deaktivovat všechna stávající propojení na tabulku a po provedení delete je Aktivovat zpět
2) udělat si zvláštní modul s datovými strukturami a poli s daty ve strukturách a jejich obsluhou, kde by program pracoval nad těmito daty a Modul by se staral o veškerou další komunikaci s DB (jen přemýšlím zda to integrovat přímo do DataModulu nebo to dát zvlášť.V Datamodulu mám momentálně hlavně základ DB, jako je připojení kontrola verze struktury kontrola konzistence, vytvoření při neexistenci apod.
3) udělat si v tabulkách sloupeček s indikací delete a mazat při spouštění programu, kdy by ještě neměla být ta propojení na tabulky aktivní.
U 1) bych si musel vysledovat všechna místa, kde se číselníkové tabulky používají a měnit Active, dalo by se jen nevím jak by se to v některých situacích chovalo.
U 2) bych zase musel překopat formuláře s DB componentami na obyč.komponenty a DBgrid na Stringgrid nebo vzhledem, že bez editace číselníků mi to již funguje, tak pokud už bych to předělával takto, tak rovnou místo gridů tam dát VirtualTree.
Mě vychází nejlepší asi ta 3) varianta, ikdyž časem chci, tak jako tak přejít na 2), momentálně mi jde o co nejrychlejší funkcionalitu.
Prosím o radu zda jsem problém detekoval správně a která varianta je lepší nebo zda neexistuje jiné lepší řešení, jako např k tabulce na to delete výhradní přístup, který by deaktivoval aktivní spojení a po skončení je opět obnovil.