[SOLVED] Wybor przez listę

Użytkowanie programu bazodanowego
lepik
Posty: 5
Rejestracja: pn cze 29, 2009 9:21 pm

[SOLVED] Wybor przez listę

Post autor: lepik »

Witam
W bazie są dwie tabele z polami:
towary:
Nazwa (klucz)
Opis

zakupy
IdZakupu (klucz)
NrRachunku
NazwaFirmy
Nazwa

Dwie tabele są połączone relacją (pole Nazwa)

Problem polega na utworzeniu formularz, w którym za pomocą listy będę wybierał nazwę towaru (pobraną z tabeli towary) a w podformularzu w postaci tabeli wyświetlone zostaną wszystkie rekordy z tabeli zakupy dotyczące wybranego towaru.
mg2
Posty: 170
Rejestracja: czw sty 28, 2010 9:20 pm

Re: Wybor przez listę

Post autor: mg2 »

(+ zał.)

Pole kombi:
- typ zawartości listy "SQL"
- zawartość listy:

Kod: Zaznacz cały

select distinct "towar_zakup" from "tab_zakupy" order by "towar_zakup"
- wydarzenia ...

Makra:

Kod: Zaznacz cały

option explicit

'=============================
sub filtruj

dim oDok as object
dim oForm as object
dim oList as object
dim towar as string

oDok = thisComponent
oForm = oDok.drawPage.forms(0)
oList = oForm.getByName("Pole listy 1")
towar = oList.text
'msgbox(towar)
oForm.filter = "tab_zakupy.towar_zakup = " & "'" & towar & "'"
oForm.reload

end sub
'=============================

'=============================
sub wylacz_filtr

dim oDok as object
dim oForm as object
dim oList as object

oDok = thisComponent
oForm = oDok.drawPage.forms(0)
oList = oForm.getByName("Pole listy 1")
oList.text = "włącz filtr towaru"
oForm.filter = ""
oForm.reload

end sub
'=============================
Załączniki
formularz_filtr_wymaga_ooo_3.1.1_lub_wyzej.odb
(14.15 KiB) Pobrany 884 razy
OOo3.1.1 na Ubuntu 9.04
lepik
Posty: 5
Rejestracja: pn cze 29, 2009 9:21 pm

Re: Wybor przez listę

Post autor: lepik »

Witam

Jeśli wszyscy odpowiadaliby w ten sposób, to na pewno łatwiej można byłoby się wielu rzeczy nauczyć.

Serdecznie dziękuję, za szybką, rzeczową a przede wszystkim wyczerpującą!!!! odpowiedź.
markym77
Posty: 3
Rejestracja: pn cze 07, 2010 6:05 pm

Re: Wybor przez listę

Post autor: markym77 »

witam, proszę o pomoc w następującej kwestii
mam bazę Karty i użytkownicy, posiada ona pole Nazwisko, po którym to chcę filtrować w formularzu rekordy bazy
przerobiłem podany w poście skrypt i przy zaznaczaniu wyszukiwania pojawia się błąd (zawarty w treści makra- na czerwono)
Nie jestem biegły w skryptach , ale najprawdopodobniej nie zadeklarowałem metody text, ale porównując oryginalny skrypt, tam też nie ma takiej deklaracji.
Za wszelką pomoc z góry dziękuję :-)

Kod: Zaznacz cały

option explicit

'=============================
sub filtruj

dim oDok as object
dim oForm as object
dim oList as object
dim Nazwisko as string

oDok = thisComponent
oForm = oDok.drawPage.forms(0)
oList = oForm.getByName("MainForm_Grid")
Nazwisko = oList.text           
"Nazwisko = oList.text " <- tu pojawia się błąd - nie znaleziono właściwości lub metody text.

Kod: Zaznacz cały

'msgbox(Nazwisko)        
oForm.filter = "Karty i użytkownicy.Nazwisko = " & "'" & Nazwisko & "'"
oForm.reload

end sub
'=============================

'=============================
sub wylacz_filtr

dim oDok as object
dim oForm as object
dim oList as object

oDok = thisComponent
oForm = oDok.drawPage.forms(0)
oList = oForm.getByName("MainForm_Grid")
oList.text = "włącz filtr nazwisko"
oForm.filter = ""
oForm.reload

end sub
'=============================
OpenOffice 3.2
markym77
Posty: 3
Rejestracja: pn cze 07, 2010 6:05 pm

Re: Wybor przez listę

Post autor: markym77 »

Już znalazłem powód błędu, okazało się ,że nie zmieniłem nazwy etykiety pola kombi, które wybierało Nazwisko i dlatego pojawiał się błąd "Nazwisko = oList.text " nie znaleziono właściwości lub metody text.

