Results 1 to 10 of 10

Thread: Reageren dmv DataSource

  1. #1
    Delphi & OO in Vlaanderen SamWitse's Avatar
    Join Date
    Sep 2007
    Location
    Brussel
    Posts
    833

    Question Reageren dmv DataSource

    Beste Delphilantropen,

    Ik heb een Panel waarop ik het aantal records in een tabel toon.
    Bij de opstart van het programma bereken ik dit aantal door een
    SELECT COUNT...

    Nu wil ik dat telkens een record toegevoegd of verwijderd wordt, de waarde in TPanel met 1 verhoogd of verlaagd wordt.

    Ik dacht hiervoor een TDataSource te gebruiken, die aan mijn TPanel zou vertellen dat zijn dataset gegroeid of gekrompen is.
    Nu heeft een TDataSource wel events, maar geen daarvan vertelt mij dat er een insert of delete gebeurd is.
    Of begrijp ik de events van een TDataSource niet goed (genoeg)?

    Hoe kan ik een TDataSource laten vertellen dat er een insert of delete in zijn dataset is gebeurd?
    Should array indices start at 0 or 1? My compromise of 0.5 was rejected without, I thought, proper consideration.

    Sam Witse.
    Delphi & OO in Vlaanderen

  2. #2
    Senior Member Wok's Avatar
    Join Date
    Dec 2002
    Location
    Alkmaar
    Posts
    2,085
    Er is toch een onDatachange event.
    Als je daar met een Select Count een waarde ophaal en deze vergelijk met wat je al eerder had, dan weet je toch het verschil en dus of er een verandering plaats gevonden heeft.

    Of denk ik nu niet goed genoeg met je mee?
    Peter
    10.4.2, Delphi2010, of Lazarus 2.2.0

  3. #3
    John Kuiper
    Join Date
    Apr 2007
    Location
    Almere
    Posts
    8,747
    Wok, is telkens een select count(*) niet een beetje teveel van het goede om deze telkens na een insert/delete te bepalen wat het aantal records van de dataset is.

    @Samwitse
    Kan je dat niet beter regelen door AfterInsert / AfterDelete je teller te verhogen/verlagen. Bij een CDS zal je bij de onStateChange je records kunnen afgaan van begin tot eind om zo aan je aantal records te komen.
    Delphi is great. Lazarus is more powerfull

  4. #4
    Delphi & OO in Vlaanderen SamWitse's Avatar
    Join Date
    Sep 2007
    Location
    Brussel
    Posts
    833
    @Wok:
    Dit is oplossing 1: telkens er ook maar 'iets' gebeurt, de select count opnieuw uitvoeren. Dit is wat ik net tracht te vermijden, wegens te omvangrijk. Dit is trouwens een test-opzet; in de échte applicatie wil ik ook exact weten wélk record deleted, modified of inserted is.

    @John:
    Dit is oplossing 2: de AfterInsert/AfterDelete aanpreken. Maar in wezen is het geen taak voor de dataset om een panel te verwittigen. Stel je maar eens voor dat ik dynamisch een Panel wil toevoegen... .
    Dus logisch moet een TDataSource 'zijn' TPanel verwittigen dat de DataSet gewijzigd is. Daar dient een DataSource voor. Alleen zie ik niet in wat de DataSource kan triggeren bij een Insert en Delete van de DataSet.

    Ik vrees dat ik een eigen afgeleide van een TDataSource moet maken, maar ik zie nog niet in hoe die de toegevoegde events OnDelete en OnInsert gaat afvuren.
    Should array indices start at 0 or 1? My compromise of 0.5 was rejected without, I thought, proper consideration.

    Sam Witse.
    Delphi & OO in Vlaanderen

  5. #5
    Als je meer wilt dan een standaard datasource je kan bieden moet je zeker eens kijken naar TDataLink of TFieldDataLink. Dat is de standaard manier om te reageren op wijzigingen in je dataset.
    Marcel

  6. #6
    Wat ik me dan weer afvraag is waarom je dit zou willen.

    Als je 2 keer een select uitvoert op een database dan is er toch niets wat jou een record volgorde kan garanderen behalve eventueel een orderby?

    En als je een orderby gebruikt dan kan die zomaar je recordvolgorde overhoop gooien na een insert of delete.

    dus ik ben erg benieuwd naar het doel van dat label.

  7. #7
    Delphi & OO in Vlaanderen SamWitse's Avatar
    Join Date
    Sep 2007
    Location
    Brussel
    Posts
    833
    Benno,
    Het Panel bevat gewoon een getal met het aantal records; niks met een order of index dus.
    Should array indices start at 0 or 1? My compromise of 0.5 was rejected without, I thought, proper consideration.

    Sam Witse.
    Delphi & OO in Vlaanderen

  8. #8
    Delphi & OO in Vlaanderen SamWitse's Avatar
    Join Date
    Sep 2007
    Location
    Brussel
    Posts
    833
    Quote Originally Posted by Marcel View Post
    Als je meer wilt dan een standaard datasource je kan bieden moet je zeker eens kijken naar TDataLink of TFieldDataLink. Dat is de standaard manier om te reageren op wijzigingen in je dataset.
    Mijn ogen gaan open

    Ik dacht dat alle communicatie tussen een dataset en een component via een TDataSource zou verlopen, maar in feite gaat dit via een TDataLink!
    Erger nog: DataSource is geen attribuut van een Data-aware component, maar via een getter en een setter lijkt het dat een datasource een attribuut is van zo'n component.
    Tja, dan kan een mens zich vergissen

    Dank je, Marcel. Ik weet weer wat gedaan dit weekend: een cursus TDataLink volgen.
    Should array indices start at 0 or 1? My compromise of 0.5 was rejected without, I thought, proper consideration.

    Sam Witse.
    Delphi & OO in Vlaanderen

  9. #9
    Sam,

    dat je een aantal van een resultset wilt laten zien kan ik me nog iets bij voorstellen. Mijn vraag ging eigenlijk meer over je opmerking dat je wilt zien welke records zijn gewijzigd, op basis van een recordnr.

    Ik zou dat persoonlijk oplossen bij de dataset. Volgens mij heeft de CDS daar zelfs al voorzieningen voor die de versioning van je record bijhouden. Als dat niet gaat zou ik een extra veld toevoegen aan mijn memory dataset waar die status in staat.

  10. #10
    Quote Originally Posted by SamWitse View Post
    Dank je, Marcel. Ik weet weer wat gedaan dit weekend: een cursus TDataLink volgen.
    Heel graag gedaan! Op dit nivo is er meestal niet zo heel veel documentatie te vinden. Ik gebruik daarvoor dus meestal de enige altijd kloppende documentatie: de source .
    Marcel

Thread Information

Users Browsing this Thread

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

Tags for this Thread

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
  •