Prosímn o radu k delete záznamů v DB – Delphi – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Prosímn o radu k delete záznamů v DB – Delphi – Fórum – Programujte.comProsímn o radu k delete záznamů v DB – Delphi – Fórum – Programujte.com

 

Toto vlákno bylo označeno za vyřešené — příspěvek s řešením.
MilanL+1
Grafoman
30. 6. 2017   #1
-
0
-

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.

Nahlásit jako SPAM
IP: 91.139.9.–
Řešení
MilanL+1
Grafoman
10. 7. 2017   #2
-
0
-
Vyřešeno Nejlepší odpověď

#1 MilanL
Vyřešeno dočasně přes bod 3) označení záznamů.

Trvalé řešení doplním postupně přes Datamodul se strukturovanými poli dat a obsluhou veškeré DB komunikace na 1 místě.

Nahlásit jako SPAM
IP: 91.139.9.–
miHan0
Návštěvník
11. 7. 2017   #3
-
+1
-
Zajímavé
Kit +

#2 MilanL
Já teda nevím, kód jsem neviděl. Ale jestli jsem to pochopil správně, tak mi to spíše přijde jako by jsi necommitnul transakci ve které mažeš daný záznam ...

Nahlásit jako SPAM
IP: 88.146.182.–
MilanL+1
Grafoman
11. 7. 2017   #4
-
0
-

#3 miHan
tím to nebude delete jiné položky mi funguje, jde o to že mi to nejde u položky co mám vázanou v jiném aktivním Datasetu. Jinak jsem to vyřešil, udělal jsem označení a mažu při spuštění programu, kdy ještě nejsou aktivní ostatní subformy, které tu tabulku používají.

Nahlásit jako SPAM
IP: 185.112.167.–
miHan0
Návštěvník
12. 7. 2017   #5
-
0
-

#4 MilanL
To je dost nepraktické, ne? Jednak když se nerestartuje program se nic nesmaže a jednak uživatelé mohou editovat "vymazaný" záznam? Dají se na takový záznam navazovat další záznamy (cizí klíče v rámci DB)?

Nahlásit jako SPAM
IP: 88.146.182.–
12. 7. 2017   #6
-
0
-

Spíš bych se podíval na nastavení těch komponent. Vypadá to, že si do té tabulky "někdo" zapisuje jak se mu zlíbí. Pro potvrzení domněnky bych každému řádku v DB dal ID = autoinkrement int číslo, které vytváří a vkládá DB při vložení řádku.

Dále bych se podíval na obsah tabulky pomocí jiného nástroje, např. řádkového klienta. Některé "zobrazovače" mají někdy až moc inteligence a uživateli pak nutí co si myslí že uživatel chce.

hu

Nahlásit jako SPAM
IP: 195.178.67.–
MilanL+1
Grafoman
12. 7. 2017   #7
-
0
-

#6 hlucheucho
#5 miHan
Kluci dík za rady, ale momentálně dokončuji ten program, samotný program funguje jde jen o editaci číselníků a ta nebude až tak častá.

Jinak na vázané záznamy mám kontroly - mazání se neprovede a záznamy k vymazání mám v editoru barevně odlišené a zablokované, jediné co tam s nimi jde dělat je zrušit to označené pokud ještě nejsou smazané. Uvažuji i o tom, že je ani mazat nebudu jen nechám to označení a v SQL budu filtrovat.

Až mi ten program bude fungovat komplet - dodělávám ten editor číselníků, tak musím ještě doladit reporty, no  a pak bude čas na refactoring v rámci kterého si předělám tu práci s DB.

Teď s DB pracuji všude možně, mám Datamodul na základní připojení DB, kde mám též vytvoření nové pokud neexistuje (definice v XML souboru strukturu mám připravenou, aby se DB při změnách v tabulkách dala jednoduchým způsobem i updatovat), ověření konzistence a některé základní objekty jako tabulky, jenže pak mám editační subformy, kde jsou DataSety a DataSource pro danej formulář, a myslím že tam může docházet ke kolizím. Plánuji dát veškerou práci s DB do Datamodulu nevím jestli do stávajícího nebo zda udělám druhý.

Nahlásit jako SPAM
IP: 91.139.9.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 2 hosté

Podobná vlákna

::delete — založil Koudis

Delete [] — založil Robo

DELETE v MySQL — založil Systém

DELETE komponenty — založil otasimek

C++ - BVS - delete — založil tomas

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý