04. december 2007 - 14:00Der er
11 kommentarer og 1 løsning
Sort på ADOTable
Hej,
Jeg har en DBGrid, DataSource og en ADOTable. Min DB er knyttet til en SQL EE 2005. Jeg har tabel med 2 felter: DATE og STAFF. Jeg er interesseret i at kunne sortere på DATE. Jeg har set at ADOTable har en IndexName. Den har jeg prøvet at sætte til ADOTabel.IndexName := 'DATE'; men jeg synes ikke at det virker. Skal jeg gøre noget mere i koden eller skal jeg gøre noget i SQL EE 2005?
Når du har sat indekset skal du få komponenten til at udføre den. Det sker ved at lukke og åbne tabellen igen... I øvrigt bør du bruge en ADOQuery med RequestLive = true. Det virker på en TADOTable men er ikke nær så tung. Åbner du en TADOTable bliver al data samt tabellens indekser sendt over til dig. Med en TADOQuery er det kun datasættet der kommer.
Behøver jeg nævne, at den helt forkromet løsning hedder ClientDataSet og SQL-statements.
Clientdatasæt er en slags tabel i rammen. Konstruktionen består af følgende led:
- TADOQuery der henter data - TDataSetProvider der formidler data videre til (via provider-property) - TClientDataSet som du kan bruge som en TADOTable (Append, Post osv) - TDataSource som kobles på en .. - Data-Aware komponent såsom en TDBGrid
Der er ret mange led og jeg kan ikke forstå man ikke har lavet én komponent der pakker alt dette sammen. Nå, men proceduren er:
Lav en SQL-select i TADOQuery og glem derefter komponenten. Alt andet foregår nu i TClientDataSet. Du åbner, sorterer, retter. Det rigtig smarte er at intet gemmes i tabellen før du fyrer en TClientDataSet.ApplyUpdates af. Tilsvarende er der en metode der annullerer det ændrede.
Når data skal skrives tilbage til tabellen genererer TClientDataSet selv SQL-statements og pakker det hele ind i en fin lille transaktion. Det virker egentlig ret blændende.
Virker også på joinede-tabeller. Du kan lave en select der join'er data fra flere tabeller og alligevel kan TClientDataSet finde ud af at skrive de rigtige steder.
Der er naturligvis også en hage ved det. Man kan pille rigtig meget i parametrene. Begynder men med det skal man holde tungen lige i munden. Når jeg ender i at skulle pille ved de eksotiske parametre plejer jeg i stedet at redesigne proceduren
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.