Poczatkiz D2007, MSSQL2005 i AnyDAC

0

Witam

Są to moje początki z D2007, MSSQL2005 i AnyDAC

Tworze małą aplikacje sieciową składająca się z 3 tabel w układzie Master->detail-master->Detail2
Będą do niej przeniesione dane z baz dbf, obecnie tabela master ma 5 tyś rekordów, tabela detail-master 25 tyś rekordów a tabela detail2 280 tyś rekordów – za jakieś 2-5 lata ilość ta się może podwoić.
Przede szystkim operacje odbywają się na detail2 (dopisanie rekordu) ale aby dopisać rekord w Detail2 każdorazowo należy wychodzić od master.
Ilość pobranych danych do wyświetlania wacha się od 20-50 rekordów, ilość użytkowników mx 6-7 – wprowadzanie danych odbywa się przez 5-6 godzin dziennie (jest tego dużo)

Jak właściwie podejść do obsługi połączeń z bazą danych (szybkość działania, odporność na uszkodzenia danych) .

Obecnie założyłem że z powodu dużej ilości danych na starcie aplikacji po połączeniu z bazą pootwieram tabele i zamknę je dopiero podczas zamykania aplikacji.
Czy powyższe ma jakiś sens poprawnego działania? Jak zbroić to lepiej.

0

nie bardzo ma sens. Powinieneś

  1. zanim pobierzesz jakiekolwiek dane z master zapytać usera o kryterium, które zawęży docelową ilość danych. Nikt nie jest w stanie ogarnąć 5-10tyś rekordów w gridzie.
  2. jak masz zawężone dane master to pobierasz tylko tyle ile Ci (userowi) w danej chwili potrzeba. User powinien mieć możliwość w każdej chwili zmienić kryteria wyświetlania.
  3. po wybraniu POZYCJI w master ściągasz TYLKO te pozycje z detail, które są powiązane z master
  4. i analogicznie dopiero po wybraniu pozycji w detail ściągasz tylko te dane z detail2 które są powiązanie z detail

Możesz coś takiego zrobić automatycznie na komponentach ADQuery - właściwość MAsterSource o ile dobrze pamiętam

0

Dziękuje za odpowiedz
Jeżeli chodzi o samo wyświetlanie danych to właśnie tak mam zrobione że wyświetlając dane master zawężam do grupy a później wybieram jeden rekord i na jego podstawie pobieram dane z detail-master i analogicznie na podstawie wybranego elementu z detail-master wyświetlam dane z detail2- więc w gridach mam wyświetlane 20-50 rekordów.

Mam wątpliwości czy otwarcie wszystkich tabel na dzień dobry i zamknięciu przy zamykaniu programu to dobry pomysł - mnie się wydaje że tak ale wole spytać znawców tematu .
Jednakże gdzieś czytałem w sieci że ze względu na szybkość pracy, odporność na uszkodzenia bazy powinno się np każdorazowo przy wchodzeniu do grida otwierać tabele a po wyjściu zamykać lub nawet otwierać i zamykać połączenie z bazą. Nie testowałem tego ale wydaje mi się że dla użytkownika wprowadzającego dane to by trochę za długo trwało.
Jakie podejście w tym temacie jest najlepsze, jakie powinno być.

0
  1. przy programach desktopowych połączenie z bazą jest aktywne zazwyczaj cały czas, tj. nawiązywane przy starcie aplikacji i zamykane przy kończeniu aplikacji.
  2. nie bardzo rozumiem co masz na myśli pisząc "otwarcie wszystkich tabel na dzień dobry". Jeśli masz zamiar je otworzyć na starcie i zamknąć przy kończeniu to co zrobisz jeśli zmieni Ci się pozycja w master - jak pokażesz odpowiednie pozycje z detail i subdetail nie pobierając ich z bazy?
0

Witam

Po podłączeniu do bazy dla wszystkich tabel ustawiam open a przy zamykaniu aplikacji close i zamykam aplikacje - w trakcie działania alokacji zamykam i otwieram tylko tabele master aby pobrać żądane dane.
Podłączanie do bazy i tabele mam w DM. W detail wybór odpowiednich danych mam zrobiony w oparciu o parametry w selectach (dla uproszczenia pisałem tylko o 3 głównych tabelach ale w aplikacji mam jeszcze 3 małe tabele "słownikowe" (z danymi do list wybieralnych)) .

Na formie1 mam master i wybieram żądana pozycje i przechodzę do formy2 gdzie mam 2 gridy detail-master i detail2 i tu również zmieniając pozycje w tabeli detail-master w tabeli detail2 widzę tylko dane przypisane do wybranego rekordu w tabeli detail-master

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