(delphi) Niezdecydowany DBGrid/dataset

0

Witajcie

W moim programie aby odświeżyć zawartość tabeli zamykam po czym otwieram dataseta. Ta operacja powoduje że kursor leci na pierwszy rekord. Pomyślałem że zanim odświeżę dataseta pobiorę numer rekordu (dataset.RecNo) a potem go znów podstawie. Wszystko gra jeśli w trakcie odświeżania kursor jest na jednym z 28 pierwszych rekordów (Dokładnie tyle jednocześnie wyświtla DBGrid, bo więcej się nie mieści w oknie), natomiast jeśli kursor jest na jednym z kolejnych rekordów mimo przypisania dastaset.RecNo:=33; i tak ląduje na początku tabeli.

Wiecie o co chodzi?

0

aby zaznaczyć miejsce w którym byłeś jest do tego bookmark, pobierasz jego wartość przez getbookmark a wracasz gotobookmark (chyba tak to leciało ;) ) chociaż ważne tu jest hasło kluczowe bookmark !

0

Też to ćwiczyłem, Locate też, wszystko zawsze działa tylko na takiej ilości pierwszych rekordów ile mieści się jednocześnie w oknie.

0

co ty nie powiesz. Wszystkim działa tylko nie tobie ...

0

Mógłbyś sobie podarować, jak chcesz to ci nakręcę film.

0
ja3 napisał(a)

... wszystko zawsze działa tylko na takiej ilości pierwszych rekordów ile mieści się jednocześnie w oknie.

To jakieś bzdury, tak jak napisał MisiekD, wszystkim działa, tylko Tobie nie, używam Dataset.RecNo praktycznie w każdym programie i działa bez problemu, musisz mieć coś skopane...

0

Jaka baza i jakie komponenty bazodanowe?
Może masz ustawione PackedRecords w ClientDataSet?

0

Jeżeli w DB Gridzie wyświetlane jest tylko 28 rekordów, komponent nie widzi 33. Proszę wykonac polecenie FetchAll dla tabeli, wtedy komponent będzie "widział" całą zawartość tabeli.

0

Ech...
Pisane z głowy

var
  bk: string;
begin
  bk:=dataset.bookmark;
  dataset.close;
  dataset.open;
  dataset.bookmark:=bk;
end;  
0

baza - firebird 2.1
kontrolki UIB

Nie ma chyba w tych kontrolkach czegoś takiego jak FetchAll.

Pisałem już że z bookmarkami jest to samo.

0

Ustaw FetchBlobs na True.

0

Niestety nadal jest tak samo.

0

Co to jest za komponent UIB?
FetchAll jest własnością TBDEDataSet. Proponuję wyświetlić help i wpisać FetchAll.

Poza tym, jeżeli do wyświetlenia tabeli uzywasz JAKIEGOKOLWIEK komponentu Table (DBTable, IBTable, czy co tam jeszcze) to FetchAll MUSI BYĆ, bo jest to niezbędny składnik każdego SYSTEMU ZARZĄDZANIA BAZAMI DANYCH, również mechanizmów wbudowanych w Delphi. To dzięki takim mechanizmom SZBD może określić zasięg rekordów do wyszukiwania (between), etc.

przykład:
dmBazyDanych.tblTabela.FetchAll()

I proszę tego nie szukać w ObjectInspectorze.

Ewentualnie, proszę zamieścić kawałek kodu.

Pozdrawiam.

0

nie używam komponentu table tylko dataset. W paczce UIB (http://www.progdigy.com/?page_id=5) nie ma table. Ten dataset na pewno nie ma fetchall, nawet źródła przejrzałem.

0

Może zrezygnuj z UIBDataSet na rzecz UIBQuery albo komponenty IB (z zakładki InterBase).

0

Odkryłem bardzo interesujący fakt. Mianowicie następujący kod spowoduje powrót do pierwszej lini tabeli zamiast ostatniej:

  
  okno.showmodal;

  with dm.DataSet do
  begin
    close;
    Open;
    while not Eof do Next;    
  end;

Natomiast taki kod wyświetli wiadomość 'asd' po czym skoczy do ostatniego wiersza tabeli:

  
  okno.showmodal;
  showmessage('asd');
  with dm.DataSet do
  begin
    close;
    Open;
    while not Eof do Next;    
  end;

To wygląda tak jakby był jakiś problem z focusami, bo dataset przechodzi po kolei po wszystkich! polach po czym skacze na pierwsze. Wiecie o co chodzi?

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