aktualizowanie wieszy w DBGrid Builder

Problemy związane z tworzeniem i zarządzaniem programami bazo-danowymi.
Regulamin działu


Zadając pytania dotyczące baz danych należy podawać szczegółowe informacje o bazie danych nad którą się pracuje, czyli:

  • Rodzaj serwera bazodanowego: MySql, MSSQL, Oracle itp.
  • Wersja bazy danych
  • Technologia bazodanowa używana w programie: ADO, DbExpress, InterBase
  • Komponenty użyte do zestawienia połączenia: ADOConnection, SqlConnection
  • Sposób zestawienia komponentów bazodanowych np. DataSet - DataSource - DbGrid lub DataSet - DataSetProvider - ClientDataSet - DataSource - DbGrid
  • Jeżeli używane były biblioteki innych firm niż Borland, CodeGeer i Embarcadero proszę podać ich nazwy, numer wersji i adres źródła.

Re: aktualizowanie wieszy w DBGrid Builder

Nowy postprzez butchermw » poniedziałek, 21 marca 2011, 10:44

Interesuje mnie aktualizacja danych w DBGrid za każdym razem jeśli zostanie zaktualizowany lub dodany nowy rekord, i dlatego najbardziej satysfakcjonuje mnie odświeżanie danych co 1sekundę lub takie rozwiązanie by po każdej aktualizacji w bazie lub dodaniu nowego wpisu program pobierał wszystkie dane do DBGrida.
Wole żeby aktualizacja danych w DBGrid odbywała się z poziomu programu a nie użytkownika :) użytkownik musi mieć aktualne informacje.
Avatar użytkownika
butchermw
Bladawiec
Bladawiec
 
Posty: 23
Dołączył(a): niedziela, 26 grudnia 2010, 00:39
Podziękował : 0
Otrzymał podziękowań: 0
System operacyjny: WinXP/Win7
Kompilator: Builder6
Builder2010
Gadu Gadu: 0
    Windows XPFirefox

Re: aktualizowanie wieszy w DBGrid Builder

Nowy postprzez Corvis » poniedziałek, 21 marca 2011, 11:43

No to tak:

1. Po wywołaniu funkcji dodawania nowego rekordu w bazie odświeżasz ClientDataSet - załatwia ci to problem aktualizowania danych dla jednego użytkownika pracującego na programie.

2. Jeżeli Dane dodane przez jednego usera mają być widoczne u drugiego odrazu gdy zostały dodane to trzeba rozważyć 2 przypadki.

A - Użytkownik nie widzi DBGRIDA który wyświetla dane właśnie zaktualizowane. Rozwiązanie jest proste - otwarcie formy, zakładki itp. z tym DBGRIDEM i pobranie danych. Aktualizacja następuje poprzez pobranie danych.
B - Użytkownik A dodaje dane które wyświetla DBGRID A, Użytkownik B ma otwarte okno zakładkę itd. z DBGRIDEM A. Możliwości aktualizacji to: Przycisk odświeżający ClientDataSeta, no i ten twój timer który co jakiś czas odświeży dane - osobiście nigdy nie pisałem czegoś takiego i nie mam doświadczenia w pisaniu takich rozwiązań. Te rozwiązanie z timerem jakoś mi się nie podoba chyba, że jest rozsądnie czas dobrany. Rozejrze się za innym sposobem odświeżania o ile taki jest :-)
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
Podziękował : 80
Otrzymał podziękowań: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    Windows VistaChrome

Re: aktualizowanie wieszy w DBGrid Builder

Nowy postprzez butchermw » poniedziałek, 21 marca 2011, 12:13

Przymierzam się do rozwiązania z zastosowaniem Timera, ale sprawdzę jeszcze co będzie gdy w bazie nie będę miał 3000 rekordów tylko 20000, jeżeli będzie to chodziło w miarę szybko ;) to zostawię Timera a jeśli nie to spróbuję zastosować oddzielną tabele w której będą zapisywane informację do aktualizowania wpisów i program właśnie w timerze będzie sprawdzał czy pojawił się nowy wpis lub który wpis został zmieniony i wtedy odświeży dane w DBGrid.

