Ciekawe!

65 wyświetleń
Przejdź do pierwszej nieodczytanej wiadomości

Marcin Miga

nieprzeczytany,
23 lip 2002, 03:37:4423.07.2002
do
Na temat zabezpieczeń Accessa napisano już tu wiele... Konkluzja zawsze była
jedna - najlepiej zabezpieczony jest kod (VBA - Tools - Properties -
Protection - Lock project for viewing).

Więc wpadłem na *szalony* pomysł umieszczenia dodatkowych rzeczy właśnie
tam... np. formularza. Sprawa nie jest taka prosta, jak się wydaje, bo nie
można wprost dodać UserForm, tak jak w VBA dla Excela, czy Worda. Właśnie
Excel - może z niego da się to zrobić? A i owszem... W Excelu zdefiniowałem
sobie prosty UserForm (ale lepiej nie dodawać RefEdita ;-]) wyeksportowałem
go do pliku *.frm, a w Accessie zaimportowałem go. I mogę go normalnie
obrabiać, a nie jest nigdzie widoczny.

Co wy na to?
Eksperymentował (a raczej bawił się...) ktoś w taki sposób?

pozdrawiam
--
Marcin Miga
(ROT13)
ZZ...@Vagrevn.cy
PS. SELECT-y piszę 'z palca' - bez testowania


Krzysztof Czuryło

nieprzeczytany,
27 lip 2002, 16:09:2127.07.2002
do

"Marcin Miga" <MM...@Interia.pl> wrote in message news:ahj0em$2nl$1...@helios.domdata.com...

| Na temat zabezpieczeń Accessa napisano już tu wiele... Konkluzja zawsze była
| jedna - najlepiej zabezpieczony jest kod (VBA - Tools - Properties -
| Protection - Lock project for viewing).
|
| Więc wpadłem na *szalony* pomysł umieszczenia dodatkowych rzeczy właśnie
| tam... np. formularza. Sprawa nie jest taka prosta, jak się wydaje, bo nie
| można wprost dodać UserForm, tak jak w VBA dla Excela, czy Worda.

Otóż chyba jednak można, choć z niewiadomych powodów MS ukrył tę możliwość
przed użytkownikiem.

Wystarczy jednak zmodyfikować sobie standardowe paski narzędzi i dodać tam polecenie
wstawiające do projektu UserForm (jest na liście dostępnych poleceń i działa!)
Oczywiście mówię o paskach edytora VBA, a nie Accessa. No i o Accessie 2000
rzecz jasna!
Nie wiem jak jest w 97 i nie chce mi się sprawdzać, bo już dawno nie używam tej
wersji. Natomiast AFAIK w 2000 opisane polecenie jest na pewno i to w standardowej
wersji Accessa (Office'a)

Odkryłem to dość dawno, ale początkowo myślałem, że to jakiś "ficzer" wersji
deweloperskiej (ODE/ODT). Poza tym nie bardzo widziałem zastosowanie dla UserForms
(poza jednym, mało potrzebnym), więc nie widziałem sensu o tym pisać.


BTW Czy wiecie o tym, że są polecenia wykomentowujące/odkomentowujące zanaczony
fragment kodu? Nie ma ich standardowo na pasku i w menu. Trzeba je sobie samemu
dodać!
I pomysleć, że kiedyś ktoś opisywał, jak w tym celu (do wyłączenia dużego
kawałka kodu) używa #if False ... #end if!!!


| Właśnie
| Excel - może z niego da się to zrobić? A i owszem... W Excelu zdefiniowałem
| sobie prosty UserForm (ale lepiej nie dodawać RefEdita ;-]) wyeksportowałem
| go do pliku *.frm, a w Accessie zaimportowałem go. I mogę go normalnie
| obrabiać, a nie jest nigdzie widoczny.

To fakt! UserForms nie są nigdzie(?) widoczne. W każdym razie nie na liście
standardowych obiektów Accesa.


| Co wy na to?
| Eksperymentował (a raczej bawił się...) ktoś w taki sposób?

No właśnie! Ja znalazłem jedno ciekawe zastosowanie dla UF, do którego nie da się
wykorzystać zwykłego formularza (można sprawdzić).

Chodzi mianowicie o okno dialogowe, za pomocą którego podaje się parametry dla
kwerendy, raportu, czy po prostu jakiejś procedury.
Jak wiadomo, zwykły InputBox nie daje możliwości użycia maski/formatu, wybrania
wartości z listy, etc. Dlatego trzeba wówczas tworzyć własny formularz dialogowy
i otwierać go jako dialog właśnie (z parametrem acDialog), co gwaranmtuje wstrzymanie
działania aplikacji do momentu zamknięcia formularza. Wtajemniczeni wiedzą o co
chodzi, więc pominę szczegóły.

Słowem, da się napisać funkcję, która otworzy okno dialogowe (formularz) i zwróci
wprowadzony przez użytkownika parametr. Ale... spróbujcie użyć tej funkcji
bezpośrednio w kwerendzie, np.:

SELECT * FORM Tabela1 WHERE Pole1 = funcPodajParametr();

Gdzie funcPodajParametr() jest funkcją otwierającą np. formularzyk z rozwijaną
listą i zwracającą wybraną przez użytkownika wartość.

To nie zadziała! Access zwróci błąd! Tymczasem użycie UserForm zamiast zwykłego
formularza spowoduje, że funkcja będzie działać!
Interesujące, nieprawdaż?

Wiem, wiem - po co wywoływać funkcję bezpośrendio z kwerendy, skoro można
wpisać parametr z normalnego formularza i potem utworzyć dynamiczną kwerendę
lub podać warunek np. jako parametr dla DoCmd.OpenForm
Cóż, to tylko jakiś pomysł wykorzystania UserForms. Drugi podał Marcin.
Ktoś ma inne?

Uwaga dla ewentualnych eksperymentatorów - UserForms otwiera się i zamyka nieco
inaczej niż zwykłe formularze:

' otwarcie
Load NazwaFormularza ' bez cudzysłowów!!!
NazwaFormularza.Show

' zamknięcie
Unload NazwaFormularza
' lub
Unload Me ' w kodzie samego formularza

Czyli kod jest zbliżony raczej do zwykłego VB, a nie VBA.
Reszta (procedury zdarzeń) jest chyba identyczna.


Czekam na ciekawe pomysły wykorzystania UserForms!!!

--

+---------------------------------------------------------------+
| lek. Krzysztof Czuryło access(at)krzycz.com |
| www.krzycz.com |
+---------------------------------------------------------------+


Aseta

nieprzeczytany,
29 lip 2002, 02:38:4329.07.2002
do
"Krzysztof Czuryło" <krz...@poczta.SPAM.onet.KILLER.pl> wrote in message
news:ahv1a7$k3v$1...@news.tpi.pl...

Witaj

Z ochoczym postanowieniem poznania czegoś nowego stworzyłem User Forma
dodałem jedną etykietę i zapamiętałem modół jako UserForm1 po czym nie mogę
wejść do żadnego modułu komonikat: The Visual Basic Applications in he
database is corrupt.

To samo uczyniłem tym razem na czystej bazie z takim samym skutkiem. Pracuje
w AccXP i ostrzegam innym eksperymenty nie w bazie z innymi objektami.
Dobrze że robie kopie.

Czy któś miał coś podobnego?

Odpowiedz wszystkim
Odpowiedz autorowi
Przekaż dalej
Nowe wiadomości: 0