Argument w obsłudze zdarzenia

Użytkowanie programu bazodanowego
piorkoo
Posty: 8
Rejestracja: ndz lis 21, 2010 10:35 pm

Argument w obsłudze zdarzenia

Post autor: piorkoo »

Witam!

Mam problem z otwarciem linku zapisanym w tabeli. Mianowicie: stworzylem tabele skaldajaca sie z dwoch kolumn: "nazwa strony" oraz "link" gdzie w kolumnie drugiej wpisuje adres interesujacej mnie strony np. http://www.openoffice.pl. Stworzylem rowniez formularz, w ktorym dodalem przycisk (URL_Button) w formularzu powiazanym z tabela, oraz dodalem formant tabeli uwzgledniajac wszystkie kolumny. Probowalem wykorzystac makro:

Kod: Zaznacz cały

sub url_on_record_change(oEv)
frm = oEv.Source
cols = frm.getColumns()
btn = frm.getByName("URL_Button")
tag = btn.Tag
field = cols.getByName(tag)
btn.TargetURL = field.getString()
end sub
korzystajac z:
http://user.services.openoffice.org/en/ ... 999#p25810

jak wyzej napisalem, przycisk ma nazwe URL_Button a w dodatkowych informacjach przycisku wpisalem nazwe kolumny czyli: "link". Niestety po kliknieciu przycisku wyskakuje mi okienko:
Blad uruchomieniowy jezyka BASIC. Nie znaleziono wlasciwosci lub metody: getColumns.

dodam jeszcze, ze:
1. probowalem rowniez korzystac z pythona, ktory jest dolaczony w zalaczonym watku lecz niestety tez wyskakiwal mi blad tym razem dluzszy komunikat.
2. podczas podejscia 1szego przycisk nie reagowal w ogole (dodalem do istniejacego formularza), w podejsciach kolejnych tzn. tworzac od nowa czysta baze i formularz zaczal pojawiac sie ww. problem.


Jesli ktos moglby mi pomoc bylbym bardzo wdzieczny

pozdrawiam
Ostatnio zmieniony śr gru 01, 2010 12:48 pm przez Jan_J, łącznie zmieniany 1 raz.
Powód: zmiana tytułu
openoffice 3.2.1 windows 7
Jan_J
Posty: 4583
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: otwieranie linkow zapisanych w tabeli

Post autor: Jan_J »

To zależy od sposobu wywoływania. Parametr oEv jest przypisywany przez obsługę zdarzeń, a jego znaczenie zależy od rodzaju zdarzenia. Być może źle interpretujesz jego zawartość, albo podpiąłeś do niewłaściwego zdarzenia.

Moim zdaniem procedura url_on_record_change() powinna być skojarzona z modyfikacją danych w tabeli. Tak zresztą sugeruje autor kodu w wykorzystanym przez Ciebie materiale. W tej sytuacji oEv.Source będzie obiektem obszaru tabeli, i jako taki powinien posiadać metodę getColumns().

Po drugie, mniej ważne. Python jest lepiej zaprojektowany ni Basic. Sam o wiele bardziej wolę w nim pisać. Jednak w OpenOffice nie ma żadnych gotowych narzędzi do tworzenia i testowania kodu Pythona. Komunikaty o błędach są co prawda prawdziwe, ale dość trudne do analizy. Tak że tandem OOo+Python wymaga niejakiego obycia z programowaniem w ogóle.

Po trzecie, jeszcze mniej ważne. Otwieranie linków zapisanych w tabeli jest niewątpliwie celem, który zamierzasz osiągnąć. Jednak problem, z którym się zmagasz bezpośrednio, dotyczy czego innego.

W przypadku problemów podeślij przykład z neutralną merytorycznie zawartością.
JJ
LO (24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
piorkoo
Posty: 8
Rejestracja: ndz lis 21, 2010 10:35 pm

Re: Argument w obsłudze zdarzenia

Post autor: piorkoo »

Witam!

Dziękuję za obszerną odpowiedź. Niestety ale mój problem dalej nie jest rozwiązany. Faktycznie nie zmieniłem nazwy kolumny (myśląc, że ta podana w tabeli jest jedyna), co też później poprawiłem, lecz jakichkolwiek zmian w działaniu makra nie ma. Niestety ale mimo wielu modyfikacji i prób uruchomienia dalej nie działa poprawnie. Tu póki co kończą się już moje pomysły mocno ograniczone przez niewielką wiedzę na temat makr jak i samego openoffice.

Załączam plik z bazą, w której występuje problem. Mam nadzieję, że da się go jakoś łatwo rozwiązać.

Z góry dziękuję za pomoc
pozdrawiam
Załączniki
baza-link.odb
przykladowa baza z problemem
(12.54 KiB) Pobrany 165 razy
openoffice 3.2.1 windows 7
Jan_J
Posty: 4583
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: Argument w obsłudze zdarzenia

Post autor: Jan_J »

Jest tak jak przypuszczałem: podpinasz procedurę do przycisku. W takim razie nie ma ona żadnego dostępu do Twojej tabelki.
W zamyśle Villeroy'a było jej skojarzenie z faktem modyfikacji danych w tabelce (np. po zatwierdzeniu komórki). Wtedy automat wywołujący ją przekazałby jej tabelkę jako argument -- ściślej, jako pole Source argumentu wywołania.

W załączeniu poprawiona wersja Twojego formularza. Zamiast do przycisku, który w tym przypadku jest zbędny, przypisałem akcję do zdarzenia ,,after record changed'' całego formularza. Jest ono dostępne pod w menu podręcznym/Form/Events.
Załączniki
baza-link.odb
(12.64 KiB) Pobrany 182 razy
JJ
LO (24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
ODPOWIEDZ