Avatar billede kennethv Nybegynder
04. december 2007 - 14:00 Der 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?
Avatar billede vallemanden Nybegynder
04. december 2007 - 14:14 #1
ORDER BY date
Avatar billede kennethv Nybegynder
04. december 2007 - 14:22 #2
Skal jeg skrive det i ADOTable.IndexName := 'ORDER BY DATE'; ?
Avatar billede vallemanden Nybegynder
04. december 2007 - 14:38 #3
nej brug en query

query1.close;
query1.sql.clear;
query1.sql.add('SELECT * FROM tabelnavn');
query1.sql.add('ORDER BY DATE');
query1.active:=True;
Avatar billede kennethv Nybegynder
04. december 2007 - 14:55 #4
Men jeg er ikke interesseret i at bruge en ADOQuery. Det må kunne lad sig gøre at bruge det andet.
Avatar billede hrc Mester
04. december 2007 - 16:03 #5
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.
Avatar billede kennethv Nybegynder
04. december 2007 - 18:19 #6
ClientDataSet? Er det en del af ADOQuery?

Det kunne godt være du lige må nævne det?
Avatar billede hrc Mester
05. december 2007 - 11:31 #7
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
Avatar billede hrc Mester
05. december 2007 - 11:31 #8
"rammen" = RAM
Avatar billede kennethv Nybegynder
05. december 2007 - 11:45 #9
Jeg vil give det et forsøg.
Avatar billede hrc Mester
05. december 2007 - 11:54 #10
Skriv endelig hvis det driller, men lad' nu være med at grave dig ned i "joinede" tabeller som det første.
Avatar billede kennethv Nybegynder
05. december 2007 - 12:01 #11
:)
Avatar billede kennethv Nybegynder
07. februar 2008 - 16:07 #12
Mangler et svar fra HRC
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