Fórum pro uživatele kancelářského balíku OpenOffice | LibreOffice
 

#1 13. 2. 2016 16:27:02

keymaker
Člen
Registrace: 13. 2. 2016
Příspěvků: 3

ListBox-seznam hodnot s filtrem

Prosím o o pomoc s řešením naplnění ListBoxu hodnotami dle filtru nadřazené formuláře.

Seznam hodnot v ListBoxu je filtrován dle záznamu v jiné tabulce.

příklad:
tabulky
Tbl_firmy (ID_firma/firma)
Tbl_adresa (ID_adresa/adresa/ID_firma)
Tbl_kontakt (ID_kontakt/kontakt/ID_firma/Id_adresa)

Tabulce "Tbl_kontakt" potřebuji připojit ListBox, pouze s výběrem adres se shodným ID_firma z tabulky Tbl_adresa.
Tento ListBox pak přiřadí spojení mezi Tbl_kontakt a Tbl_adresa

Bohužel ani po delším studiu se my toto nedaří.

Děkuji za Vaše postřehy a návrhy.

Offline

#2 13. 2. 2016 17:18:45

neutr
Člen
Registrace: 8. 3. 2007
Příspěvků: 3,468

Re: ListBox-seznam hodnot s filtrem

Máte provedeny vazby mezi tabulkami? Tohle by neměl být problém pokud nepotřebujete zrovna zadávat nové hodnoty. To by problém být mohl.
     List box má možnost vytvořit filtr, který se dá upravit shodně jako dotaz, nebo jako SQL. Ale z toho co píšete moc moudrý nejsem. Chtělo by to poslat ukázku. Tabulky mají podle všeho mimo vlastního klíče ještě nejméně jeden klíč cizí. Při tom by asi bylo výhodnější sestrojit čistě relační databázi - klíč - a vedle jediný sloupec.
     To co mne uvádí do rozpaků je Vaše představa, že cituji : Tento ListBox pak přiřadí spojení mezi Tbl_kontakt a Tbl_adresa. Tohle asi udělat vůbec nejde. Listbox může nanejvýš odfiltrovat jediný konkrétní sloupec (jediné tabulky). Řešení to asi má, ale v jiné koncepci.


Moje e-mailová adresa
Pokud je Váš problém vyřešen, označte prosím svůj příspěvek za "VYŘEŠENÝ"
Zlepšíte orientaci při vyhledávání řešení JAK OZNAČIT TÉMA ZA VYŘEŠENÉ

Offline

#3 13. 2. 2016 21:35:39

keymaker
Člen
Registrace: 13. 2. 2016
Příspěvků: 3

Re: ListBox-seznam hodnot s filtrem

-děkuji za reakci
-ano potřebuji zadávat nové hodnoty a zde je právě problém který neumím vyřešit
-nelze předat filtru SQL dotazu ListBoxu "proměnou" pro klauzuli WHERE
-zatím se mi nepodařilo najít řešení

Offline

#4 13. 2. 2016 22:35:44

neutr
Člen
Registrace: 8. 3. 2007
Příspěvků: 3,468

Re: ListBox-seznam hodnot s filtrem

Nedávno tady byl podobný dotaz. Tak jsem to testoval. Nenašel jsem ale způsob jak aktualizovat pomocí jedné položky tabulky "A" položky v souhrnu s tabulkou B.
     Lze vyvolat prakticky bez větších problémů jen existující zápisy. Koukal jsem i na různá řešení z různých fór. Možná jsem nenašel všechna řešení, ale jediný způsob je zřejmě vynechat klasické prostředky a použít makro. Ovšem i to má zádrhely například v tom, že je nutné znovu načíst relace aby bylo možné v dalším kroku změny akceptovat.
     Jistě to ale řešení má. Zatím doufám, že existuje i řešení bez maker jen jsem ho nenašel :-(
Nejvýhodnější je používat k aktualizaci Calc a používat Base jen jako "čtečku". Když by Base neměla omezené SQL tak by to bylo o něčem jiném. Mám ale dojem, že to souvisí s funkčností základů AOO, LO a proto zřejmě Base umí jen "select".


Moje e-mailová adresa
Pokud je Váš problém vyřešen, označte prosím svůj příspěvek za "VYŘEŠENÝ"
Zlepšíte orientaci při vyhledávání řešení JAK OZNAČIT TÉMA ZA VYŘEŠENÉ

Offline

#5 14. 2. 2016 15:50:33

keymaker
Člen
Registrace: 13. 2. 2016
Příspěvků: 3

Re: ListBox-seznam hodnot s filtrem

napadá mne toto řešení:
1) vytvořit tabulku s proměnnými hodnotami
2) z této tabulky pak lze číst pomocí SQL hodnotu pro filtr
3) zatím nevím jak do tabulky s proměnnými ukládat hodnotu filtru při pohybu ve formuláři

