controle records lotto variabele error

Status
Niet open voor verdere reacties.

combi

Gebruiker
Lid geworden
16 sep 2009
Berichten
41
Zie bijlage
Het lukt mij niet om simpele controle wanneer 3 of 4,5,6 gegevens
overeenkomen vanuit 2 tbl en uitslag te updaten
zie form controle


Code:
Option Compare Database
Option Explicit

Dim DB As Database
Dim Rs1 As Recordset
Dim Rs2 As Recordset
Dim Sql1 As String
Dim Sql2 As String

Dim Hlp_RecCount1 As Long
Dim Hlp_RecCount2 As Long

Dim Hlp_CombiCount As Long


Private Sub Form_Load()
    Knp_Start_Click
End Sub

Private Sub Knp_Start_Click()
On Error GoTo Err_Knp_Start_Click
    Dim Hlp_Line As String
    '
    'Nodig om de tabellen te kunnen benaderen
    Set DB = CurrentDb
    
    DoCmd.Hourglass True ' laat een zandloper zien
    DoCmd.OpenForm "Frm_Verloop", , , "" 'laat een popup-scherm zien met kommentaar
    
    Sql1 = "Select * from laatstetrekking Order by teller desc"
    Set Rs1 = DB.OpenRecordset(Sql1, dbOpenDynaset)
    
    Hlp_RecCount1 = 0
    
    While Not Rs1.EOF
        Hlp_RecCount1 = Hlp_RecCount1 + 1
        Sql2 = "Select * from Gewoonfull where teller < " & Rs1!teller
        Sql2 = Sql2 & " Order by teller desc"
        Set Rs2 = DB.OpenRecordset(Sql2, dbOpenSnapshot)
                
        Hlp_RecCount2 = 0
            
        While Not Rs2.EOF
            Hlp_RecCount2 = Hlp_RecCount2 + 1
            Forms![FRM_Verloop]!Veld_Weergave = "Aantal ingelezen records waar3,4,5,5+,6 " & Hlp_RecCount1 & "  /  " & Hlp_RecCount2
            
           Hlp_CombiCount = 0
            If Rs1!BAL1 = Rs2!BAL1 Or Rs1!BAL1 = Rs2!BAL2 Or Rs1!BAL1 = Rs2!BAL3 Or _
               Rs1!BAL1 = Rs2!BAL4 Or Rs1!BAL1 = Rs2!BAL5 Or Rs1!BAL1 = Rs2!BAL6 Then
                Hlp_CombiCount = Hlp_CombiCount + 1
            End If
            If Rs1!BAL2 = Rs2!BAL1 Or Rs1!BAL2 = Rs2!BAL2 Or Rs1!BAL2 = Rs2!BAL3 Or _
               Rs1!BAL2 = Rs2!BAL4 Or Rs1!BAL2 = Rs2!BAL5 Or Rs1!BAL2 = Rs2!BAL6 Then
                Hlp_CombiCount = Hlp_CombiCount + 1
            End If
            If Rs1!BAL3 = Rs2!BAL1 Or Rs1!BAL3 = Rs2!BAL2 Or Rs1!BAL3 = Rs2!BAL3 Or _
               Rs1!BAL3 = Rs2!BAL4 Or Rs1!BAL3 = Rs2!BAL5 Or Rs1!BAL3 = Rs2!BAL6 Then
                Hlp_CombiCount = Hlp_CombiCount + 1
            End If
            If Rs1!BAL4 = Rs2!BAL1 Or Rs1!BAL4 = Rs2!BAL2 Or Rs1!BAL4 = Rs2!BAL3 Or _
               Rs1!BAL4 = Rs2!BAL4 Or Rs1!BAL4 = Rs2!BAL5 Or Rs1!BAL4 = Rs2!BAL6 Then
                Hlp_CombiCount = Hlp_CombiCount + 1
            End If
            
                If Rs1!BAL5 = Rs2!BAL1 Or Rs1!BAL5 = Rs2!BAL2 Or Rs1!BAL5 = Rs2!BAL3 Or _
                   Rs1!BAL5 = Rs2!BAL4 Or Rs1!BAL5 = Rs2!BAL5 Or Rs1!BAL5 = Rs2!BAL6 Then
                    Hlp_CombiCount = Hlp_CombiCount + 1
              
            End If
            If Hlp_CombiCount < 5 Then
                If Rs1!BAL6 = Rs2!BAL1 Or Rs1!BAL6 = Rs2!BAL2 Or Rs1!BAL6 = Rs2!BAL3 Or _
                   Rs1!BAL6 = Rs2!BAL4 Or Rs1!BAL6 = Rs2!BAL5 Or Rs1!BAL6 = Rs2!BAL6 Then
                    Hlp_CombiCount = Hlp_CombiCount + 1
                End If
            End If
           
            
            
            
            If Hlp_CombiCount = 5 Or Hlp_CombiCount = 6 Then
                Rs1.Edit
                    Rs1!full6 = Hlp_CombiCount
                Rs1.Update
                
                GoTo Move_Next_Rs2
            Else
                Rs2.MoveNext
            End If
        If Hlp_RecCount1 = 5000 Then
            DoCmd.Close acForm, "Frm_Verloop"
             DoCmd.Hourglass False
               DoCmd.Close acForm, "controle"
