I have this query in Access. It works very fast and with excellent performance. But when I want to use this query in Excel using ADODB.RECORDSET, it takes about 15 minutes to copy the record set information via Range.CopyFromRecordset
SELECT
d.ShamsiDate,
d.UnitNo,
d.[Counter_MVH+],
(SELECT max( d1.[Counter_MVH+] )
FROM tblData AS d1
WHERE d1.ShamsiDate < d.ShamsiDate AND d1.UnitNo = d.UnitNo
) AS PriorValue
FROM tblData d;
code that used in vba :
Dim cn As Object, rs As Object, sq As String
Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")
sq = _
"SELECT d.ShamsiDate, d.UnitNo, d.[Counter_MVH+], " & _
"(SELECT MAX(d1.[Counter_MVH+]) " & _
"FROM [Data$] d1 " & _
"WHERE d1.UnitNo = d.UnitNo AND d1.ShamsiDate < d.ShamsiDate ) AS PriorValue " & _
"FROM [Data$] d;"
cn.connectionstring = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & ";Extended Properties='Excel 12.0 Xml;HDR=YES';"
cn.Open
rs.Open sq, cn, 3, 1
Sheet2.Range("A2").CopyFromRecordset rs
rs.Close
cn.Close
Thank you. I would appreciate it if you could help me.