Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno Ms Access XP - aktualizace dat ve formuláři

Zdravím,
potřebuji poradit s MS Access XP.
Mám formulář se sadou záznamů z tabulky (Projekty) a v něm podformulář se stejnou sadou záznamů.
Při změně věty v nadřazeném formuláři se změní věta v podřazeném formuláři.

V podformuláři mám ovladač karta na kterém je umístěn ovladač seznam.
Seznam má jako zdroj záznamů dotaz který vybere podle ID Projektu všechny objednávky z tabulky (Objednavky).
Při změně věty v nadřazeném formuláři se změní sice věta v podřazeném formuláři ale už ne data v seznamu.

Nevím si rady jak s automatickou aktualizací dat v tom seznamu, zatím to řeším tak že mám v podformuláři na té kartě vedle seznamu tlačítko "aktualizovat"
které provede tohle : DoCmd.DoMenuItem acFormBar, acRecordsMenu, 5, , acMenuVer70

To se mi ale nelíbí. Samozřejmě že by pomohlo seznam přemístit na nadřazený formulář ale to z ergonomického hlediska prostě nemůžu.

Potřeboval bych z nadřazeného formuláře sputit nějaké makro které by mi aktualizovalo data přímo v tom seznamu v podformuláři, ale to se mi prostě nedaří.
Pokud je část toho kódu co jsem psal jinde než na té kartě s tím seznamem tak se to prostě neaktualizuje.
Nevíte jak na to ?

**********************************
Nikdo nic ? Přiložil jsem i soubor kde je to vidět. U projektu č2 by se měla zobrazit objednávka, ale zobrazí se jen při stisku tlačítka "aktualizovat".

Jsou zobrazeny jen nové odpovědi. Zobrazit všechny
Předmět Autor Datum
Stejně nechápu účel (zadávací nebo zobrazovací formy ?, karty ?), určitě by to šlo řešit jednoduše.…
uri 31.05.2010 21:54
uri
ááá funguje, děkuju moc, vyřešeno. nový
Palevel 01.06.2010 14:51
Palevel
je to zbytečně složité (tak by to zaznamenal nahrávač maker:-)), ale když to funguje.. :-) nový
touchwood 01.06.2010 17:49
touchwood
Já bych provedl propojení formů v db úplně jinak. Ale protože tazatel pouze chtěl u svého db-výtvoru… nový
uri 01.06.2010 19:29
uri
mně to připadne složité, protože refresh se dá volat rovnou na ten daný ovládací prvek, stačí jít př… nový
touchwood 01.06.2010 21:14
touchwood
Vážený Touchwoode, píšu trošku opožděně, zase jsem se dostal ke svému starému problému s aktualizac… nový
Palevel 27.11.2012 12:53
Palevel
Podle mě řešíš problém na špatném místě. Refresh podformuláře musíš spouštět na ovládacím prvku (po… nový
touchwood 27.11.2012 13:11
touchwood
Dík za bleskovou odpověď. Jdu se v tom povrtat :) poslední
Palevel 27.11.2012 13:27
Palevel

Stejně nechápu účel (zadávací nebo zobrazovací formy ?, karty ?), určitě by to šlo řešit jednoduše. Takže, aby ti to tvoje fungovalo bez tlačítka "Aktualizovat", musíš u formuláře "formular" pro událost Current vytvořit událostní proceduru a do ní vložit následující příkazy: DoCmd.GoToControl "podfrm"
DoCmd.GoToControl "Seznam3"
DoCmd.RunCommand acCmdRefresh
DoCmd.GoToControl "Projekt"
Názvy (podfrm, Seznam3 atd.) jsou podle tvé přiložené databáze a pokud jsi je měnil, tak si názvy uprav.

Já bych provedl propojení formů v db úplně jinak. Ale protože tazatel pouze chtěl u svého db-výtvoru refresh u seznamu v podřízeném formu a to z nadřízeného formu, uvedl jsem událost Current v nadřízeném formu (tazatel neuvedl, po jaké události se má zobrazit) a příkazy (neznám nahrávač maker). První příkaz aktivuje podform, další aktivuje okno seznam, další provede refresh a poslední aktivuje zpět prvek formu (složité ?). Toť vše.

mně to připadne složité, protože refresh se dá volat rovnou na ten daný ovládací prvek, stačí jít přes celou kolekci. Defaultně se aplikuje na aktuálně zvolený prvek (proto ty napřed přejdeš, pak refreshneš a vracíš se zpět), dá se to ale řešit elegantněji jedním příkazem, který refreshne prvek, který mu zadáš a nikoli ten aktivní.

P.S.: možná už nepoužívám tu pravou terminologii, doby kdy jsem psal aplikace v Accessu jsou už dost dlouho pryč :-)

Vážený Touchwoode,

píšu trošku opožděně, zase jsem se dostal ke svému starému problému s aktualizací seznamu na podformuláři a znova využiju tento thread.
Ptám se tedy zpětně na to elegantnější řešení refreshnutí prvku na jiném formuláři než na tom na kterém se aktuálně nachází fokus.

Ještě se tu pokusím popsat proč vůbec používám takovou kravinu jako je vložený podformulář ve formuláři se stejným datovým základem :
Po spuštění mé aplikace v MS Access se mi veškerý pracovní prostor Accesu minimalizuje a uživatel vidí jen formulář se kterým pracuje a pod ním plochu Windows.
(vypadá to pak jako normální aplikace a nikoho neděsí lišty MS Access apod.)
Tento formulář pak obsahuje hlavní menu které přepíná ve vloženém rámci podformuláře. Nechce se mi to řešit otevíráním dalších oken což by zhoršilo přehlednost.

Aktualizovat seznam na daném podformuláři chci hned po otevření, což se mi nedaří protože asi po otevření se formuář teprve nastaví na záznam nadřazeného formuláře.
Takže podud do podformuláře napíšu :

Private Sub Form_Open(Cancel As Integer)
DoCmd.RunCommand acCmdRefresh
End Sub

tak se mi sice aktualizuje ale myslím že ještě před nastavením na správný záznam.

Takže jaké je to elegantnější řešení ?
Ještě by mě zajímalo na jaký program přejít z MS Access pro tvorbu ještě lepších aplikací, ale s takovou jednoduchostí jako to právě Access umí ?

Podle mě řešíš problém na špatném místě.

Refresh podformuláře musíš spouštět na ovládacím prvku (poli, podle kterého se selectují data do podformuláře), a to jako akci "po aktualizaci" nebo "při změně" (jestli se dobře pamatuju).

Principiálně:

1. změníš nadřazený záznam na hlavičce
2. přepíše se obsah pole --> buď metoda afterUpdate (změna záznamu) nebo onchange (při editaci záznamu) spustí refresh podformuláře.

Nemůžeš refreshovat při zavedení apod., protože to nereflektuje změny v nadřazeném formuláři, který je ten "řídící" formulář --> změny v hlavičce definují refresh podformuláře.

Pokud jsem nepochopil, tak se omlouvám ;-)

P.S.: podobný SW je Filemaker (původně tuším z Maca), ale Access je IMHO lepší. Další alternativa je stará dobrá Visual FoxPro (už se ale nevyvíjí, MS ji po zakoupení "zařízl")

edit: ještě k těm refreshům jiných formulářů:
http://bytes.com/topic/access/answers/876599-refre sh-another-form

a hlavně to čem jsem psal:
http://www.techonthenet.com/access/subforms/refres h.php

Zpět do poradny Odpovědět na původní otázku Nahoru