PS
użytkownik pracuje na DBGridzie cały czas otwartym podobnie jak w programie Sage Symfonia
Avatar użytkownika
butchermw
Bladawiec
Bladawiec
 
Posty: 23
Dołączył(a): niedziela, 26 grudnia 2010, 00:39
Podziękował : 0
Otrzymał podziękowań: 0
System operacyjny: WinXP/Win7
Kompilator: Builder6
Builder2010
Gadu Gadu: 0
    Windows XPFirefox

Re: aktualizowanie wieszy w DBGrid Builder

Nowy postprzez Corvis » poniedziałek, 21 marca 2011, 12:23

Przy 20000 i gołym select-cie bez funkcji, powinno chodzić błysk ( o ile masz dobrze baze napisaną, i select wybiera tylko to co potrzeba a nie gwiazdkę ). Nie no rozwiązanie z tabelą bardziej boli niż odświeżenie ClientDataSeta :-) Został bym przy TTimerze co 20-60 sekund.


Ps. Dane odświeżasz w ClientDataSet nie w DBGrid ;) to tak w ramach ścisłości



EDIT:

Przemyślałem ten czas odświeżania i jednak dochodzę do wniosku, że lepiej zrób sobie możliwość ustawienia czasu odświeżania bo nawet i te 20-60 sekund to dość szybko. Chyba, że dane napływają naprawdę szybko do bazy.
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
Podziękował : 80
Otrzymał podziękowań: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    Windows VistaChrome

Re: aktualizowanie wieszy w DBGrid Builder

Nowy postprzez butchermw » wtorek, 22 marca 2011, 14:02

Sprawdziłem jak program będzie się zachowywał przy pobraniu z pięciu kolumn tabeli 13000 rekordów i zauważyłem że przy odświeżeniu ClientDataSet trwa to około 1,5sekundy w takim razie zastosowanie Timera np co 1sek. nie zda egzaminu, zamierzam stworzyć jednak dodatkową tabele i skonstruować mechanizm dzięki któremu program po sprawdzeniu w bazie że zostało coś zmienione lub dodane to wtedy uruchamia odświeżanie danych. Zakładam że będzie w sieci trzech użytkowników którzy będą mieli uprawnienia do dodawania jak i edycji wpisów z jednej bazy. Co myślicie o takim rozwiązaniu??
Avatar użytkownika
butchermw
Bladawiec
Bladawiec
 
Posty: 23
Dołączył(a): niedziela, 26 grudnia 2010, 00:39
Podziękował : 0
Otrzymał podziękowań: 0
System operacyjny: WinXP/Win7
Kompilator: Builder6
Builder2010
Gadu Gadu: 0
    Windows XPFirefox

Re: aktualizowanie wieszy w DBGrid Builder

Nowy postprzez Corvis » środa, 23 marca 2011, 00:12

Opisz dokładnie jak to ma niby działać ?? bo nie widzę innej opcji jak cyklicznie co jakiś czas sprawdzać tabelę. Od razu kłaniają się wyzwalacze afrer edit i afrer insert. Musisz też wziąć pod uwagę jedną rzecz, bazę z tego co pisałeś, chyba masz na LOCALHOST a to też trochę wnosi w temat wydajności. 13000 to naprawdę mały zbiór danych :-) Kolejność warunków w zapytaniu SQL w czas jego wykonania, kolejność złączeń itd. Osobiście polecam postawić bazę na docelowym sprzęcie i sprawdzić wszystko.
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
Podziękował : 80
Otrzymał podziękowań: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    Windows VistaChrome

Poprzednia strona

Powrót do Bazy danych

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 2 gości

cron