Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Aktualizowanie pol zgodnie z polem Kombi
Forum PHP.pl > Forum > Bazy danych > Access
Leo82
Witam wszystkich.

Na wstępie chce zaznaczyć że jestem nowym użytkownikiem więc prosze o wyrozumiałość, będe monitorował temat i udzielał niezbędnych informacji na bierząco.

Chciałbym was prosić o pomoc w rozwiązaniu problemu.

Mianowicie mam tabele z danymi Klientów(id,Imie,Nazwisko,Adres,miasto,etc.).
I tabele wykonywanych zleceń(nr zlecenia, usluga, id_klienta, nazwisko, imie).

Dane w Tabeli zlecenia uzupełniam z formularza dla tej tabeli, gdzie id klienta jest polem kombi i po wybraniu z listy odpowiedniego ID_klienta chciałbym aby w pozostałe pola(nazwisko, imie) w formularzu automatycznie wskakiwała odpowiednia wartość dla wybranego numeru ID.

Jakiś czas staram sie to zrobić ale coś mi nie wychodzi nie wiem gdzie leży błąd.
Cezar708
Witamy na forum,

Na wstępie prześlij kawałki kodu (wrzucając je używaj bbCode), to znacznie uprości diagnostykę.

Pozdrawiam
Leo82
hehe...

Kodu...za bardzo nie wiem o jaki kod chodzi, powiem co mam:

To jest praca z Accessem 2k

Tabele Klienci która jest źródłem rekordów z danymi klientów. Kwerende na podstawie tej tabeli. I tabele Zleceń w której to kilka wybranych pol odpowiada polom w tabeli klienci. Chciałbym aby po wyborze(z pola kombi) identyfikatora klienta(unikatowego ciagu cyfr który jest kluczem w tabeli klienci) w formularzu obsługującym Tabele Zleceń, uzupełniały sie pola(tekstowe) Nazwisko Klienta i Imie Klienta(i np adres jeśli dodadm takową kolumne).

Pracowałem troche z accesem(niewiele), ale nie bardzo wiem jak to zrobić...
Cezar708
hmm w zasadzie to masz błąd w sztuce...

Kod
klienci(id,[b]Imie,Nazwisko[/b],Adres,miasto,etc.).
zlecenia(nr zlecenia, usluga, id_klienta, [b]nazwisko, imie[/b])


absolutnie nie jest Ci potrzebna duplikacja tych danych. Po prostu jeśli będziesz chciał wyciągnąć nazwisko klinta z bazy danych to wystarczy Ci proste zapytanie do dwóch tabel na podstawie wspólnej relacji:

  1. SELECT z.nr zlecenia, z.usluga, z.id_klienta, k.Imie, k.Nazwisko
  2. FROM zlecenia z, klienci k
  3. WHERE k.id = z.id_klienta


czyli pola `imie` i `nazwisko` w tabeli `zlecenia` jest całkowicie niepotrzebne. Jest to powójne pisanie tego samego do bazy danych

Ale jeśli jesteś uparty i koniecznie chcesz aby po wybraniu opcji kombo wpisywało się nazwisko do formatki to możesz zrobić to tak:

1. Ściągasz listę klientów z bazy i przepisujesz ją do zmiennej java script:

  1. <?php
  2. $parts = array();
  3. foreach( $arrKlienci as $klient ){
  4.  $parts[] = "new Array('{$klient['id']}','{$klient['imie']}','{$klient['nazwisko']}')";
  5. }
  6. echo "<script>
  7. var arrKlients = new Array(".implode(", ", $parts).");
  8. </script>";
  9. ?>


2. Zakładam, ze interesująca nas część Twojej formatki wygląda mniej więcej tak:
  1. <select name="id" id="id" onchange="przypiszDoPol(this)">
  2. <option value=""></option>
  3. <option value="2">2</option>
  4. <option value="122">122</option> <!-- i tak dalej... -->
  5. <input type="text" value="" name="imie" id="imie">
  6. <input type="text" value="" name="nazwisko" id="nazwisko">


3. następnie w samym templacie piszesz taki skrypt:
  1. function przypiszDoPol(sel){
  2. var idKlienta = sel.options[sel.selectedIndex];
  3. for ( var i=0; i<arrKlients.length' i++){
  4. if ( arrKlients[i][0] == idKlienta ){
  5. document.getElementById('imie').value = arrKlients[i][1];
  6. document.getElementById('nazwisko').value = arrKlients[i][2];
  7. return
  8. }
  9. }
  10. document.getElementById('imie').value = "";
  11. document.getElementById('nazwisko').value = "";
  12. }
  13. </script>


oczywiście jest to dość niebezpieczne rozwiązanie, ponieważ przy wielkiej liczbie klientów skrypt może się wolno ładować lub w ogóle się nie załadować. W takich przypadkach lepiej używać ajax (a na ten temat już baardzo dużo na tym forum znajdziesz)
Leo82
Dzięki, analiza kodu zajmuje sporo czasu komuś początkującemu. Mimo to uwaga zawarta w drugim zdaniu okazała sie naprawde bardzo pomocna. smile.gif
spook
Witam serdecznie
Cytat
Dzięki, analiza kodu zajmuje sporo czasu komuś

Odpuść sobie. Jesteśmy w dziale Access i pomoc Cezar708 na niewiele Ci się zda zwłaszcza, że piszesz o sobie początkujący. Radzę otwórz przykładową bazę Northwind a w niej formularz "Zamówienia". Jest to gotowe rozwiązanie Twojego problemu. Po pierwsze zauważ, że źródłem danych formularza jest kwerenda a nie tabela...
Mam nadzieje, że reszta pójdzie z górki.
Pozdrawiam
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.