Złe wyświetlanie rekordu z bazy

0

Witam...
Mam problem z wyświetleniem zaznaczonego rekordu w DBGridzie na innej formie tzn:

Na pierwszej formie mam DBGrida, w którym mam przedstawioną zawartość bazy. Po zaznaczeniu jakiegokolwiek rekordu i kliknięciu w Button, chciałbym przejść do drugiej formy, na której mam tą samą bazę, ustawioną na wybranym rekordzie z pierwszej formy. Mam taki kodzik:

procedure TForm1.Button1Click(Sender: TObject);
begin
Form2.Showmodal;

Form2.Table1.Filter := 'ID = '+ QuotedStr (DBEdit3.Text);
  Form2.Table1.Filtered := True; 

end;

Wszystko działa tylko ... no własnie, po przejściu do drugiej formy mam wyświetlony poprzedni rekord, niż ten który wybrałem na pierwszej formie. Zamknięcie tej drugiej formy i ponowne jej otwarcie ustawia mi bazę na właściwym rekordzie to znaczy na tym który wskazałem na pierwszej formie.
Wygląda to tak , że ponowne otwarcie drugiej formy jakby odświeżało bazę. No ale przecież nie każę użytkownikowi dwa razy otwierać okno , aby baza ustawiła się na właściwym rekordzie :-D
Proszę o jakąś wskazówkę , gdzie popełniam błąd.

0

jak najpierw robisz ShowModal a potem ustawiasz rekord to nic dziwnego

0

poza tym jezeli pracujesz na tych samych datasetach, tabelach czy czymkolwiek to robiac odwolanie do tych komponentow juz jestes ustawiony na wlasciwym rekordzie.

0

Czyli zostaje tylko wyświetlenie formy niemodalnej? Bo na takiej formie wszystko śmiga prawidłowo. Ale ja jednak wolałbym, aby ta druga forma była formą modalną. Może jakaś inna metoda niż filter i filtered [???]

0

ludzie przecież to jest obłęd. Ozume mam nadzieję, że to tylko chwilowa zaćma a nie Twój normalny stan umysłu. Przeczytaj to co napisałem w pierwszym poście ze 3 razy i pomyśl!

0

Misiekd spokojnie to ani stan umusłu , ani zaćma umysłowa, ani pomroczność jasna :-D i co tam jeszcze mozna wymyslić. Po prostu szybko przeczytałem twoja odpowiedż i przyznaję się , że niezbyt uważnie. To tyle: Oczywiście przestawiłem kolejnośc komend czyli:

procedure TForm2.Button1Click(Sender: TObject);
begin


Form4.Table1.Filter := 'ID = '+ QuotedStr (DBMemo3.Text);
  Form4.Table1.Filtered := True;

Form4.Showmodal;

end;

i oczywiście wszystko działa na formie modalnej [green]
Dziękuję.
Natomiast w związku z tym że , to mój pierwszy programik a zacząłem 3 tygodnie temu naukę pisania programów w środowisku Delphi, może wytłumaczyłbyś mi dlaczego tak musi być, to znaczy najpierw ustawienie filtra a dopiero potem wywołanie formy modalnej? To że mi to działa to nie wystarcza chciałbym na przyszłość wiedzieć dlaczego tak ma być. Z tego co zdążyłem zobaczyć na tym forum to jesteś zaawansowanym programistą i chyba specjalizujesz się w bazach.
Z góry dziękuję za wyjaśnienia.

0

rozwiązania są trzy

  1. postawić breakpointa na linijce z ShowModal i zobaczyć co się dziej
  2. najechać kursorem w edytorze delphi na ShowModal i wcisnąć F1
  3. wpisać w google modal window lub okno modalne
    co kto woli

A że dzisiaj jest dzień dobroci :p to w kilku słowach - okno modalne blokuje wykonanie jekichkolwiek poleceń poza poleceniami, które ono samo wywoła (w sensie np. jego przyciski) aż do momentu kiedy zostanie zamknięte. Dlatego też jak najpierw masz ShowModal to dopóki nie zostanie ono zamknięte nie wykona się filtrowanie tablei. Przy ponownym jego pokazaniu masz dane przefiltorawane ale starym filtrem.

0

:-) Hej...
Dzięki Misiekd za wyjaśnienie problemu, teraz będę pamiętał o tym do końca życia, taki już jestem. A co do szukania odpowiedzi, to na forum znalazłem identyczny problem napisany dawno temu przez kolegę o nicku Anax, ale bez wyjaśnienia. Natomiast faktycznie trzeba zaczać używać intensywniej Google. W każdym razie już raz mi Pomogłeś , wtedy obiecałem że tu wrócę :-D i ponownie obiecuję że jeszcze nie raz, będę pytał o radę [green] .

1 użytkowników online, w tym zalogowanych: 0, gości: 1