Sprawdzanie najnowszego rekordu Zeos

0

Witam serdecznie pisze aplikacje ktora po pojawieniu sie danego rekordu w bazie danych odtwarza dany dzwiek na komputerze. Obecnie jest wlaczony timer ktory co sekunde robi

qrMonit.Refresh

(TZQuery) i na DBGid rekordy wyswietlaja sie poprawnie niestety nie mam pojecia jak wylapac ten "Nowy" rekord ktory sie pojawil i odtworzyc dzwiek od razu mowie iz

qrMonit.close; qrMonit.open;

nie wchodzi w gre poniewaz na onCreate formatki jest ustawiany

qrMonit.Filter :='(data_zdarzenia >= ' +#39+ FormatDateTime('YYYY-MM-DD HH:mm:SS',Now) +#39 + ')';
qrMonit.Open;

Probowalem ustawic na timerze qrMonit.First niestety co sekunde wracalo mi na pierwszy rekord bez wzgledu czy byl on nowy czy nie w dodatku jesli w trakcie tej sekundy w bazie pojawily sie np 3 rekordy to te 2 rekordy pomiedzy byly na gridzie ale nie dalo sie odtworzyc dzwiekow do nich przypisanych.

Mam nadzieje iz wyjasnilem dokladnie o co mi chodzi i ktos da rade mi pomoc

Pozdrawiam

0

Można np. tak:

Dodać w tabeli pole NOWY i przy dodawaniu rekordu ustawiać na TRUE.
A potem wybierać tylko nowe odegrać dźwięki, i NOWY ustawić na FALSE.

0

Nie do konca program dziala 2 etapowo. Pierwszy etap to oddzielna aplikacja ktora odpowiada za nasluch i insert do bazy bedzie tam np zdarzenie 1 device 1, zdarzenie 1 device 3, itd itd Ja w aplikacji klienckiej ktora bedzie tylko odczytywac ta baze pobieram rekord z bazy wyswietlam na dbgrid i odtwarzam dzwiek przypisany do zdarzenia. Twoj pomysl wymagalby odpytania bazy danych pobrania rekordow z flaga nowy odtworzenia dzwiekow i zmianie ich flagi niestety aplikacja bedzie dzialac gdy tylko na jednym kompie odpalimy aplikacje kliencka bo po zmianie flagi inne stacje robocze beda widzialy juz flage ktora jest zmieniona poza tym dodatkowe zapytanie sql znacznie spowolni dzialanie programu. Tak jak mowie na dbgrid wszystko dziala tak jak chce po refresh grid ma posortowane rekordy w trybie malejacym i zdarzenia sa odpowiednio nazwane, pokolorowane niestety na dbGridDrawColumnCell odtwarzanie dzwiekow nie dziala tak jak bym chcial ;)

0

możesz zrobić sqla, który wybierze tylko rekordy dodane od ostatniego sprawdzania

0

jest cos takiego w sql jak LAST_INSERT_ID() niewiem na jakiej bazie ty działasz ale to podaje ci ID ostatnio dodanego rekordu wiec wystarczy sprawdzac czy to Id sie zmienilo od ostatniego sprawdzenia i gotowe

0

Puchi ja pracuje na postgresql 8.4 ale nie wiem czy ostatni id mi cos da z tego wzgledu ze tak jak mowie jesli w danym momencie bedzie dodane kilka rekordow to na refresh zquery wskakuje mi najnowszy dlatego potrzebowalbym to jakos wylapac bezposrednio na query

0

zakladajac ze kazdy rekord pobrany z wyswietlanej tabeli ma swoj unikalnu identyfikator i te unikalne identyfikatory sa nadawane podczas insertu rekordu to mozna podczas odswiezania zapamietac najwiekszy identyfikator w zmiennej.. i jesli podczas refresha wystapi rekord o identyfikatorze wiekszym niz zapamietany podczas ostatniego odswiezania to znaczy ze mamy do czynienia z rekordem NOWYM..

0

zajcev masz racje i tak tez mam zrobione ze pobieram ostatni rekord przed refreshem i najnowszy po refreshu wrzucam to w petle i jade po rekordach niestety ... jest to malo efektywne

0

woolfik baza sama nie powiadomi aplikacji o nowym rekordzie (tak mi sie wydaje) wiec jedynym sposobem jest co jakis czas sprawdzanie czy sa nowe, pobranie nowych i odtwarzanie dla nich dzwieku. mozesz robic tak jak w tej chwili albo moze jakims triggerem sie to da zalatwic.
sugerował bym zapytac uzytkownika misiekD z jego postow wnioskuje ze ma obszerna wiedze na temat baz danych moze ci cos doradzi.

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