mojaSymfonia FORUM https://forum.mix-soft.pl/ |
|
[HANDEL FORTE] https://forum.mix-soft.pl/viewtopic.php?f=15&t=86 |
Strona 1 z 1 |
Autor: | mnat [ 2008-04-10, 09:44 ] |
Tytuł: | [HANDEL FORTE] |
Witam, Dokładnie jak w temacie. Szukam rozwiązania na temat zastosowania wyjątków. Chodzi mi dokładnie o uzyskanie wyjątku w przypadku nieudanego tworzenia nowego obiektu poprzez dispatch. Teoretycznie w systemie powinny być obiekty COM, bo są instalowane wraz z symfonią, ale... To o co mi dokładnie chodzi, przykładowo wyglądałoby to tak (o ile istniałyby bloki try i catch): Kod: try Dispatch xFrm = xFactory.GetObject("BFirma") catch Message "Nie można utworzyć obiektu" Proszę o jakiś namiar |
Autor: | barnie [ 2008-04-10, 09:53 ] |
Tytuł: | |
Jeżeli obiekt nie jest zainstalowany w systemie to dostaniesz komunikat, że nie mógł zostać utworzony. Jeżeli jest w systemie i z jakiegoś powodu nie mógł zostać utworzony to proponuję Kod: dispatch dObj if dObj then // try message "Obiekt utworzony" else // catch message "Obiekt nie został utworzony" endif to miałeś na myśli? |
Autor: | mnat [ 2008-04-11, 08:52 ] |
Tytuł: | |
Mniej więcej o to chodzi. Tylko jeszcze nie do końca - handel wyrzuca komunikatem o błędzie w momencie przypisania wartości obiektu do zmiennej dispatch. W Twojej konstrukcji kodu, tak czy inaczej muszę nadać wartość dla zmiennej przed warunkiem if, bo po co tak na prawdę ma być sprawdzany obiekt skoro istnieje tylko jego deklaracja. A troszkę prościej i obrazowo - konstrukcja Kod: dispatch dObj if dObj then Message "Obiekt utworzony" else Message "Obiekt nie został utworzony" endif zawsze będzie wyrzucała komunikat "Obiekt nie został utworzony" bo obiektu po prostu nie ma. Chodzi o to że Kod: /* Tutaj tworzony jest obiekt i tutaj nadawana mu jest wartość i niestety tutaj symfonia zaprojektowała "wewnętrzny" wyjątek, który wyskakuje przy pewnych warunkach, o których nic nie wiem. */ dispatch dObj = xFactory.GetObject("BFirma") /* A tutaj istniałby już sens sprawdzania obiektu, tylko po co z kolei, jeżeli już jest utworzony? */ if dObj then Message "Obiekt utworzony" else Message "Obiekt nie został utworzony" endif Myślę, ze teraz już sprawa wygląda jaśniej |
Autor: | barnie [ 2008-04-11, 13:00 ] |
Tytuł: | |
Nie widzę sensu sprawdzania utworzenia obiektu w tym miejscu. Komunikat o niemożności utworzenia obiektu należely rozumieć, że środowisko w jakim ma pracować Twój raport nie jest gotowe. I co z tego, że przechwycisz to zdarzenie jak i tak nie zrealizujesz zał. funkcjonalności bez obiektów, których zdecydowałeś się użyć. Zgodzę się, że możnaby w tym miejscu wyświetlić ładniejszy komunikat. Np: "Brak zainstalowanych komponentów koniecznych do prawidłowej pracy raportu." :) Z drugiej strony wierzę, że masz taką potrzebę, żeby to było. Może napisz co dokładnie chcesz zrobić to najdziemy inne rozwiązanie. Mój przykład jak najbardziej jest przydatny. Dobrym przykładem może być biblioteka MxGridLib i obiekty grid i row. Row ma metodę GetParent(), która zwraca obiekt typu row będącego rodzicem tego pierwszego. Kod: dispatch g = "grid" // tworzenie obiektu powinno odbywać się na formie dispatch r // to będzie obiekt rodzica // sprawdźmy czy drugi wiersz ma rodzica r = g.Rows(1).GetParent() // sprawdzamy czy utworzył się obiekt if r then message r.Value(0) // pokazuje pierwszą celle rodzica else message "Jestem sierotą i nic nie pokażę. Wywołanie r.Value(0) spowodowałoby wywalenie błędu." endif |
Autor: | mnat [ 2008-04-14, 08:16 ] |
Tytuł: | |
Najprościej mówiąc: chcę zamienić brzydki komunikat sugerujący niepoprawne działanie raportu (nie można utworzyć obiektu (...) błąd linii xx) na mój własny |
Strona 1 z 1 | Strefa czasowa UTC+1godz. [letni] |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |