SQL = "SELECT Top 1 x.*, (SELECT COUNT(RecID) FROM CerfTbl WHERE (FatherCertNo = x.CertNo)) as NoOfSubCerfs FROM CerfTbl x WHERE (" & StrWhere & " AND FatherCertNo Is Null) ORDER BY [DATEFLD] DESC, [RecID] DESC"
Og den viser kun én record når jeg søger på Test selvom der er mange der hedder det. Any Idea ?
RecID Item Name Date 1 Test Test 1 01-01-2000 2 Test Test 1 01-02-2000 3 Testos Test 2 01-03-2000 4 Testos Test 2 01-04-2000
Når jeg så søger på bogstavet T ( Som søger i feltet Item ) Skal den vise mig flg.:
RecID Item Name Date 2 Test Test 1 01-02-2000 4 Testos Test 2 01-04-2000 Og det skal den fordi data i de 2 records er ikke ens, men indeholder begge bogstavet t i item. Så den skal ligesom udligne dem hvor data i felterne er ens og kun vise den sidste nye.
Hvilket så vil sige, at din SQL burde se ud som noget i stil med:
SQL = "SELECT x.*, (SELECT COUNT(RecID) FROM CerfTbl WHERE (FatherCertNo = x.CertNo)) as NoOfSubCerfs FROM CerfTbl x WHERE (" & StrWhere & " AND FatherCertNo Is Null) GROUP BY item ORDER BY [DATEFLD] DESC, [RecID] DESC"
Noget i denne stil: SQL = "SELECT MAX(x.recid) AS recId, x.item, x.name, MAX(x.date) AS DATEFLD, (SELECT COUNT(RecID) FROM CerfTbl WHERE (FatherCertNo = x.CertNo)) as NoOfSubCerfs FROM CerfTbl x GROUP BY x.item, x.name WHERE (" & StrWhere & " AND FatherCertNo Is Null) ORDER BY [DATEFLD] DESC, [RecID] DESC"
RecID CertNo Datefld 1 Test 01-01-2000 2 Test 01-02-2000 3 Testos 01-03-2000 4 Testos 01-04-2000
Når jeg så søger på bogstavet T ( Som søger i feltet Item ) Skal den vise mig flg.: RecID CertNo Datefld 2 Test 01-02-2000 4 Testos 01-04-2000
Til ovenstående vil jeg bruge flg. sql streng: SQL = "SELECT MAX(x.recid) AS RecId, x.CertNo2, MAX(x.DateFld) AS DATEFLD, (SELECT COUNT(RecID) FROM CerfTbl WHERE (FatherCertNo = x.CertNo)) as NoOfSubCerfs FROM CerfTbl x WHERE (" & StrWhere & " AND FatherCertNo Is Null) GROUP BY x.CertNo ORDER BY [DATEFLD] DESC, [RecID] DESC"
Gør det nogen forskel om der er 40 andre felter i basen, det er jo ikke nogen jeg skal bruge i denne her sammenhæng.
Under alle omstændigheder får jeg denne fejl:
ADODB.Recordset error '800a0cc1' Item cannot be found in the collection corresponding to the requested name or ordinal.
Har delvist fundet ud af noget, hvis jeg bruger en sql query og indtaster nedenstående: SELECT * FROM CerfTbl D WHERE DateFld = ( SELECT MAX (DateFld) FROM CerfTbl WHERE CertNo = D.CertNo ) ORDER BY CertNo, DateFld; Så får jeg det output jeg skal bruge.
Så nu skal jeg have flettet det sammen med min nuværende sql streng: SQL = "SELECT x.*, (SELECT COUNT(RecID) FROM CerfTbl WHERE (FatherCertNo = x.CertNo)) as NoOfSubCerfs FROM CerfTbl x WHERE (" & StrWhere & " AND FatherCertNo Is Null) ORDER BY " & SortField & " " & SortOrder
Jeg kan se du har forskel på CertNo2 og CertNo i din select og group by. Går ud fra at det er CertNo2 du vil vælge og derfor er det også den, der skal stå på group by:
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.