tuším že toto by mohla být cesta

Offline

#6 14. 2. 2016 18:25:58

neutr
Člen
Registrace: 8. 3. 2007
Příspěvků: 3,468

Re: ListBox-seznam hodnot s filtrem

Musíte vycházet ze dvou různých situací :-
     Když jsou čteny tabulky s existujícími záznamy tak se vytvoří pomocí vazby sloupec (ve sloučené tabulce) který lze číst Listboxem protože ten má svůj filtr. Jde samozřejmě o to v jaké vazbě je to provedeno. V tomto konkrétním případě jde o vazbu mezi základními tabulkami M:N.
     Problém je když chcete aktualizovat data v základních (původních - zdrojových) tabulkách. Vazba pro čtení v relaci M:N se chová jako jednosměrný proud - data jdou od větví do kmene kde se to dá načíst ofiltrované listboxem.
     Ale když změníte, nebo spíš přidáte v jedné základní tabulce zápis, tak se ani sloučená tabulka, ani protipól - druhá zdrojová tabulka neumí pomocí vazby změnit. Ať už přidáte něco do jakékoliv ze svázaných tabulek, tak změna nastane jen v té tabulce kam jste přímo vložil. (Například textovým polem, ComboBoxem ap.)
     - Prostě opačně od kmenu to k větvím neteče a od větve k větvi to už tuplem nejde. Když něco vložíte například Combem tak to do té aktivované tabulky dotanete ale tím vše končí.
      Máte například 2 sloupce jedné tabulky - zákazník a nákup. Pak máte formulář kde se Vám to sloučí k sobě (normálně bývají sloupce nesousední). Bohu žel můžete přidat jedním Combem klienta, a pak musíte jiným combem (nějakým oknem) přidat nákup.
         Následně musíte Form znovu načíst aby byl tento nový zápis vidět (aktualizace). Vůbec neuvažujte o tom, že by se po vyplnění nákupu aktivovaný zákazní "připsal". To jde jen pokud má zákazním vlastní tabulku, ale když máte sloučené zákazníky tak to ve formu bez aktualizace neuvidíte.


     Aby se znovu načtení aktivovalo používají kolegové například jiný formulář. Často se spustí sada formů pro vkládání. Po vložení se spustí MainForm (popřípadě i se SubFormy) a data se načtou, ale v tom okamžiku už jsou statická a zadaná.
     Tohle omezení by uměl překonat jen dobře postavený SQL dotaz - ale... Když se takový dotaz postaví musí se nad ním udělat formulář. Průšvih je docela v tom, že to nejde dělat na stejné jméno. A naopak - stavět formulář na neexistující dotaz (v podstatě tabulku vygenerovanou dotazem) je značně obtížné.
     Právě proto je poměrně schůdnější používat ke generování makra která se obejdou i bez vazeb. Calc může být sám registrovaný jako tabulka. Umí se jako nenačtený (hidden) změnit a po zavolání obsahuje vše co je potřeba - a tím se dají nahradit nedestatky SQL. Pak bychom vystačili se dvěma formuláři - jeden na zadání změn a druhý aby znovu načetl změny. Při tom mohou být oba stejné tak aby uživatel nic nepoznal. Base se jen jakoby na moment sekne - ale je to sotva postřehnutelná pokud Calc nemá narváno milion řádků.


     Nevím jak implementovaný FireBird Libre - ten by to umět mohl, ale k tomu jsem se ještě nedostal stejně jako k možnosti pracovat nepřímo s Accessem přes Access2Base.


