06. februar 2007 - 13:53Der 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.
I dette særtema om aspekter af AI ser vi på skiftet fra sprogmodeller til AI-agenter, og hvordan virksomheder kan navigere i spændet mellem teknologisk hastighed og behovet for menneskelig kontrol.
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.
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.
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!
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
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.
kroning: Du nedarver din dataklasse fra TClientDataSet i stedet for at bruge den direkte? Det lyder smart. Jeg skal allokere mere tid til TClientDataSet.
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.
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.