Results 1 to 4 of 4

Thread: Refresh database

  1. #1

    Refresh database

    Hallo allemaal,

    Ik zit met de volgende situatie.
    Ik heb een Firebird 2.1 database draaien.
    In mijn Delphi programma gebruik ik de IBX componenten om verbinding te maken met de database.

    Wanneer ik nu de data van een tabel update (via update of insert) zie ik de geupdate records keurig verschijnen.
    Als ik nu een tabel update vanuit een ander applicatie (kan de zelfde applicatie zijn maar gestart vanuit een andere computer) zie ik dit niet terug komen in mijn applicatie.
    Als ik mij database manager gebruik zie ik de nieuwe records wel direct als ik een query uitvoer.

    Blijkbaar moet ik voor dat ik een query uitvoer een refresh van mijn tabel doen.

    Maar hoe doe ik dat

    Alvast bedankt

  2. #2
    Een refresh is niet voldoende. Je DBGrid "zit" in een andere transactie die de nieuw gewijzigde records nog niet kan zien.

    Beste is om een "refresh" knop te maken en je Query te Closen en weer te Openen. Afhankelijk van de toepassing zou dit periodiek kunnen of handmatig door de gebruiker.

    Omdat een Close en Open de cursor positie verliest heb ik een routine voor mezelf die eerst de positie op slaat, en na de Close/Open de positie weer kan herstellen. Bij die positie wordt niet alleen het huidige record id opgeslagen maar ook de positie in je DBGrid en exact op welke regel die in de view staat zodat het voor de gebruiker vrijwel niet zichtbaar is dat er een refresh gedaan is.

  3. #3
    Ik maak hierbij geen gebruik van een DBGrid het zijn gewoon losse query's die ik opvraag om te controleren of een bepaalde handeling uitgevoerd mag worden.
    Voorbeeld:
    ik heb een device (uniek nummer en een type meting)
    in App 1 vraag ik middels een query op of dit device gemeten is.
    Is de query leeg is de meting niet uitgevoerd.
    Het meet programma wat op een andere computer draait App2 zal na de meting de record van dit device een update geven door het vinkje van de desbetreffende meting op true te zetten
    Zolang ik App 1 niet afsluit kan ik de query uitblijven voeren maar zie ik geen update.
    Wanneer ik App1 afsluit en weer opstart geeft de query wel een resultaat terug

    Hoe kan ik nu een soort refresh uitvoeren

  4. #4
    Quote Originally Posted by cpri View Post
    Zolang ik App 1 niet afsluit kan ik de query uitblijven voeren maar zie ik geen update.
    Met welke transactie werk je dan.
    Als je de transactie niet afsluit dan blijf je die query dus in een ander isolation-niveau uitvoeren en zul je geen nieuwe gegevens zien.

    Je kunt het volgende na de query doen zodat er bij een volgende query altijd weer een nieuwe transactie gestart wordt.
    Delphi Code:
    1. if IBQuery1.Transaction.InTransaction then IBQuery1.Transaction.RollbackRetaining;

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •