Toon posts:

Zoeken naar dubbele Records via DAO

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hallo iedereen,

Ik heb in Access 2 query's gemaakt om dubbele records te zoeken uit een tabel.
Omdat de tabel heel veel records heeft, wordt er in de eerste query gefilterd.
Het zoeken naar dubbele records gebeurt in de tweede query, die op zijn beurt in het
eerste queryresultaat zoekt.

Via de accessinterface klik op de 2de query, die vraagt een parameter ( van de eerste query ),
en geeft het eindresultaat. Geen probleem

Nu wil ik dit toepassen op een formulier met keuzelijst voor de Parameter van Q1 en een Listbox voor het eindresultaat van Q2.
Dit is gedeeltelijk gelukt via VBA en ADO, het resultaat van Q1 kan ik in de
ListBox plaatsen met onderstaande code.
Maar dat is niet wat ik wil, de recordset van Q2 moet in de ListBox verschijnen!!

Hoe schrijf ik de SQL code voor Q2 ? (VBA met ADO)
Moeten Q1 en Q2 samengevoegd worden ( subquery ) ?
Moet de recordset van Q1 eerst opgeslagen worden, om nadien met Q2 het eindresultaat te bekomen?
Een recordset van een recordset maken, moet toch veel voorkomen, dacht ik zo !
Heb al van alles geprobeerd, maar ik geraak er niet uit!




SQL Code die Access gegenereerd heeft.
De Tabel en Veldnamen zijn hier aangepast.

Q1

code:
1
2
3
4
5
6
7
8
PARAMETERS PAR1 Text ( 255 );
SELECT Tabel1.veld1 AS PartNr, Tabel1.veld2 AS VolgNr, Tabel1.veld3 AS DagSt, Tabel1.veld4 AS Process, Tabel1.veld5 AS Datum, Tabel1.veld6 AS Opmerking
FROM Tabel1
GROUP BY Tabel1.veld2, Tabel1.veld3, Tabel1.veld4, Tabel1.veld5, 
Tabel1.veld6,Tabel1.veld7
HAVING (((Tabel1.veld2)=[PAR1]) AND ((Tabel1.veld5) In ('1','2')))
ORDER BY Tabel1.veld4 DESC
WITH OWNERACCESS OPTION;



Q2

code:
1
2
3
4
5
SELECT TOP 20 Q1.VolgNr, Q1.DagSt, Q1.Process, Q1.DATUM, Q1.Opmerking
FROM Q1
WHERE (((Q1.DagSt) In (SELECT [DagSt] FROM [Q1] As Tmp GROUP BY [DagSt] 
HAVING Count(*)>1 )))
ORDER BY Q1.DagSt DESC , Q1.Process DESC;





Eventcode van de keuzelijst:

Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Private Sub cboParts_AfterUpdate()
    Dim rst1 As ADODB.Recordset
    
    ' functie om een recordset te maken via een Parameter.    
    Set rst1 = MakeRecSet("Q1", cboParts.Value)
    
    lstMetingen.RowSource = ""
        
    rst1.MoveFirst
    Do Until rst1.EOF
        str1 = ""
        For i = 1 To rst1.Fields.Count - 1
            str1 = str1 + IIf(rst1.Fields(i) <> "", CStr(rst1.Fields(i)), "") + ";"
        Next i
        lstMetingen.AddItem str1
        rst1.MoveNext
    Loop

End Sub


Code Functie:
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Function MakeRecSet(QName1 As String, Optional ParVal1 As String) As ADODB.Recordset

    Dim cmd1 As New ADODB.Command
    Dim prm1 As ADODB.Parameter
    
    If ParVal1 <> "" Then
        cmd1.ActiveConnection = CurrentProject.Connection
        cmd1.CommandText = QName1
        cmd1.CommandType = adCmdStoredProc
        Set prm1 = cmd1.CreateParameter("[PARTNR]", adVarWChar, adParamInput, 5)
        cmd1.Parameters.Append prm1
        prm1.Value = ParVal1
    End If
    
   
    Set MakeRecSet = cmd1.Execute
'   Debug.Print MakeRecSet.GetString(adClipString, , "; ")

End Function

[ Voor 4% gewijzigd door NMe op 14-06-2005 17:09 . Reden: Ik heb even [code] tags in je post gezet, wil je dat volgende keer zelf doen? :) ]


Verwijderd

ik zou het zo niet weten hoe je dit precies kan doen. Ik heb even wat gezocht op internet en kwam op deze site terecht. Misschien dat je hier wat meer kan vinden.

http://office.webforums.nl/forum/search.php?mode=results

zoeken op Dubbele AND Records

Selecteer het Access forum (links)

Groeten,

Remco Olthof

[ Voor 13% gewijzigd door Verwijderd op 18-06-2005 13:00 ]