Pokaż wyniki od 1 do 3 z 3
  1. #1
    Obserwator
    Dołączył
    February 09
    Postów
    2
    Siła Reputacji
    0


    Twoja ocena: Yes No

    Problem Access 2007

    Witam
    Moj problem wyglada nastepujaco. Mam baze danych w ktorej musze rezerwować miejsca w restauracji. I wszystko jest ok z tym tylko wyjątkiem że daty rezerwacji i godziny rezerwacji nakładają sie na siebie. Jak zrobić żeby sprawdzić czy rezerwacja danego terminu jest możliwa, jeśli tak to zapisz a jeśli data i godzina jest już zajęta powinno wyświetlać komunikat i tym że rezerwacja jest nie możliwa.
    Jestem poczatkujacym w accessie wiec prosze o wyrozumialosc.
    Pozdrawiam

  2. #2
    Zaawansowany uczestnik
    Dołączył
    July 08
    Postów
    103
    Siła Reputacji
    0


    Twoja ocena: Yes No

    Dużo zależy od tego jak wygląda struktura bazy danych. Czy godzina rezerwacji to dwa pola od i do, czy tylko godzina od?

  3. #3
    Obserwator
    Dołączył
    April 07
    Postów
    336
    Siła Reputacji
    0


    Twoja ocena: Yes No

    Cytat Napisał desper Zobacz post
    (...) daty rezerwacji i godziny rezerwacji nakładają sie na siebie. (...)
    Skoro nakładają się, to zakładam, że rezerwacja jest ważna od - do, czyli są dwa pola warunkujące kiedy rezerwacja się zaczyna i kiedy się kończy.

    Najpierw trochę rozważań. Są 4 przypadki, kiedy rezerwacji nie można wykonać (kropki, to jakieś punkty w czasie, 'a' to istniejąca rezerwacja, 'b' to nowa rezerwacja, którą próbujesz dodać):

    1. nowa rezerwacja zaczyna się przed istniejącą, ale kończy za późno:
    Kod:
    ...aaaa...
    .bbb......
    2. nowa rezerwacja zaczyna się za szybko, jeszcze w czasie istniejącej rezerwacji:
    Kod:
    ...aaaa...
    .....bbb...
    3. nowa rezerwacja jest króciutka, ale jest w trakcie istniejącej:
    Kod:
    ...aaaa...
    ....bb....
    4. nowa rezerwacja zaczyna się jeszcze przed istniejącą i kończy długo po:
    Kod:
    ...aaaa...
    .bbbbbbbb.
    Co mają te wszystkie przypadki wspólnego?
    Nowa rezerwacja 'b' zawsze zaczyna się przed końcem istniejącej rezerwacji 'a' i zawsze 'b' kończy się po początku 'a'.
    Tak więc próbując dodać nową rezerwację musisz sprawdzić, czy nie ma już przypadkiem jakiejś rezerwacji, która:
    Kod:
    b.początek < a.koniec AND b.koniec > a.początek
    W praktyce -- nie podam przepisu dokładnie krok po kroku, ale na tyle szczegółowo, żeby dało się odtworzyć:
    1. Zacznij od stworzenia kwerendy, która będzie wyszukiwała zachodzące na siebie rezerwacje -- przydadzą się przy tym parametry (nie mam pojęcia, gdzie je znaleźć w 2007, ale w 2003 wystarczyło kliknąć prawą myszą w okienku projektu kwerendy). Dokładnie dwa parametry: [b.początek] i [b.koniec].

    2. Mając taką kwerendę musimy gdzieś użyć funkcji: DCount("*"; "SprRez"), która zwraca ile jest rekordów w zapytaniu SprRez.

    3. W zależności od tego czy do zapisu nowej rezerwacji używasz makra czy funkcji vbasic musisz:

    a. albo dodać warunki do swojego makra (tutorialek tutaj: http://www.bluemoosetech.com/microso...o%20Conditions) -- dodaj nową linijkę na początku makra, jako warunek podaj:
    Kod:
    DCount("*"; "SprRez") > 0
    a jako akcję wybierz OknoKomunikatu (MsgBox) i wpisz komunikat informujący o tym,że nie można dodać rezerwacji. Dodaj jeszcze drugą linijkę, pozostaw pusty warunek i jako akcję wybierz ZatrzymajMakro. Dopiero od trzeciej linijki mają być akcje, które pozwalają na zapis nowej rezerwacji -- w trzeciej linijce musisz też podać warunek:
    Kod:
    DCount("*"; "SprRez") = 0
    b. albo dodać linijkę z instrukcją IF do funkcji vb -- jeśli użyłeś standardowego kreatora do stworzenia przycisku zapisującego rekord, to do linijki wyglądającej mniej więcej tak:
    Kod:
      DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70
    dopisz:
    Kod:
    If DCount("*"; "SprRez") = 0 Then
      DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70
    Else
      MsgBox("Nie można dodać tej rezerwacji bo jest konflikt!")
    EndIf

    Mam nadzieję, że ten przydługi opis pomoże i przynajmniej wskaże dalsze kierunki poszukiwań, jeśli nie pozwoli po prostu stworzyć tego, co chcesz...

    Ew. jeśli system nie musi koniecznie zablokować rezerwacji, a może pozostawić decyzję człowiekowi, to na formularzu rezerwacji możesz dodać podformularz wyświetlający rekordy z kwerendy z pkt. 1. Jeśli kwerenda coś pokaże, to znaczy, że jest konflikt. Jeśli nie, to można spokojnie rezerwować.

Informacje o temacie

Users Browsing this Thread

Aktualnie 1 użytkownik(ów) przegląda ten temat. (0 zarejestrowany(ch) oraz 1 gości)

Podobne wątki

  1. Access 2003 problem
    By 'Fly in forum HTML, XHTML, CSS, JS, AJAX
    Odpowiedzi: 3
    Ostatni post / autor: 05-01-09, 09:55
  2. Problem z baza danych w access.
    By bodekkg in forum HTML, XHTML, CSS, JS, AJAX
    Odpowiedzi: 1
    Ostatni post / autor: 19-08-08, 13:17
  3. Access - problem z kryterium
    By GetOverIt in forum HTML, XHTML, CSS, JS, AJAX
    Odpowiedzi: 3
    Ostatni post / autor: 18-08-08, 22:12
  4. Access i moze VBA problem
    By peter4 in forum HTML, XHTML, CSS, JS, AJAX
    Odpowiedzi: 1
    Ostatni post / autor: 21-06-07, 22:56

Zakładki

Zakładki

Uprawnienia

  • Nie możesz zakładać nowych tematów
  • Nie możesz pisać wiadomości
  • Nie możesz dodawać załączników
  • Nie możesz edytować swoich postów
  •  

Jak czytać DI?

Powered by  
ATMAN EcoSerwer