Moje e-mailová adresa
Pokud je Váš problém vyřešen, označte prosím svůj příspěvek za "VYŘEŠENÝ"
Zlepšíte orientaci při vyhledávání řešení JAK OZNAČIT TÉMA ZA VYŘEŠENÉ

Offline

#7 18. 2. 2016 09:57:01

student
Člen
Registrace: 27. 2. 2006
Příspěvků: 112

Re: ListBox-seznam hodnot s filtrem

čítam... a zamýšľam sa....
podľa toho čo už je uvedené... tak dedukujem, že v Tbl_firmy (ID_firma/firma) sú len údaje ID_firma a firma = názov firmy.
V Tbl_adresa (ID_adresa/adresa/ID_firma) je uvedená adresa konkrétnej firmy. Ak je o tak, potom by som z týchto 2 tabuliek spravil len jednu spoločnú (pokiaľ tam niesu ešte iné adresy okrem adries firiem uvedených v Tbl_firmy). Tým by sa to zjednodušilo trochu.
V Tbl_kontakt (ID_kontakt/kontakt/ID_firma/Id_adresa) sú pravdepodobne kontakty povedzme na jednotlivých zamestnancov, ktorý sú v danej firme a tu je spojenie cez ID_firma, teda mala by byť vytvorená takáto relácia..... Aké ďalšie spojenie sa má vytvoriť?

Offline

#8 23. 3. 2016 14:36:45

student
Člen
Registrace: 27. 2. 2006
Příspěvků: 112

Re: ListBox-seznam hodnot s filtrem

A narazil som na rovnaký problém.... čo s tým smile ... ?

Offline

#9 23. 3. 2016 15:21:00

neutr
Člen
Registrace: 8. 3. 2007
Příspěvků: 3,468

Re: ListBox-seznam hodnot s filtrem

Na to pomůže asi jen makro které bude navázané na Listbox. Ten zapíše jednu hodnotu a na ovládacím prvku zavěšené makro doplní vše ostatní.


     Pokud si poradíte s makry pošlu sem vzory ze kterých bych osobně nejprve vycházel před tím, něžli bych začal testovat jiné - vlastní konstrukce.


Moje e-mailová adresa
Pokud je Váš problém vyřešen, označte prosím svůj příspěvek za "VYŘEŠENÝ"
Zlepšíte orientaci při vyhledávání řešení JAK OZNAČIT TÉMA ZA VYŘEŠENÉ

Offline

#10 24. 3. 2016 10:36:47

student
Člen
Registrace: 27. 2. 2006
Příspěvků: 112

Re: ListBox-seznam hodnot s filtrem

Dospel som k rovnakému záveru.
Riešim obraty k účtom v domácom hospodárstve - evidencia investící (GNUCach a Kmymoney sú dobré, ale majú funkcie, ktoré nepotrebujem a naopak tie čo chcem tam nie sú). Potrebujem účty členiť podľa kategórií. Teda ak chcem zadať obrat k nejakému účtu, vyberiem kategóriu (napr. investície, dôchodok, bežný účet...) a v rámci kategórie potrebujem vybrať č. účtu. Ak je to bez kategórie je ťažké vybarať len podľa čísla účtu, keď účtov je cca 40 (a do budúcna ich počet bude rásť). Preto potrebujem aby keď vyberiem kategóriu, aby v nasledujúcom poli mi vyfiltrovalo len účty danej kategórie.
Momentálne to riešim tak, že pre každú kategóriu mám samostatný formulár, ale údaje = obraty sa ukladajú do spoločnej tabuľky. Ku každému formuláru musím mať ďalšie 2 dotazy. Išlo by to aj cez 1, ale Base stále vracia iba hodnoty z 1. poľa. Pri SQL dotazoch je to bohužiaľ rovnaké.
Čo sa týka makier.... som v podstate začiatočník, ale budem musieť na tom popracovať smile .

