Avatar billede vint Nybegynder
21. november 2007 - 22:43 Der er 3 kommentarer og
1 løsning

Brug af ClientDataSet

Hej.

Jeg er lidt i tvivl om den korrekte brug af en ClientDataSet. Det vil jeg opstille med et eksempel.

Jeg har en form, med nogle DB Aware komponenter, der skal kunne vises, redigeres og gemmes.

DB Komponenter, der er oprettet:
Forbindelsen til databasaen oprettes
1. Database komponent
2. Transaction komponent
Ønskede data hentes med SQL
3. IBQuery (active = false)
Data overføres til ClientDataSet
4. Datasetprovider
5. ClientDataSet (Active = true)
Data forbindes til DB Aware komponenter
6. Datasource
7. Data aware komponenterne.

Men hvordan er det korrekt at gøre, når man vil hente data, vise dem, have mulighed for at rette i dem, og derefter mulighed for at klikke på formens to knapper (annuller og gem), der selvfølgelig enten gemmer eller annullerer ændringerne.

Databasen skal selvfølgelig af alle gode grunde være lukket i selve arbejdet på formen.
Avatar billede hrc Mester
22. november 2007 - 07:17 #1
Du kobler din query på databasen. På denne hægter du en TDatasetprovider som du igen kobler på en TClientDataSet. Denne kobles til et DBGrid via et TDataSource.

Put et script ind i query'en. For at se data skal du sætte TClientDataSet.Active = true. Dette åbner både query'en og clientdatasættet. Når du lukker skal du selv lukke begge.

Nu kan du rette, slette eller oprette som du har lyst - når du lukker formen og tjekker på modalresult = mrOK eller lignende, kan du skrive ClientDataset.ApplyUpdates(x) eller hvis du fortryder. ClientDataSet.CancelChanges

Det er den basale brug.

Efterfølgende er der myriader af indstillingsmuligheder hvor du bl.a. kan vælge hvilke felter der skal kunne opdateres, oprette virtuelle felter. Det er et avanceret område og jeg synes ikke dokumentationen er ret god. Den lægger op til en ordentlig omgang trial'n error.
Avatar billede vint Nybegynder
22. november 2007 - 08:12 #2
Hej hrc.

Tak for altid brugbare hurtige svar.

De første afsnit var dog som jeg også selv beskrev i mit spørgende indlæg.

Men det der "forvirrer" mig er:

1. Burde query'en ikke være lukket så snart dataene er hentet til clientdatasettet´, således det kun er sidstnævnte, der er åben? Det er vel en af fordelene ved et clientdataset, at man ikke belaster databaseserveren konstant?

2. Hvad laver (x) i ClientDataSet.ApplyUpdates(x)?

3. Når man bruger applyUpdates foretager clientdatasettet så selv de korrekte SQL-koder for at slette, rette og indsætte de data i databasen, som er lavet i clientdatasettet?

P.S. Smid endelig et svar, så jeg kan belønne dig
Avatar billede hrc Mester
22. november 2007 - 22:14 #3
1. Godt spørgsmål - Jeg tror du har ret. Queryen bliver sikkert lukket når KlientDataSættet har hentet alle data. Det vil være ulogisk andet.

2. x bestemmer antallet af fejl der må opstå før ApplyUpdates ender i en rollback (har jeg nævnt at CDS kører i transaktioner? = hastighed og sikkerhed). Hvis x = 0 er der nultolerance.

3. Jep. Den er ret intelligent og genererer løs - men hvis der er felter der ikke skal opdateres eller værdier der skal sættes først, må du over i førnævnte myriader.
Der er mange muligheder for justere og du kan sågar selv skrive de scripts der skal bruges - men så er det er ikke længere let at bruge. Jeg kager selv rundt i det når jeg en sjælden gang behøver ned i de lag; som regel er det et tegn på, at jeg bør redesigne noget kode et eller andet sted.
Avatar billede vint Nybegynder
22. november 2007 - 22:26 #4
Det har bare været den fedeste hjælp.

Fandt desuden denne: http://dn.codegear.com/print/27653 som også var rigtig god som startlæring i ClientDataSet'et
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester