Avatar billede skindbeni Nybegynder
06. februar 2007 - 13:53 Der er 10 kommentarer og
2 løsninger

Hente data korrekt

Jeg har en tabel. Noget af indholdet skal vises i en tabel / grid som en oversigt (der skal kunne redigeres i), mens andet indhold af tabellen skal vises i editbokse for den valgte post. Tabellen og Editboksene er placeret på hver deres tabsheet i en pagecontrol.

Mit spørgsmål er, hvilken løsning man bør bruge.

1) Hente alle data direkte fra Firebird og over i en ClientDataSet, hvor dataene ligger og hentes fra / redigeres under hele programmets levetid.

2) "snakke" med Firebird hver gang jeg vil hente, gemme eller rette i min tabel / grid og editbokse.

3) en 3. løsning

Meget gerne give konkret eksempel på at hente dataene korrekt.
Avatar billede skindbeni Nybegynder
07. februar 2007 - 18:25 #1
Hej.

Er der ingen hjælp at hente her? Jeg er meget låst og kan ikke finde noget brugbart materiale på nettet.

Er der en venlig sjæl, der vil hjælpe / guide mig gennem at få forbindelse
mellem en Firebird database og mit Delphi projekt.

Gerne uddybet således jeg får et eksempel på
1) oprettelse af forbindelse
2) vise data
3) rette data (fx indsætte linie)

Hvilke komponenter skal jeg bruge og hvordan skal de indstilles osv.

De herligste hilsener
Avatar billede hrc Mester
07. februar 2007 - 23:31 #2
Grrr! Jeg er ikke skide tilfreds med min ThinkPad. Lige ved siden af piletasterne er der to taster for hhv. "Go back one page" og "go forward ..".
Efter at have færdiggjort et længere skrift trykkede jeg på "back" i stedet for venstre-pilen og borte tog mine kloge ord.

... prøver igen:

Jeg har selv gjort det på den måde at jeg flytter alle records over i min egen data- og listklasser. På den måde kan jeg styre hvilke felter der er skrivebeskyttede (eks. ID og CPR) og de der ikke er det (eks. navn, adresse).

I data-klassen har jeg haft tre SQL-rutiner der sørgede for UPDATE, INSERT og DELETE af recorden. Min List-klasse sørgede for SELECT.

Det har virket fint, men TClientDataSet er næsten lige dukket op hos mig og den ser ud til at være smartere at bruge som data-container på klient-siden.

Kan i alt fald ikke anbefale at man bruger TADOTable direkte ned i databasen eller TADOQuery med RequestLive=true. For professionelle programmer er det ikke den rette måde at kode det på.

Derfor: Den første metode jeg beskrev, ved jeg fungerer. Den anden, TClientDataSet ser så lovende ud, at det sandsynligvis er den du bør bruge, Især fordi du kan bruge den direkte sammen med TDBGrid eller varianter deraf.
Avatar billede skindbeni Nybegynder
08. februar 2007 - 12:34 #3
Hej Henrik.

Som altid tak for dine bidrag.

Jeg har bare stadig ikke fået et overblik over, om fremgangsmåden bør være, at man henter sin tabel fra Firebird til et clientDataSet og så indsætte, slette og redigere heri inden man til slut sender tilbage til Firebird ELLER om om man bør sende SQL-sætninger til Firebird for hver gang man vil hente, indsætte, ændre eller slette data. Og hvordan fremgangsmåden er.
Avatar billede hrc Mester
08. februar 2007 - 13:00 #4
Jeg ville afgjort prøve med TClientDataSet. Først med en lille applikation der eksempelvis håndterer et adressekartotek.
Faktisk står jeg lidt i den situation om jeg skal droppe mine egne lister til fordel for TClientDataSet (og derved umiddelbart spilder 2-3 ugers arbejde - som forbåbentlig vindes tilbage senere). Nogle gange vil jeg hellere arbejde på fabrik!
Avatar billede hrc Mester
08. februar 2007 - 13:02 #5
Komponentens ApplyUpdates er praktisk, især i forbindelse med dialoger hvor du har en OK/Cancel knap. Ved OK fyrer du ApplyUpdates (i en OnCloseQuery) af, naturligvis pænt pakket ind i en transaktion. Ved fejl sættes CanClose := false
Avatar billede vint Nybegynder
08. februar 2007 - 13:27 #6
hej...

mener det er dumt at hente hele tabellen ind i en for exempel et clientdataset da det bruger for mange ressourcer.

jeg mener det bedste må være kun at hente det du skal bruge
Avatar billede kroning Nybegynder
08. februar 2007 - 15:55 #7
Jeg har gjort det ligesom hrc, en data-klasse med 3 sql rutiner UPDATE, INSERT og DELETE . Min klasse har så fra starten været baseret på TClientDataSet og det kan kun anbefales.
Jeg har så lavet det således at de 3 rutiner kan bruges på alle tabeller uden ændringer, dvs. at jeg ikke skal skrive 3 nye rutiner for hver tabel, de 3 rutiner kan endda bruges selv om recorden jeg f.eks. vil gemme er et resultat af en JOIN på flere tabeller.
Avatar billede hrc Mester
09. februar 2007 - 12:02 #8
kroning: Du nedarver din dataklasse fra TClientDataSet i stedet for at bruge den direkte? Det lyder smart. Jeg skal allokere mere tid til TClientDataSet.
Avatar billede kroning Nybegynder
09. februar 2007 - 13:57 #9
Jeg udtrykte mig forkert, jeg nedarver ikke fra TClientDataSet men benytter den i min klasse til at gemme resultatet i. Men man kunne jo ligeså godt nedarve fra TClientDataSet.
Avatar billede skindbeni Nybegynder
26. februar 2007 - 20:39 #10
Hej. I må gerne begge smide et svar
Avatar billede hrc Mester
01. marts 2007 - 10:29 #11
Jamn, så gør jeg det.
Avatar billede kroning Nybegynder
01. marts 2007 - 17:31 #12
Fisk
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