Duane said:
I think we need another possible solution.
As this is the tabledesign group, what about a data-driven solution?
If the OP has a Sequence table of integers (seq), parsing and counting
is easy:
SELECT T2.data_col, COUNT(S1.seq) AS tally
FROM Test2 AS T2, [Sequence] AS S1
WHERE MID$(T2.data_col, S1.seq, 1) = '.'
AND S1.seq BETWEEN 1 AND 20
GROUP BY T2.data_col
Here's the VBA to fully reproduce:
Sub CountChar()
Dim cat
Set cat = CreateObject("ADOX.Catalog")
With cat
.Create _
"Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=C:\DropMe.mdb"
With .ActiveConnection
' Create Sequence table seq = 1 to 100
.Execute _
"CREATE TABLE [Sequence] ( seq INTEGER NOT" & _
" NULL PRIMARY KEY)"
.Execute _
"INSERT INTO [Sequence] (seq) VALUES (1);"
.Execute _
"INSERT INTO [Sequence] SELECT Units.nbr" & _
" + Tens.nbr AS seq FROM ( SELECT nbr FROM" & _
" ( SELECT 0 AS nbr FROM [Sequence] UNION" & _
" ALL SELECT 1 FROM [Sequence] UNION ALL" & _
" SELECT 2 FROM [Sequence] UNION ALL SELECT" & _
" 3 FROM [Sequence] UNION ALL SELECT 4 FROM" & _
" [Sequence] UNION ALL SELECT 5 FROM [Sequence]" & _
" UNION ALL SELECT 6 FROM [Sequence] UNION" & _
" ALL SELECT 7 FROM [Sequence] UNION ALL" & _
" SELECT 8 FROM [Sequence] UNION ALL SELECT" & _
" 9 FROM [Sequence] ) AS Digits ) AS Units," & _
" ( SELECT nbr * 10 AS nbr FROM ( SELECT" & _
" 0 AS nbr FROM [Sequence] UNION ALL SELECT" & _
" 1 FROM [Sequence] UNION ALL SELECT 2 FROM" & _
" [Sequence] UNION ALL SELECT 3 FROM [Sequence]" & _
" UNION ALL SELECT 4 FROM [Sequence] UNION" & _
" ALL SELECT 5 FROM [Sequence] UNION ALL" & _
" SELECT 6 FROM [Sequence] UNION ALL SELECT" & _
" 7 FROM [Sequence] UNION ALL SELECT 8 FROM" & _
" [Sequence] UNION ALL SELECT 9 FROM [Sequence]" & _
" ) AS Digits ) AS Tens WHERE Units.nbr +" & _
" Tens.nbr BETWEEN 2 AND 100 "
' Create test table
.Execute _
"CREATE TABLE Test2 (data_col VARCHAR(20)" & _
" NOT NULL);"
.Execute _
"INSERT INTO Test2 (data_col) VALUES" & _
" ('asd.rty.de.com');"
' Show results parsed
Dim rs
Set rs = .Execute( _
"SELECT T2.data_col, S1.seq AS pos, MID$(T2.data_col," & _
" S1.seq, 1) AS data_char FROM Test2 AS T2," & _
" [Sequence] AS S1 WHERE MID$(T2.data_col," & _
" S1.seq, 1) = '.' AND S1.seq BETWEEN 1 AND" & _
" 20")
MsgBox rs.GetString
rs.Close
' Show results tally
Set rs = .Execute( _
"SELECT T2.data_col, COUNT(S1.seq) AS tally" & _
" FROM Test2 AS T2, [Sequence] AS S1 WHERE" & _
" MID$(T2.data_col, S1.seq, 1) = '.' AND" & _
" S1.seq BETWEEN 1 AND 20 GROUP BY T2.data_col")
MsgBox rs.GetString
rs.Close
End With
Set .ActiveConnection = Nothing
End With
End Sub
Jamie.
--