Jest następujący problem :

przyciski z formularza mają podłączone zmienione już makra .. ale po wybraniu przez pole kombi nazwiska np. kowalski wszystkie dane w tabeli w formularzu znikają , a powinny przecież zostać wszystkie wystąpienia nazwiska Kowalski.

Sprawdzałem formanty, ustawienia formularza , ale nie znalazłem przyczyny owego znikania danych.

Proszę o pomoc :-)
OpenOffice 3.2
markym77
Posty: 3
Rejestracja: pn cze 07, 2010 6:05 pm

Re: Wybor przez listę

Post autor: markym77 »

Makro filtr nie działało, ponieważ nazwa bazy zawierała polskie znaki i miała w nazwie spację, po poprawieniu nazwy bazy wszystko działa poprawnie.

zmienilem z "moje dvd i cd" na "moje_dvd_cd:"
OpenOffice 3.2
Noiprocek
Posty: 5
Rejestracja: pn cze 20, 2011 5:14 pm

Re: Wybor przez listę

Post autor: Noiprocek »

Witam

Chciałbym się dowiedzieć czy jest taka możliwość aby do filtra z 2 postu można by dołączyć więcej kryteriów
np. żeby filtrował towary ale tylko z konkretnej firmy
OpenOffice 3.3
Jan_J
Posty: 4560
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: Wybor przez listę

Post autor: Jan_J »

Noiprocek pisze:Witam