Editoval student (24. 3. 2016 10:41:48)

Offline

#11 24. 3. 2016 12:44:56

neutr
Člen
Registrace: 8. 3. 2007
Příspěvků: 3,468

Re: ListBox-seznam hodnot s filtrem

Pokud umíte vstoupit do makra a umíte trošku anglicky (nebo máte Google :-) tak by to neměl být problém. V makrech pro Base se většinou vyskutují SQL dotazy. V těch se trošku jistě orientujete takže to je asi největší zádrhel - když uživatel neví nic o SQL - zejména to naše ořezané.
    V makrech nejste limitován počtem volání databází, nebo existujících datazů ap. problém bývá až na úrovni kdy si programátor usmyslí, že bude automaticky generovat formuláře které chce hned také použít. Ono to jde, ale nad tím jsem strávil kdysi dost času nežli jsem to vyřešil.
    Po pravdě dělám jiné věci a pospíchá to takže nemohu víc pomoci. Nedávno jsem si nedovedl rozpomenout jak se nastavuje vazba X:Y. Takže tím chci říct, že bych musel mnoho věcí dělat od podlahy i když jsem je už někdy úspěšně řešil.

večer budu doma a najdu nějaká makra popřípadě zajímavé vzory řešení.


Moje e-mailová adresa
Pokud je Váš problém vyřešen, označte prosím svůj příspěvek za "VYŘEŠENÝ"
Zlepšíte orientaci při vyhledávání řešení JAK OZNAČIT TÉMA ZA VYŘEŠENÉ

Offline

#12 24. 3. 2016 21:12:28

neutr
Člen
Registrace: 8. 3. 2007
Příspěvků: 3,468

Re: ListBox-seznam hodnot s filtrem

Posílám slíbené studijní materiály. je toho hodně, ale většina obsahuje jenom "refresh" makra. Často jsou tam makra "OnClick" (tedy akce na událost) ale je tam pár dobrých které dělají to co potřebujete.
     Já jsem je všechna sice viděl několikrát, ale stejně bych se orientoval jen podle hesel - například obsahuje - li výraz "SQL" a podobně. Mimo těchto příkladů mám asi 4x tolik souborů bez maker. Musíte všechny vzory otevřít a otestovat. Pak se podívat na makro. Mohou tam být velice dobrá řešení, která potřebují opravdu jen "refresh" formu, nebo subformu, což je normálně (samostatně) problém.


     Ještě rada. Pokud Vám například hned vyskočí formulář, je to makro spuštěné při startu. Po vypnutí to spadne (pokud neuděláte to co to makro chce).
     Pokud se podíváte jak vypadají tabulky, nebo formy a zavřete s provolbou zobrazit - seká se to. Makra jsou prakticky vždy navázána na konkrétní jména tabulek a formů takže dokud to neprostudujete - nebudete umět aplikovat jinde.


     To uvádím pro Vás jako návod jak se nenechat odradit, ale také se tím snažím omluvit a vysvětlit proč se mi snadno do maker Base neproniká a potřebuji aklimatizaci. Nyní dělám s Calcem a Writerem a mám z té směsice pocit že mi vybouchne hlava :-)

Vzory jsou tady Vzorové databáze s makry

Editoval neutr (24. 3. 2016 21:14:04)


Moje e-mailová adresa
Pokud je Váš problém vyřešen, označte prosím svůj příspěvek za "VYŘEŠENÝ"
Zlepšíte orientaci při vyhledávání řešení JAK OZNAČIT TÉMA ZA VYŘEŠENÉ

Offline

#13 29. 3. 2016 09:14:09

student
Člen
Registrace: 27. 2. 2006
Příspěvků: 112

Re: ListBox-seznam hodnot s filtrem

Ďakujem, preštudujem to.

Offline

Zápatí