Łączenie dwóch DBGrid i inne

Łączenie dwóch DBGrid i inne
PA
  • Rejestracja:prawie 13 lat
  • Ostatnio:prawie 13 lat
  • Postów:3
0

Witam,

utworzyłem bazę danych zawierającą dane dotyczące pokoi, rezerwacji i klientów hotelu. Stworzyłem DBGrid, który wyświetla wszystkie pokoje, oraz inny DBGrid(na tej samej formatce), który ma wyświetlać wyposażenie każdego z pokoi. Jestem dość zielony jeśli chodzi o Delphi.
Szukałem tego w różnych książkach i innych stronach jednak nie były opisane dokładnie moje problemy, a nie mam niestety czasu na długie rozmyślania nad aplikacją.

Pytania:

  1. Jak zrobić aby drugi DBGrid wyświetlał informacje dotyczące pokoju jedynie zaznaczonego na pierwszym DBGridzie, a nie wszystkich (DataSource są połączone z IBQuerry, a nie IBTable)?
  2. Chciałbym utworzyć chceck boxy, które klienci będą klikać. Będą one dotyczyły odpowiedniego wyposażenia (np. kliknięcie w CheckBoxa "internet" wyświetli nam tylko te pokoje, które posiadają internet, a klikając w owy check box oraz check box "balkon" wyświetli jedynie te, które posiadają zarówno inernet jak i balkon). Jak to zrobić?
  3. Jak wprowadzić do bazy danych dane dot. klienta? Chciałbym aby klient wypisywał swoje dane, wybrał pokój i wszystko (włącznie z rezerwacją zapisywało się automatycznie).

Wiem, że to sporo, ale może ktoś pomoże, bo z resztą jakoś sobie poradzę. Z góry dziękuję i proszę zadawać dot. szczegółów projektu.

enix
  • Rejestracja:prawie 13 lat
  • Ostatnio:około 12 lat
  • Postów:23
1
  1. Zakładam że masz tabele:

tab_pokoje
pokoje_id PK
...

tab_wyposazenie (lista-slownik mozliwego wyposazenia)
wyposazenie_id PK
...

tab_pokoje_wyposazenie (relacja wele-wiele, jakie wyposazenie jest w pokoju)
pokoje_id PK
wyposazanie_Id PK

tab_rezerwacje
rezerwacje_id PK
pokoje_id FK
klienci_id FK
...

tab_klienci
klienci_id PK
....

Dla pokoi: IBQuery_pokoje->DataSource_pokoje->DBGrid_pokoje: SELECT * FROM tab_pokoje
Dla wyposazenia: IBQuery_wyposazenie->DataSource_wyposazenia->DBGrid_wyposazenia
polaczenie master-detail: IBQuery_wyposazenie.DataSource:=DataSource_pokoje, z parametrem pokoje_id, np.

IBQuery_wyposazenie.SQL:=
SELECT
tab_wyposazenie.*
FROM
tab_pokoje_wyposazenie, tab_wyposazenie
WHERE
tab_pokoje_wyposazenie.pokoje_id=tab_wyposazenie.popkoje_id AND tab_wyposazenie.wyposazenie_id= :pokoje_id

  1. Musisz napisać, zmodyfikowac odpowiednie zapytanie SQL w IBQuery_pokoje: np

SELECT
*
FROM
tab_pokoje
WHERE
pokoje_id IN (SELECT pokoje_id FROM tab_pokoje_wyposazenie WHERE wyposazenie_id IN ( internet_id, balkon_id, ... ))

  1. No to już jest zbyt ogólnie, co napisałeś. Zależy od implementacji.
edytowany 2x, ostatnio: enix
Młody
  • Rejestracja:około 22 lata
  • Ostatnio:ponad 10 lat
  • Postów:418
0

Czyli zacząć od podstaw SQL :)

PA
  • Rejestracja:prawie 13 lat
  • Ostatnio:prawie 13 lat
  • Postów:3