Exit_Knp_Start_Click:
    Exit Sub
                End If
        Wend
Move_Next_Rs2:
        Rs2.MoveNext
    Wend
   
    
   
    

Err_Knp_Start_Click:
    'Resume Next
    MsgBox Err.Description
    Resume Next
    Resume Exit_Knp_Start_Click
    
End Sub






Mvg
ANayon project:shocked:
 

Bijlagen

Laatst bewerkt door een moderator:
Hij vraagt al gelijk om een query die er niet is, en begint dan stevig te loopen... Moest 'm nogal bruut tot stilstand brengen! Is die query essentieel?

En als je zoveel code post, kun je die beter in de Code tag zetten, dan is het geheel leesbaarder. Zeker als je de overtollige lege regels er uit haalt, want het verhaal is al lang genoeg ;)
 
Ik snap de bedoeling ook niet helemaal; je eerste query gebruik je om een teller op te halen uit de tabel [Laatstetrekking]. Daar staat één record in, met de tellerwaarde 2.
Vervolgens wil je in de tweede query records zien waarvan de teller <2. Maar de laagste waarde voor teller in tabel [Gewoonfull] (ik ga er maar even van uit dat je die bedoelt, en niet [Gewoonfull1...] is 3. Dan komt er uiteraard niet veel uit. Bovendien heb je geen check ingebouwd of er überhaupt wel records in je recordset zitten, en daarom blijft hij dus loopen tot-ie een ons weegt....
 
controle winst

Is enkel tabel 1 record 6 ballen
vergelijken met 2de tabel waarvan vermeld laatste kolom ,3,4,5,6 overeenkomen
met tabel 1,winstcontrole dus,
vroeger zat dit in één tabel en werd laatste trekking gecontroleerd met vorige
geraak er niet wijs uit met twee tabellen
mvg
yves
 
Blijf ik zitten met de vraag waarom je uit je tweede tabel records wilt vergelijken waar de teller niet in zit die je in de eerste query ophaalt. En vervolgens een oneindige loop gebruikt om die teller op te zoeken in de tweede tabel...
 
Vroeger werd dit geteld , hoelang geleden er 3,4,5,6 correct waren met vorig record in één tabel
nu zou dit controle moeten worden , maar sla dit dooréén
geraak er niet meer uit.
mvg
yves
 
Begin eens met uit te leggen wat de bedoeling precies is, want ik wil het maar niet snappen.... Waarom heb je in tabel1 een record staan dat niet in tabel2 voorkomt, en waarom moeten de records die je wilt gebruiken voor je berekening een teller hebben die kleiner is dan de teller in tabel1? En begrijp ik goed dat je in tabel1 altijd maar één record hebt staan? Waarom dan een loop gemaakt, met een teller erbij voor sql1?
 
komt erop neer
tbl 1 = 1 record bal1,bal2,bal3,bal4,bal5,bal6
te vergelijken met
tbl 2 Xaantal records bal1,bal2,bal3,bal4,bal5,bal6 uitslag
met uitslag per record tabl 2 = 3,4,5 of zes overeenkomen met tabl 1
deed dit vroeger via query

UPDATE Gewoonfull, ControleUitslag SET Gewoonfull.uitslag= 3
WHERE Gewoonfull.Bal1=ControleUitslag.bal1 and
Gewoonfull.Bal2=ControleUitslag.bal2 and
Gewoonfull.Bal3=ControleUitslag.bal3 enz

Maar nu zijn de gegevens vermeerdert tot de 217é macht
en is dit met rekentijd te lang,
dit werd in 2003 aan de kant gezet wegens te trege pros/opslag/dit had toen 12 dagen nodig
maa sinds verleden jaar met de huidige I6 en 64 bit op 13 servers overclocked (as usual)
nog op 4d en uur , kwestie van onder de 2,5 dagen te geraken.
Gewoon vergelijken met de deeltjes versneller in genevé die zichzelf inhaalt,
virtueel dan want 2,5 dagen is voldoende op 30000jaar data om 97 % conclussie
en analyse te trekken.
mvg
yves
 
zoiets als in excel

Zoiets als in excel op jullie forum
maar uitslag tabel 1
resultaat tabel 2
excel beperkt tot 65000 records vandaar
mvg
yves
 

Bijlagen

iets als dit maar met update in tabel

iets als dit maar met update in tabel

Code:
Private Sub ControlePlusMin()
Dim i As Byte
Dim j As Byte
Dim Rec As Long
Dim Veld As String

Dim Counter As Byte
Dim Reserve As Boolean

Dim Uitslag(6) As Byte
Dim Bal() As Byte


Set RS_Selectie = DB_AlleUitslagen.OpenRecordset("ControleUitslag")

DB_AlleUitslagen.Execute "delete from ControleUitslag"

Uitslag(0) = CInt(Label1.Caption)
Uitslag(1) = CInt(Label2.Caption)
Uitslag(2) = CInt(Label3.Caption)
Uitslag(3) = CInt(Label4.Caption)
Uitslag(4) = CInt(Label5.Caption)
Uitslag(5) = CInt(Label6.Caption)
Uitslag(6) = CInt(Label7.Caption)

Counter = 0
Reserve = False
Rec = 1
Veld = ""

    
    For i = 0 To UBound(DefSelectie)
        For j = 0 To UBound(Uitslag) - 1
            If DefSelectie(i) = Uitslag(j) Then
                Counter = Counter + 1
                Veld = Veld & i + 1 & "-"
            End If
        Next j
    Next i

    For i = 0 To UBound(DefSelectie)
            For j = UBound(Uitslag) To UBound(Uitslag)
                If DefSelectie(i) = Uitslag(j) Then
                    Reserve = True
                    Veld = Veld & i + 1
                End If
            Next j
    Next i
                   
    If Counter > 2 Then
        RS_Selectie.AddNew
        RS_Selectie!Uitslag = Counter
        RS_Selectie!Reserve = Reserve
        RS_Selectie!Recordnr = Rec
        RS_Selectie!Veld = Veld
        RS_Selectie.Update
        RS_Selectie.MoveLast
    End If
    Rec = Rec + 1
    Veld = ""
    Counter = 0
    Reserve = False


RS_Selectie.Close

SQL = ("Select * from [ControleUitslag] Order by [Uitslag] desc, [reserve] asc")
                                                 
Data2.RecordSource = SQL
Data2.Refresh



End Sub
mvg
yves
 
Laatst bewerkt door een moderator:
nog iets gevonden maar zie de speld in de hooiberg niet meer

Code:
Function GetLottoCount(varCNo As Variant) As String
Dim rstL As DAO.Recordset 'Lotto
Dim rstC As DAO.Recordset 'Check

Dim intC As Integer 'counter for number to check
Dim intTot As Integer 'number of matches

Dim blnRepeat As Boolean 'if same numbe repeated

Dim intForC As Integer
Dim intForL As Integer

Dim strC As String 'holds the field names
Dim strL As String 'ditto

Set rstL = CurrentDb.OpenRecordset("Lotto", dbOpenSnapshot)
Set rstC = CurrentDb.OpenRecordset("Check", dbOpenSnapshot)

rstC.FindFirst "C_No = " & varCNo
rstD.Findfirst "D_No = " & varCNo

For intForC = 1 To 11

'loop through D1..D11, ignore D10 per web
If intForC <> 10 Then

'create the "D1..D11" field name in Check
strC = "D" & intForC

'init counter for each field of D1..D11
intC = 0

For intForL = 1 To 21
'check the value in each field in
'lotto...D1 to D21 to the current
'value being checked from Check.

'create the P1..P21 field name
strL = "P" & intForL

If rstC(strC) = rstL(strL) Then
'there is a match for
'this number
intC = intC + 1
End If
Next

'if the counter is greater than 1, then this
'number has been duplicated
if intC > 1 then blnRepeat = True

'now add the count to the total count
intTot = intTot + intC
End If
Next

'if there aren't 6 matches then "" is returned as it
'doesn't meet any criteria.
If intTot > 5 Then
'the left char..6,7,8,9 (or 1 if >=10)
If intTot >= 10 Then intTot = 1
GetLottoCount = CStr(intTot)

'now set to 1 or 2 depending if there was a repeat
GetLottoCount = GetLottoCount & _
CStr((Abs(blnRepeat) + 1))
End If

rstC.Close
rstL.Close
Set rstC = Nothing
Set rstL = Nothing

End Function
 
Laatst bewerkt door een moderator:
Er zit in ieder geval een foutje in de code; kan uiteraard komen door verkeerd overtypen. De code werkt uiteraard alleen als je ook de tabellen hebt opgemaakt zodat de gegevens op de juiste manier kunnen worden ingelezen. Heb je die tabellen ook?
 
Allereerst mijn excuses aan dit forum , de regelkes bij post niet gelezen.

Nee , die tabellen heb ik niet
tabel1 = laatstetrekking(id /datum /bal1,bal2,bal3,bal4,bal5,bal6,res) 1 record te controleren met
tabel2 = gewoonfull (id/bal1,bal2,bal3,bal4,bal5,bal6,uitslag) in uitslag komt hoeveel gelijk uit laatste trekking ,3,4,5,5+res,6
tabel 2 xaantal records

Mvg
yves
 
Dat is jouw situatie; de functie maakt zo te zien gebruik van andere tabellen, waarvan ik dus niet weet hoe die in elkaar zitten. Vandaar de vraag of je die tabellen ook hebt.
 
Nee deze heb ik niet , spijtig genoeg ,enkel
de mijne in rar posted hierboven
mvg
yves
 
Dan moeten we spelen met de balletjes die we hebben :)
Zal kijken of ik er wat van kan maken...
 
