Wskazywanie rekordu na DBGridzie

0

Delphi 5, lokalna baza Paradox
Mam połączone ze sobą:

nazwa_wyjscia: TTable
wyjscia: DBGrid

procedura:

nazwa_wyjscia.First ;

przestawia wskaźnik rekordu w DBGridzie na pierwszą pozycję,
ale tylko wtedy gdy program uruchomiony jest w środowisku Delphi.
Gdy uruchamiam program z exe-ka wskaźnik rekordu na
DBGridzie nie zmienia swojego położenia.
Kasowałem exe-ka i budowałem go od nowa, efekt ( jego brak) ten sam.
Nie bardzo wiem jak to ugryźć.

0

błąd/przyczyna musi być gdzie indziej

0

Nie wiedziałem gdzie szukać przyczyny, teraz już wiem: GDZIE INDZIEJ.
Z braku innych propozycji zacznę właśnie TAM ;-(

1

możesz też poszukać w SWOIM kodzie SAM bo oczywiście kod jest tajny i nikt go zobaczyć nie może... Czego się spodziewałeś, że ze szklanej kuli ktoś coś wywróży??

0

OK.
Tajemnic nie ma.
Załączam kod.
Być może są w nim rzeczy, których ja nie widzę.

procedure TWyjscia.Lista_mieszCellClick(Column: TColumn);
Var
 znaleziony: Boolean ;
 label dalej ;

 begin
 znaleziony := False ;
 nazwa_wyjscia.First ;    // i to wszystko odnoście TTable nazwa_wyjscia

      While not tab_uczni.Eof do
        Begin
           if ((lista_uczniow.FieldByName('Nazwisko').AsString  = tab_uczni.FieldByName('Nazwisko').AsString) and (lista_uczniow.FieldByName('Imie').AsString = tab_uczni.FieldByName('Imie').AsString)) then
                Begin
                  znaleziony := true;
                  goto dalej ;
                end;
           tab_uczni.Next ;
        end;

dalej:

E_nazwisko.Text := '' ;
E_imie.Text := '' ;
E_pokoj.Text := '' ;
E_dokad.Text := '';
E_godz.Text := '' ;
 wybor_lewy.Checked := true ;

     E_nazwisko.Text := lista_uczniow.FieldByName('Nazwisko').AsString ;
     E_imie.Text := lista_uczniow.FieldByName('Imie').AsString ;
     E_pokoj.Text := lista_uczniow.FieldByName('Pokoj').AsString ;
     Lab_osoba.Caption := 'Uczeń wychodzący.' ;
   
end;
0

a gdzie po tej operacji jest zaznaczenie na dbgridzie?

0

Nawet nie próbowałem dobierać się do DBGrida.
Skoro jest on połączony z TTable to przesuwanie wskaźnika rekordu
w TTable (w innych sytuacjach) skutkuje przesuwaniem tego wskaźnika na DBGridzie.
W tym jednym przypadku nie zadziałało - stąd moje pytanie.
I nie proszę o gotowca, ale sugestię w jakim kierunku muszę grzebać, by osiągnąć założony efekt.
Z góry dziękuję.

0

Co to za DBGrid? Tak dokładnie się zachowuje X-DBGrid w wersji trial, o ile dobrze pamiętam ;-)

0

DBGrid jest komponentem wyświetlającym w formie arkusza zawartość tabeli przechowującej dane.
Myślę, że X-DBGrid spełnia identyczną rolę.

0

Ufff ...
Zrobiłem to tak:

 data_wyjscie.DataSet.Close  ;
 data_wyjscie.DataSet.Open ;

i wskaźnik na

wyjscia: DBGrid

ustawia się na pozycji pierwszej.

A jeszcze lepiej:

 data_wyjscie.DataSet.First ;
0

@Świetny pomidor - formatuj swój kod i stosuj się do jakiejś sensownej zasady nazewnictwa, bo Twój kod wygląda bardzo źle... I jeszcze te GoTo, jakby nie można było normalnie użyć Break... A jeszcze lepiej było by przenieść kod do warunku pętli, a po nim wywołać Exit:

procedure TWyjscia.Lista_mieszCellClick(Column: TColumn);
begin
  nazwa_wyjscia.First;
 
  while not tab_uczni.EoF do
  begin
    if ((lista_uczniow.FieldByName('Nazwisko').AsString  = tab_uczni.FieldByName('Nazwisko').AsString) and 
        (lista_uczniow.FieldByName('Imie').AsString = tab_uczni.FieldByName('Imie').AsString)) then
    begin
      E_nazwisko.Text := '';
      E_imie.Text := '';
      E_pokoj.Text := '';
      E_dokad.Text := '';
      E_godz.Text := '';

      wybor_lewy.Checked := True;

      E_nazwisko.Text := lista_uczniow.FieldByName('Nazwisko').AsString;
      E_imie.Text := lista_uczniow.FieldByName('Imie').AsString;
      E_pokoj.Text := lista_uczniow.FieldByName('Pokoj').AsString;
      Lab_osoba.Caption := 'Uczeń wychodzący.';

      Exit;
    end;

    tab_uczni.Next ;
  end;
end;

Dodaj do tego swoje zmiany i powinno być dobrze.

0

Dzięki. Uwzględnię sugestie.
A z tym powinno być dobrze ...
niestety wyszło jak zwykle. W domu działa ślicznie (Win7, Delphi 5 Enterprise, procesor i3 (3,3 Ghz) RAM 4 Gb).
W pracy ten sam kod, ale (Win XP, Delphi jw., ale procesor Core Duo 2,3 Ghz, RAM 1 Gb) i już wskaźnik z którym walczę
nie przesuwa się na pozycję pierwszą.
Czyli problem nadal mam, ale na pewno nie wynika on z kodu.
Czyli jestem udupiony, bo w pracy nikt mi sprzętu i windy nie wymieni.
Bywa i tak.
Wszystkim serdecznie dziękuję, bo dzięki Wam znów jestem do przodu w programowaniu.
... a że nie wyszło - mówi się trudno.

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