Chciałbym się dowiedzieć czy jest taka możliwość aby do filtra z 2 postu można by dołączyć więcej kryteriów
np. żeby filtrował towary ale tylko z konkretnej firmy
Jasne. Potrzeba wstawić w polu filter warunek złożony, a jeżeli chcemy tym zarządzać, to dołożyć więcej pól i sczytywać z nich wartości do tego warunku.
JJ
LO (7.6|24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
Noiprocek
Posty: 5
Rejestracja: pn cze 20, 2011 5:14 pm

Re: Wybor przez listę

Post autor: Noiprocek »

Problem z tym że nie wiem jak powinien wyglądać warunek złożony

Doszedłem do tego:

Kod: Zaznacz cały

'=============================
sub filtruj

dim oDok as object
dim oForm as object
dim oList as object
dim oList2 as object
dim towar as string
dim firma as string

oDok = thisComponent
oForm = oDok.drawPage.forms(0)
oList = oForm.getByName("Pole listy 1")
oList2 = oForm.getByName("Pole listy 2")
towar = oList.text
firma = oList2.text
'msgbox(towar)
oForm.filter = "tab_zakupy.towar_zakup = " & "'" & towar & "'" & "tab_zakupy.firma = " & "'" & firma & "'"
oForm.reload

end sub
'=============================
niestety nic nie wyświetla się w tabeli
OpenOffice 3.3
Jan_J
Posty: 4560
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: Wybor przez listę

Post autor: Jan_J »

Noiprocek pisze:Problem z tym że nie wiem jak powinien wyglądać warunek złożony
W SQL, w uproszczeniu

Kod: Zaznacz cały

select ... where wyrażenie operator wartość [spójnik wyrażenie operator wartość [...]]
np.

Kod: Zaznacz cały

... where cena > 2000 and producent <> 'moja_konkurencja'
W praktyce: pole filter przechowuje tekstową postać warunku SQL. Kod makra buduje ją z dostępnych danych, sczytywanych z pól listowych lub pól wprowadzania. Czyli musisz uzupełnić frazę budowania warunku spójnikiem (or, and) i tym co następuje po nim, a jeżeli użytkownik ma mieć władzę nad zapytaniem, to potrzebne będzie dodatkowe pole, by wybrać np. producenta, i tę wybraną wartość należałoby wstawić w odpowiednie miejsce, analogicznie jak to się zrobiło z pierwszym.

// W bardziej zaawansowanych formularzach filtrowania nawet spójniki i operatory mogą być wybierane.
JJ
LO (7.6|24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
Noiprocek
Posty: 5
Rejestracja: pn cze 20, 2011 5:14 pm

Re: Wybor przez listę

Post autor: Noiprocek »

Kod: Zaznacz cały

option explicit

'=============================
sub filtruj

dim oDok as object
dim oForm as object
dim oList as object
dim oList2 as object
dim towar as string
dim firma as string

oDok = thisComponent
oForm = oDok.drawPage.forms(0)
oList = oForm.getByName("Pole listy 1")
oList2 = oForm.getByName("Pole listy 2")
towar = oList.text
firma = oList2.text
'msgbox(towar)
'msgbox(firma)
oForm.filter = "SELECT" & "tab_zakupy.firma, tab_zakupy.towar_zakup" & "FROM" & "tab_zakupy" & "WHERE" & "tab_zakupy.firma = " & "'" & firma & "'"  & "AND" & "tab_zakupy.towar_zakup = " & "'" & towar & "'"
oForm.reload

end sub
'=============================

'=============================
sub wylacz_filtr

dim oDok as object
dim oForm as object
dim oList as object
dim oList2 as object

oDok = thisComponent
oForm = oDok.drawPage.forms(0)
oList = oForm.getByName("Pole listy 1")
oList2 = oForm.getByName("Pole listy 2")
oList.text = "włącz filtr towaru"
oList2.text = "włącz filtr towaru"
oForm.filter = ""
oForm.reload

end sub
'=============================
Po wybraniu jakiejkolwiek opcji z listy znikają wszystkie wpisy w formularzu :?
Załączniki
formularz_filtr_wymaga_ooo_3.1.1_lub_wyzej(1).odb
(14.34 KiB) Pobrany 404 razy
OpenOffice 3.3
Jan_J
Posty: 4560
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: Wybor przez listę

Post autor: Jan_J »

Bo filter nie ma zawierać całego zapytania, tylko frazę warunku, tego po słowie where.
JJ
LO (7.6|24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
Noiprocek
Posty: 5
Rejestracja: pn cze 20, 2011 5:14 pm

Re: Wybor przez listę

Post autor: Noiprocek »

Problem w tym że filter działa tylko dla jednego warunku:

Kod: Zaznacz cały

oForm.filter = "tab_zakupy.firma = " & "'" & firma & "'"
albo:

Kod: Zaznacz cały

oForm.filter = "tab_zakupy.towar_zakup = " & "'" & towar & "'"
gdy wpisuje

Kod: Zaznacz cały

oForm.filter = "tab_zakupy.firma = " & "'" & firma & "'"  & "AND" & "tab_zakupy.towar_zakup = " & "'" & towar & "'"
po wyborze pierwszego warunku znika cała lista
OpenOffice 3.3
Jan_J
Posty: 4560
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: Wybor przez listę

Post autor: Jan_J »

Warunek SQL
zakupy.firma = 'pole1' AND zakupy.towar = 'pole2'
wymaga odstępu oddzielającego AND od nazwy tabeli. U ciebie się sklejają. Wpisz w kodzie "AND " zamiast "AND".
JJ
LO (7.6|24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
Noiprocek
Posty: 5
Rejestracja: pn cze 20, 2011 5:14 pm

Re: Wybor przez listę

Post autor: Noiprocek »

OK wszystko śmiga jak marzenie. Wielkie dzięki :)
OpenOffice 3.3
Thob
Posty: 1
Rejestracja: pn lip 25, 2011 7:45 pm

Re: [SOLVED] Wybor przez listę

Post autor: Thob »

Witam, nie chciałem zaśmiecać i zakładać nowego wątku więc skrobnę tutaj... Jestem początkującym użytkownikiem OO Base i mam również problem z polem kombi i wyborem przez listę.
Moja baza zawiera tabelę Pracownicy z polami:
ID klucz (liczba)
NAZWISKO (tekst)
IMIĘ (tekst)
N1 (liczba)
N2 (liczba)
...
N50 (liczba)
INN (tekst)

Utworzyłem sobie formularz w którym wprowadzam dane to tabeli, umieściłem tam również pole kombi z wyborem przez listę (chodzi o NAZWISKO [Typ: Sql; zawartość:SELECT DISTINCT "NAZWISKO" FROM "Pracownicy"] ) ale o ile na liście pojawiają się dodane nazwiska to nie mogę się się miedzy nimi "swobodnie przełączać".np :
[ID] 1[Nazwisko] Kowalski[Imię]Jan[N1]2[N2]1...
[ID] 2[Nazwisko] Nowak[Imię]Piotr[N1]1[N2]1...
[ID] 3[Nazwisko] Stasiak[Imię]Marian[N1]1[N2]2...
itd.
Jestem w formularzu na Kowalski a z pola listy wybiorę Stasiak to przechodzi mi na kolejny rekord czyli Nowak a nie jak chciałem na Stasiak :/ :crazy: Potrzebuje Makra ? ( nie zam się na Makrach :/)
Jestem naprawdę początkujący więc proszę o pomoc noob-friendly :alarm:
OpenOffice 3.3.0
Win XP
ODPOWIEDZ