Vind hier nog iets terug in vb

Vind hier nog iets terug in vb
Code:
Private Sub Controle()
Dim i As Byte
Dim j As Byte
Dim Rec As Long
Dim Veld As String

Dim Counter As Byte
Dim Reserve As Boolean

Dim Uitslag(6) As Byte
Dim Bal() As Byte

Set RS_AlleCombinaties = DB_AlleUitslagen.OpenRecordset("" & ComSelectTable.Text & "")
Set RS_Selectie = DB_AlleUitslagen.OpenRecordset("ControleUitslag")

DB_AlleUitslagen.Execute "delete from ControleUitslag"

ProgressBar1.Min = 0
ProgressBar1.Max = RS_AlleCombinaties.RecordCount
ProgressBar1.Value = 0


Uitslag(0) = CInt(Label1.Caption)
Uitslag(1) = CInt(Label2.Caption)
Uitslag(2) = CInt(Label3.Caption)
Uitslag(3) = CInt(Label4.Caption)
Uitslag(4) = CInt(Label5.Caption)
Uitslag(5) = CInt(Label6.Caption)
Uitslag(6) = CInt(Label7.Caption)

Counter = 0
Reserve = False
Rec = 1
Veld = ""

ReDim Bal(RS_AlleCombinaties.Fields.Count - 1)
RS_AlleCombinaties.MoveFirst
Do While Not RS_AlleCombinaties.EOF

    For i = 0 To UBound(Bal)
        Bal(i) = RS_AlleCombinaties(i)
    Next i
    
    For i = 0 To UBound(Bal)
        For j = 0 To UBound(Uitslag) - 1
            If Bal(i) = Uitslag(j) Then
                Counter = Counter + 1
                Veld = Veld & Bal(i) & "-"
            End If
        Next j
    Next i

    For i = 0 To UBound(Bal)
        For j = UBound(Uitslag) To UBound(Uitslag)
                If Bal(i) = Uitslag(j) Then
                    Reserve = True
                    Veld = Veld & Bal(i)
                End If
            Next j
    Next i
                   
    If Counter > 1 Then
        RS_Selectie.AddNew
        RS_Selectie!Uitslag = Counter
        RS_Selectie!Reserve = Reserve
        RS_Selectie!Recordnr = Rec
        RS_Selectie!Veld = Veld
        RS_Selectie.Update
        RS_Selectie.MoveLast
    End If
    Rec = Rec + 1
    Veld = ""
    Counter = 0
    Reserve = False
    ProgressBar1.Value = ProgressBar1.Value + 1
    RS_AlleCombinaties.MoveNext
Loop
RS_Selectie.Close
RS_AlleCombinaties.Close

SQL = ("Select * from [ControleUitslag] Order by [Uitslag] desc, [reserve] asc")
                                                 
Data2.RecordSource = SQL
Data2.Refresh

MsgBox ("Controle Is uitgevoerd")
Mvg
Yves
 
In principe kan dit via query,
maar dan heb je er 21 nodig voor controle 3 cfr
+ 17 aantal 4 cfr
+7 aantal 5 cfr
+ 6 aantal 5+ cfr
+ 1 voor 6 cfr
ok op 2000 records
maar op veelvoud zitten we met probleem
Mvg
yves
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan