Controle oplopende getallen

Status
Niet open voor verdere reacties.

Ewergreen

Gebruiker
Lid geworden
15 mrt 2008
Berichten
273
Iemand enig idee hoe ik kan controleren of mijn getallen oplopend zijn? Ik geef manueel een reeks getallen in die ik dan oplopend sorteer. Nu zouden deze getallen dan elkaar moeten opvolgen.

Redelijk omslachtig om dit steeds te printen en na te kijken. Is hier een oplossing voor?
 
Je kan je sequence controleren door in een query de som van je getallen op te laten tellen
Code:
select sum(getal) from tabel
en deze te vergelijken met het resultaat van onderstaande functie
Code:
Public Function AddSum(lngAantalRecords As Long) As Long
    Dim lngTeller As Long
    Dim lngResult As Long
    lngResult = 0
    For lngTeller = 1 To lngAantalRecords
        lngResult = lngResult + lngTeller
    Next lngTeller
    AddSum = lngResult
End Function
aangenomen dat er geen dubbele getallen in voorkomen.
Als je wilt controleren of er dubbele getallen in voorkomen:
Code:
Select count(getal) from tabel where count(getal)>1
Enjoy!
 
Ok, het eerste deel lukt me perfect. De som van mijn oplopende getallen krijg ik mooi:
Code:
SELECT Sum(SvNr) AS SumSv
FROM TBLVehicles;
Hoe ik dat nu vergelijk met het resultaat van de functie, en waar ik deze functie plaats is me even onduidelijk:
Code:
Public Function AddSum(lngAantalRecords As Long) As Long
    Dim lngTeller As Long
    Dim lngResult As Long
    lngResult = 0
    For lngTeller = 1 To lngAantalRecords
        lngResult = lngResult + lngTeller
    Next lngTeller
    AddSum = lngResult
End Function
Ten derde krijg ik steeds een foutmelding bij de controle op dubbele getallen:
Cannot have aggregate function in WHERE clause count (SvNr)>1
De code die ik daar hanteer is de volgende:
Code:
SELECT count(SvNr)
FROM TBLVehicles
WHERE count(SvNr)>1;

Alvast bedankt voor verder input!
 
stop de volgende regels in een module
Code:
public function checksequence() as boolean

    if dsum(velddatjeopwilttellen,tabel) = addsum(dcount("*",tabel)) then
        'sequence is goed.
    else
        'sequence is niet goed
    endif

end function
en voer het uit in de immediate window of achter een knop op een form
 
Code:
Option Compare Database

Public Function checksequence() As Boolean

    If DSum(SvNr, TBLVehicles) = addsum(DCount("*", TBLVehicles)) Then
        'sequence is goed.
    Else
        'sequence is niet goed
    End If

End Function

Geeft hij telkens een compilerfout. Damn, ik heb dus echt geen idee van hoe ik dit moet laten werken.

In bijlage ook eventjes de db. Hij zou de controle moeten uitvoeren op TBLVehicles. Ik geef de data in via frmBeslag_ingeven en controleer/rapporteer via frmBeslag_controle.
 

Bijlagen

De eerste twee regel in je module moeten in ieder geval zijn:
Code:
Option Compare Database
Option Explicit
Daarmee dwing je af dat variabelen gedimensioneerd moeten zijn.

Ik heb een form1 toegevoegd met daarop een knop. Die de functie uitvoert.

Als je deze test uitvoert op een autonummer veld, dat is dat vrij zinloos op het moment dat je een record hebt weggegooid zoals in jouw geval het geval is. Het nummer krijg je nooit meer terug. Tenzij je een truuk uithaalt om je records te hernummeren...

Enjoy!
 

Bijlagen

Helaas geeft hij het altijd als fout aan, zelfs als ik het ontbrekende "dossier" toevoeg.
 
Helaas geeft hij het altijd als fout aan, zelfs als ik het ontbrekende "dossier" toevoeg.
Hoe voeg je een nummer toe in een autonummer veld? Dat kan namelijk niet. Het nummer dat je toevoegd wordt bepaald door Access omdat het een autonummer veld is.
Misschien bedoel je een ander veld dat je oplopend genummerd hebt?
 
Het is geen autonummer veld. Het is gewoon een veld waarin, als alles correct is, de nummers oplopend moeten zijn. Anders mis ik een bon... . Maar, zodat ik niet steeds eerst alle papieren moet sorteren, wil ik ze door elkaar ingeven, dan sorteren in access en dan hopelijk laten controleren of ik ze allemaal heb. Dus eerste waarde van SvNr + 1= 2de waarde SvNr. 2de waarde SvNr +1 = 3de waarde SvNr, enzovoort.
 
ik begrijp dat het gaat om het svnr in de tabel tblvehicles. je hebt een offset nodig. een startpunt waarvandaan je begint te tellen.
Code:
Public Function AddSum(lngAantalRecords As Long, lngOffset As Long) As Long
    Dim lngTeller As Long
    Dim lngResult As Long
    lngResult = 0
    For lngTeller = lngOffset To lngAantalRecords + lngOffset
        lngResult = lngResult + lngTeller
    Next lngTeller
    AddSum = lngResult
End Function
Ik heb de functie aangepast waarmee het zou moeten kunnen. Je moet hier een startpunt opgeven. in jouw geval dus 122.
de functie checksequence ziet er dan als volgt uit:
Code:
Public Sub CheckSequence()

     If DSum("SvNr", "TBLVehicles") = AddSum(DCount("*", "TBLVehicles"), DMin("svnr", "tblvehicles")) Then
        MsgBox "sequence is goed", vbInformation, Application.Name
    Else
        MsgBox "sequence is niet goed", vbExclamation, Application.Name
    End If

End Sub
Succes!
 
Voor zover ik het kan inschatten volg ik uw manier volledig guus, maar hij blijft weergeven dat de sequence niet correct is, terwijl deze wel correct is.
 

Bijlagen

Laatst bewerkt:
Status
Niet open voor verdere reacties.

Nieuwste berichten

Terug
Bovenaan Onderaan