Avatar billede stone Forsker
17. april 2001 - 00:20 Der 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.
Avatar billede nico26 Nybegynder
17. april 2001 - 01:37 #1
hvis du ikke vil bruge en query, er du vel nødt til at løbe alle records igennem og summere op
Avatar billede jensfudge Nybegynder
17. april 2001 - 08:11 #2
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).

Håber det hjælper
Avatar billede martinlind Nybegynder
17. april 2001 - 09:15 #3
Hvad er MiniTable ????
Avatar billede stone Forsker
17. april 2001 - 09:54 #4
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.
Avatar billede koonz Nybegynder
18. april 2001 - 23:50 #5
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

Avatar billede stone Forsker
19. april 2001 - 00:20 #6
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\"
Avatar billede martinlind Nybegynder
19. april 2001 - 10:10 #7
Det er nok fordi at han ligger og løber dataset\'et igennem igen det dur ikke tror jeg.
Avatar billede stone Forsker
19. april 2001 - 10:48 #8
ja..jeg løber tør for resourcer
Avatar billede jensfudge Nybegynder
23. april 2001 - 07:46 #9
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...
Avatar billede stone Forsker
21. maj 2001 - 22:57 #10
måtte bide i det sure æble og bruge query

så KOONZ
og JENSFUDGE
svar lige så i får point
Avatar billede koonz Nybegynder
21. maj 2001 - 23:25 #11
Hermed gjort *S*
Avatar billede koonz Nybegynder
21. maj 2001 - 23:28 #12
Forresten - den der Minitable, kunne jeg da godt tænke mig at kigge lidt på, hvor finder jeg den ?
Avatar billede stone Forsker
22. maj 2001 - 00:14 #13
Minitable fås hos:
http://www.unleytools.com
Avatar billede stone Forsker
22. maj 2001 - 00:15 #14
blir nød til at vente med pointgivning indtil jensfudge har svaret
Avatar billede jensfudge Nybegynder
22. maj 2001 - 17:21 #15
Svarer, svarer, svarer
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