0
  1. Nie wiem czy dobrze zrozumiałem, ale wydaje się, że właśnie wszystko mam tak jak napisałeś z tym, że wciąż wyświetla mi wyposażenie wszystkich pokoi w drugim DBGrid'zie. Chciałbym właśnie, że po kliknięciu na wiersz wyświetlą się dane dot. tylko tego jednego pokoju w drugim DBGridzie. Komendę "Select" sobie napiszę tylko nie wiem gdzie ją umieścić, bo nie do końca rozumiem środowisko Delphi. Myślałem, że coś trzeba napisać w event "OnCellClick", ale nie jestem tego pewien.

  2. No mam DBGrid'y i to co widać tutaj: http://imageshack.us/photo/my-images/17/rezerwacje.jpg/
    Tylko gdzie mam wpisać to co podałeś, aby po zaznaczeniu działo się to co chcę oraz po zaznaczeniu drugiego działały oba naraz.

  3. Chodzi o to, że klient wybierze pokój, poda termin w jakim chce się tam zatrzymać oraz swoje dane personalne. Chciałbym, aby po kliknięciu przycisku "zatwierdź rezerwację" zapisywano rezerwację z jego ID, ID klienta o ile go nie ma jeszcze w bazie oraz nową rezerwację. Nie wiem czy nie będę zmuszony o wrzucenie schematu całej bazy, abyście mogli mi pomóc.

Możliwe, że nie zrozumiałem wszystkiego co mi napisałeś. Jeśli tak jest to przepraszam.

enix
  • Rejestracja:prawie 13 lat
  • Ostatnio:około 12 lat
  • Postów:23
1
  1. Nie musisz obsługiwać żadnego eventu. Kiedy poruszasz się po DBgridzie z pokojami, w datasecie IBQuery_pokoje za tym podąża kursor, czyli bieżący rekord. Ten z kolei wpływa automatycznie na odświeżanie z odpowiednim parametrem IBQuery_wyposazenie.
  2. Musisz obsłużyć event ChechBox.OnClick, w którym należy modyfikowć zapytanie w IBQuery_pokoje w części: ...wyposazenie_id IN ( internet_id, balkon_id, ... ))
  3. Owszem musisz raczej zapodać cały schemat, wtedy pomogę.
PA
  • Rejestracja:prawie 13 lat
  • Ostatnio:prawie 13 lat
  • Postów:3
0

Schemat: http://imageshack.us/photo/my-images/525/modelzx.jpg/

  1. Coś chyba robię źle. Mam tak:
    I DBGrid
    IBQuery1 i w properies okienko DataSource jest puste, a SQL:
    select ID_POKOJ, NUMER, CENA, NAZWA, MIASTO, ADRES_H, DOBA_OD, DOBA_DO
    from POKOJ p join HOTEL h on p.ID_Hotel=h.ID_Hotel
    DataSource1 gdzie w properies ustawiam IBQuery1
    DBGrid1 i w properies ustawiam DataSource1

    II DBGrid
    IBQuery2 mam ustawione DataSource1, a w SQL:
    select p.ID_POKOJ,TYP_W, OPIS_W_SZCZEGOLY
    from WYPOSAZENIE w1 join WYPOSAZENIE_SZCZEGOLY w2 on w1.ID_WYPOSAZENIE=w2.ID_WYPOSAZENIE join POKOJ p on p.ID_POKOJ=w2.ID_POKOJ
    DataSource2 ustawiam w properies IBQuery2
    DBGrid2 i w properies ustawiam DataSource2.

Efekt jest taki, że o ile DBGrid1 jest taki jak chcę, to jakoś nie widzę połączenia między DBGrid1 i DBGrid2, ponieważ wciąż pokazuje mi wyposażenia wszystkich pokoi, a nie klikniętego. Prawdopodobnie mam błąd w drugim kodzie SQL, ale pewien nie jestem. Mam nadzieję, że po otrzymaniu modelu problem stał się łatwiejszy do wyobrażenia.

Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)