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
Q2
Eventcode van de keuzelijst:
Code Functie:
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? :) ]