17. april 2001 - 00:20Der er
13 kommentarer og 2 løsninger
sammentælling i db
hvordan sammentæller man alle data i field[7] i en database. den skal løbende updates,ved ændringer i feltet,og resultatet skal overføres til et andet dbedit. (uden at bruge query) Jeg bruger Minitable.for at undgå bde.
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
Jeg kender ikke minitable, er det en arving fra TDataSet ?? I så fald kan du vel oprette en calculated field, og holde denne vedlige.
Ellers må du efter åbning af datasetet løbe den igennem og lægge sammen... For eks:
try dataset.disableControls; dataset.first; sum := 0; while not dataset.EOF do begin sum := sum + dataset.FieldByName(\'feltnavnet\').asInteger; dataset.next; end; Finally dataset.enableControls; end;
Det kræver at det du har i feltet er af type integer, og at du har oprettet en variable der hedder sum, som er af typen integer. Er der kommatal, kan du benytte type Double istedet, asInteger skal så udskiftes med asFloat. Istedet for at indeksere efter feltnummer, anbefaler jeg at benytte feltnavn, så går der ikke ged i det, hvis feltrækkefølgen ikke er den samme altid. På feltets OnChange event, kan du så vedligeholde din variabel sum. (træk OldValue fra og læg NewValue til).
Minitable er et shareware komponent,som følger med inprise,som ikke er preinstalleret. Minitable\'s force er at du ikke skal bruge bde, og at dit program kun skal indeholde databasen minitable.mti. Minitable kan kun køre indenfor ide,udenfor får man en nagscreen hvis det ikke er registreret.
hmnn........det lyder som en af de der csv databaser, det er OK til meget små opgave, men skal du udrette noget stort, kommer du nok ikke uden om en \"rigtig\" query
Som nico foreslår kan du nok ikke undgå at skulle løbe dine records igennem.
Jeg ved ikke om MiniTable indeholder en count, ellers er det jensfudge\'s eksempel du skal bruge.
En anden mulighed kunne være
var i : Integer;
begin sum := 0; for i := 0 to MiniTable.Count Begin Sum := Sum + Field[7].AsInteger; (evt trToInt) end;
Noget i den dur - det er ikke nemt at sige når det er 3. parts
det er til et lille vinprogram,så det er ikke nødvendig at bruge storebror. minitable har et calculated field, med jensfudge\'s eksempel for jeg en fejl \"stack overflow\"
Hvis du får stack overflow ved at løbe datasettet igennem, kan det skyldes (bl.a) to ting: 1) Du glemmer dataset.next 2) Du kalder den procedure der løber datasettet igennem fra et event der bliver triggered når du skifter record i datasettet...
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.