Open Recordset from variable recordset error

Sevn

I trust ME!
Local time
Today, 16:33
Joined
Mar 13, 2008
Messages
97
Hello,

I'm trying to process some reports, and need to be able to create a recordset from a variable recordset created in my code, and keep getting the following error: The Microsoft Office database engine cannot find the input table or query 'Rs2'. Blah, Blah, Blah.

Rs2 is a variable in my code, which represents a dataset I create on the fly.

I'm sure it's a formatting issue, but can't figure it out.

Anyone got any suggestions?

Here's my current code, and the line in question is in red.
Code:
Public Sub ProdGrpExport()

Dim dbPath As String
Dim fileFolder As String
Dim Rs1 As DAO.Recordset
Dim Rs2 As DAO.Recordset
Dim Rs3 As DAO.Recordset
Dim strRepID As String
Dim strRep As String

dbPath = Application.CurrentProject.Path
Set Rs1 = CurrentDb.OpenRecordset("SELECT tblSmGrd.SalesTerrSCust, tblTerr.TerrName FROM tblTerr RIGHT JOIN tblSmGrd ON tblTerr.TerrID = tblSmGrd.SalesTerrSCust GROUP BY tblSmGrd.SalesTerrSCust, tblTerr.TerrName HAVING (((tblSmGrd.SalesTerrSCust) Is Not Null And (tblSmGrd.SalesTerrSCust)<>' '));")

Do Until Rs1.EOF
strRepID = Rs1("SalesTerrSCust")
strRep = Rs1("TerrName")

Set Rs2 = CurrentDb.OpenRecordset("SELECT tblSmGrd.Year AS Yr, tblSmGrd.MarketSegSCust, tblSmGrd.RegionSCust, tblSmGrd.SalesTerrSCust, tblSmGrd.ProdGrp, tblSmGrd.ProdCat, tblSmGrd.NWgtImperial AS Vol, tblSmGrd.GrossSalesUSD AS GsUSD, tblSmGrd.GrossSalesL AS GsCAD, tblSmGrd.NetSalesUSD AS NsUSD, tblSmGrd.NetSalesL AS NsCAD, tblSmGrd.COGSUSD AS CgUSD, tblSmGrd.COGSL AS CgCAD, tblSmGrd.MarginUSD AS MgnUSD, tblSmGrd.MarginL AS MgnCAD FROM tblSmGrd WHERE (((tblSmGrd.SalesTerrSCust)= '" & SalesTerrScust & "'));", dbOpenDynaset)
[COLOR="Red"]Set Rs3 = CurrentDb.OpenRecordset("SELECT Rs2.Yr, Rs2.ProdGrp, Rs2.ProdCat, Sum(Rs2.Vol) AS Vol, Sum(Rs2.GsUSD) AS GsUSD, Sum(Rs2.GsCAD) AS GsCAD, Sum(Rs2.NsUSD) AS NsUSD, Sum(Rs2.NsCAD) AS NsCAD, Sum(Rs2.CgUSD) AS CgUSD, Sum(Rs2.CgCAD) AS CgCAD, Sum(Rs2.MgnUSD) AS MgnUSD, Sum(Rs2.MgnCAD) AS MgnCAD FROM Rs2 GROUP BY Rs2.Yr, Rs2.ProdGrp, Rs2.ProdCat;")[/COLOR]

DoCmd.RunSQL ("DELETE tblProdTot.* FROM tblProdTot;")
DoCmd.RunSQL ("INSERT INTO tblProdTot ( ProdGrp, ProdCat, BuVol, BuGsUSD, BuGsCAD, BuNsUSD, BuNsCAD, BuCgUSD, BuCgCAD, BuMgnUSD, BuMgnCAD ) SELECT Rs3.ProdGrp, Rs3.ProdCat, Rs3.Vol, Rs3.GsUSD, Rs3.GsCAD, Rs3.NsUSD, Rs3.NsCAD, Rs3.CgUSD, Rs3.CgCAD, Rs3.MgnUSD, Rs3.MgnCAD FROM Rs3 WHERE (((Rs3.Yr)=10));")
DoCmd.RunSQL ("INSERT INTO tblProdTot ( ProdGrp, ProdCat, 09Vol, 09GsUSD, 09GsCAD, 09NsUSD, 09NsCAD, 09CgUSD, 09CgCAD, 09MgnUSD, 09MgnCAD ) SELECT Rs3.ProdGrp, Rs3.ProdCat, Rs3.Vol, Rs3.GsUSD, Rs3.GsCAD, Rs3.NsUSD, Rs3.NsCAD, Rs3.CgUSD, Rs3.CgCAD, Rs3.MgnUSD, Rs3.MgnCAD FROM Rs3 WHERE (((Rs3.Yr)=9));")
DoCmd.RunSQL ("INSERT INTO tblProdTot ( ProdGrp, ProdCat, 08Vol, 08GsUSD, 08GsCAD, 08NsUSD, 08NsCAD, 08CgUSD, 08CgCAD, 08MgnUSD, 08MgnCAD ) SELECT Rs3.ProdGrp, Rs3.ProdCat, Rs3.Vol, Rs3.GsUSD, Rs3.GsCAD, Rs3.NsUSD, Rs3.NsCAD, Rs3.CgUSD, Rs3.CgCAD, Rs3.MgnUSD, Rs3.MgnCAD FROM Rs3 WHERE (((Rs3.Yr)=8));")
DoCmd.RunSQL ("INSERT INTO tblProdTot ( ProdGrp, ProdCat, 07Vol, 07GsUSD, 07GsCAD, 07NsUSD, 07NsCAD, 07CgUSD, 07CgCAD, 07MgnUSD, 07MgnCAD ) SELECT Rs3.ProdGrp, Rs3.ProdCat, Rs3.Vol, Rs3.GsUSD, Rs3.GsCAD, Rs3.NsUSD, Rs3.NsCAD, Rs3.CgUSD, Rs3.CgCAD, Rs3.MgnUSD, Rs3.MgnCAD FROM Rs3 WHERE (((Rs3.Yr)=7));")

DoCmd.OpenReport "rptProdTot", acViewReport
DoCmd.OutputTo acOutputReport, "rptProdTot", acFormatPDF, dbPath & "\Exports\" & Year(Now) & Right("0" & Month(Now), 2) & Right("0" & Day(Now), 2) & "\" & strRep & ".pdf", , , , acExportQualityPrint

Rs1.MoveNext
Loop

End Sub

Thanks,
:D
 
Last edited:
Something along these lines:

Set Rs3 = CurrentDb.OpenRecordset("SELECT " & Rs2.Yr & ", " & Rs2.ProdGrp...
 
That's what I thought at first, but it doesn't seem to work.

I tried this, and get a type mismatch error, and it highlights the very first Rs2.
Code:
Set Rs3 = CurrentDb.OpenRecordset("SELECT " & [COLOR="Red"]Rs2[/COLOR] & ".Yr, " & Rs2 & ".ProdGrp, " & Rs2 & ".ProdCat, Sum(" & Rs2 & ".Vol) AS Vol, Sum(" & Rs2 & ".GsUSD) AS GsUSD, Sum(" & Rs2 & ".GsCAD) AS GsCAD, Sum(" & Rs2 & ".NsUSD) AS NsUSD, Sum(" & Rs2 & ".NsCAD) AS NsCAD, Sum(" & Rs2 & ".CgUSD) AS CgUSD, Sum(" & Rs2 & ".CgCAD) AS CgCAD, Sum(" & Rs2 & ".MgnUSD) AS MgnUSD, Sum(" & Rs2 & ".MgnCAD) AS MgnCAD FROM Rs2 GROUP BY " & Rs2 & ".Yr, " & Rs2 & ".ProdGrp, " & Rs2 & ".ProdCat;")
 
Last edited:
What you've just written doesn't conform to what pbaldy suggested.
 
What you've just written doesn't conform to what pbaldy suggested.

Agreed -

Sevn read Paul's response again and see that you have not included the correct items outside of the quotes, etc.
 
I also had a little cut/paste typo. Dot should be bang:

"SELECT " & Rs2!Yr &...

If that's not it, what is being returned by rs2 and how does it fit into the SQL?
 
I did try it his way first, and realized he possibly made a typo.

My variable name for the recordset is Rs2, not Rs2.Yr. Correct me if I'm wrong, but only the variable name goes between the syntax (" & variable & ").

I just tried it his way again, and get "Method or data member not found" error, and it highlights the piece in red.

Set Rs3 = CurrentDb.OpenRecordset("SELECT " & Rs2.Yr & ", Rs2.ProdGrp, Rs2.ProdCat, Sum(Rs2.Vol) AS Vol, Sum(Rs2.GsUSD) AS GsUSD, Sum(Rs2.GsCAD) AS GsCAD, Sum(Rs2.NsUSD) AS NsUSD, Sum(Rs2.NsCAD) AS NsCAD, Sum(Rs2.CgUSD) AS CgUSD, Sum(Rs2.CgCAD) AS CgCAD, Sum(Rs2.MgnUSD) AS MgnUSD, Sum(Rs2.MgnCAD) AS MgnCAD FROM Rs2 GROUP BY Rs2.Yr, Rs2.ProdGrp, Rs2.ProdCat;")
 
Did you notice post 6?
 
I have to ask why are you trying to do a select on a recordset anyway? Why are you not using the same thing as RS2? It makes no sense to me anyway.
 
Rs1 is a loop recordset to see how many SalesReps there are, and how many to loop.

Rs2 is a filtered recordset of the original table, with first SalesRepID from Rs1 as the Where clause.

Rs3 is a summary query, based on Rs2 results.

Here's what I have after changing to Paul's syntax, and get a Type Mismatch on the Recordsource name in red.
Code:
Set Rs3 = CurrentDb!OpenRecordset("SELECT " & Rs2!Yr & ", " & Rs2!ProdGrp & ", " & Rs2!ProdCat & ", Sum(" & Rs2!Vol & ") AS Vol, Sum(" & Rs2!GsUSD & ") AS GsUSD, Sum(" & Rs2!GsCAD & ") AS GsCAD, Sum(" & Rs2!NsUSD & ") AS NsUSD, Sum(" & Rs2!NsCAD & ") AS NsCAD, Sum(" & Rs2!CgUSD & ") AS CgUSD, Sum(" & Rs2!CgCAD & ") AS CgCAD, Sum(" & Rs2!MgnUSD & ") AS MgnUSD, Sum(" & Rs2!MgnCAD & ") AS MgnCAD FROM " & [COLOR="Red"]Rs2[/COLOR] & " GROUP BY " & Rs2!Yr & ", " & Rs2!ProdGrp & ", " & Rs2!ProdCat & ";")
 
You don't need the recordsets to do a nested SQL query.
 
SOS,

If that is true, how do you do it for this?
Code:
Set Rs2 = CurrentDb.OpenRecordset("SELECT tblSmGrd.Year AS Yr, tblSmGrd.MarketSegSCust, tblSmGrd.RegionSCust, tblSmGrd.SalesTerrSCust, tblSmGrd.ProdGrp, tblSmGrd.ProdCat, tblSmGrd.NWgtImperial AS Vol, tblSmGrd.GrossSalesUSD AS GsUSD, tblSmGrd.GrossSalesL AS GsCAD, tblSmGrd.NetSalesUSD AS NsUSD, tblSmGrd.NetSalesL AS NsCAD, tblSmGrd.COGSUSD AS CgUSD, tblSmGrd.COGSL AS CgCAD, tblSmGrd.MarginUSD AS MgnUSD, tblSmGrd.MarginL AS MgnCAD FROM tblSmGrd WHERE (((tblSmGrd.SalesTerrSCust)= '" & SalesTerrScust & "'));", dbOpenDynaset)
Set Rs3 = CurrentDb!OpenRecordset("SELECT " & Rs2!Yr & ", " & Rs2!ProdGrp & ", " & Rs2!ProdCat & ", Sum(" & Rs2!Vol & ") AS Vol, Sum(" & Rs2!GsUSD & ") AS GsUSD, Sum(" & Rs2!GsCAD & ") AS GsCAD, Sum(" & Rs2!NsUSD & ") AS NsUSD, Sum(" & Rs2!NsCAD & ") AS NsCAD, Sum(" & Rs2!CgUSD & ") AS CgUSD, Sum(" & Rs2!CgCAD & ") AS CgCAD, Sum(" & Rs2!MgnUSD & ") AS MgnUSD, Sum(" & Rs2!MgnCAD & ") AS MgnCAD FROM " & Rs2 & " GROUP BY " & Rs2!Yr & ", " & Rs2!ProdGrp & ", " & Rs2!ProdCat & ";")
 
Something like this (we may have two work at it because I'm not sure where you are getting this part:

)= '” & SalesTerrScust & "'))

But here is what I have:

Code:
[FONT=Times New Roman][SIZE=3]Set Rs3 = CurrentDb!OpenRecordset("SELECT [Yr], [ProdGrp], [ProdCat], [/SIZE][/FONT]
[FONT=Times New Roman][SIZE=3]Sum(Vol) AS [TotVol], Sum(GsUSD) AS [TotGsUSD], Sum(GsCAD) AS [/SIZE][/FONT]
[FONT=Times New Roman][SIZE=3][TotGsCAD], Sum(NsUSD) AS [TotNsUSD], Sum(NsCAD) AS [NsCAD], [/SIZE][/FONT]
[FONT=Times New Roman][SIZE=3]Sum(CgUSD) AS [TotCgUSD], Sum(CgCAD) AS [TotCgCAD], Sum[/SIZE][/FONT]
[FONT=Times New Roman][SIZE=3](MgnUSD) AS [TotMgnUSD], Sum(MgnCAD) AS [TotMgnCAD] FROM[/SIZE][/FONT]
[FONT=Times New Roman][SIZE=3](SELECT tblSmGrd.Year AS [Yr], tblSmGrd.MarketSegSCust, [/SIZE][/FONT]
[FONT=Times New Roman][SIZE=3]tblSmGrd.RegionSCust, tblSmGrd.SalesTerrSCust, tblSmGrd.ProdGrp, [/SIZE][/FONT]
[FONT=Times New Roman][SIZE=3]tblSmGrd.ProdCat, tblSmGrd.NWgtImperial AS [Vol], [/SIZE][/FONT]
[FONT=Times New Roman][SIZE=3]tblSmGrd.GrossSalesUSD AS [GsUSD], tblSmGrd.GrossSalesL AS [GsCAD], [/SIZE][/FONT]
[FONT=Times New Roman][SIZE=3]tblSmGrd.NetSalesUSD AS [NsUSD], tblSmGrd.NetSalesL AS [NsCAD], [/SIZE][/FONT]
[FONT=Times New Roman][SIZE=3]tblSmGrd.COGSUSD AS [CgUSD], tblSmGrd.COGSL AS [CgCAD], [/SIZE][/FONT]
[FONT=Times New Roman][SIZE=3]tblSmGrd.MarginUSD AS [MgnUSD], tblSmGrd.MarginL AS [MgnCAD] [/SIZE][/FONT]
[FONT=Times New Roman][SIZE=3]FROM tblSmGrd WHERE (((tblSmGrd.SalesTerrSCust)= '” & SalesTerrScust & [/SIZE][/FONT]
[FONT=Times New Roman][SIZE=3]"'))  GROUP BY [Yr], [ProdGrp] , [ProdCat]);”)[/SIZE][/FONT]
 
I think I got the nested SQL figured out.

New SQL line in red. The second query was simply summaries, so I think I just needed to add sum() around the fields, and remove the fields I didn't want to show. Although; now the Insert Into statements that refer to the recordset aren't running. They error out saying Rs2 doesn't exist. It again highlights the variable name for the recordset (highlighted in yellow).

Code:
Public Sub ProdGrpExport()

Dim dbPath As String
Dim fileFolder As String
Dim Rs1 As DAO.Recordset
Dim Rs2 As DAO.Recordset
Dim Rs3 As DAO.Recordset
Dim strRepID As String
Dim strRep As String

dbPath = Application.CurrentProject.Path
Set Rs1 = CurrentDb.OpenRecordset("SELECT tblSmGrd.SalesTerrSCust, tblTerr.TerrName FROM tblTerr RIGHT JOIN tblSmGrd ON tblTerr.TerrID = tblSmGrd.SalesTerrSCust GROUP BY tblSmGrd.SalesTerrSCust, tblTerr.TerrName HAVING (((tblSmGrd.SalesTerrSCust) Is Not Null And (tblSmGrd.SalesTerrSCust)<>' '));")

Do Until Rs1.EOF
strRepID = Rs1("SalesTerrSCust")
strRep = Rs1("TerrName")

[COLOR="Red"]Set Rs2 = CurrentDb.OpenRecordset("SELECT sum(tblSmGrd.Year) AS Yr, tblSmGrd.ProdGrp, tblSmGrd.ProdCat, sum(tblSmGrd.NWgtImperial) AS Vol, sum(tblSmGrd.GrossSalesUSD) AS GsUSD, sum(tblSmGrd.GrossSalesL) AS GsCAD, sum(tblSmGrd.NetSalesUSD) AS NsUSD, sum(tblSmGrd.NetSalesL) AS NsCAD, sum(tblSmGrd.COGSUSD) AS CgUSD, sum(tblSmGrd.COGSL) AS CgCAD, sum(tblSmGrd.MarginUSD) AS MgnUSD, sum(tblSmGrd.MarginL) AS MgnCAD FROM tblSmGrd WHERE (((tblSmGrd.SalesTerrSCust)= '" & SalesTerrScust & "')) GROUP BY tblSmGrd.Year, tblSmGrd.ProdGrp, tblSmGrd.ProdCat;", dbOpenDynaset)[/COLOR]

DoCmd.RunSQL ("DELETE tblProdTot.* FROM tblProdTot;")
DoCmd.RunSQL ("INSERT INTO tblProdTot ( ProdGrp, ProdCat, BuVol, BuGsUSD, BuGsCAD, BuNsUSD, BuNsCAD, BuCgUSD, BuCgCAD, BuMgnUSD, BuMgnCAD ) SELECT Rs2.ProdGrp, Rs2.ProdCat, Rs2.Vol, Rs2.GsUSD, Rs2.GsCAD, Rs2.NsUSD, Rs2.NsCAD, Rs2.CgUSD, Rs2.CgCAD, Rs2.MgnUSD, Rs2.MgnCAD FROM [COLOR="Yellow"]Rs2[/COLOR] WHERE (((Rs2.Yr)=10));")
DoCmd.RunSQL ("INSERT INTO tblProdTot ( ProdGrp, ProdCat, 09Vol, 09GsUSD, 09GsCAD, 09NsUSD, 09NsCAD, 09CgUSD, 09CgCAD, 09MgnUSD, 09MgnCAD ) SELECT Rs2.ProdGrp, Rs2.ProdCat, Rs2.Vol, Rs2.GsUSD, Rs2.GsCAD, Rs2.NsUSD, Rs2.NsCAD, Rs2.CgUSD, Rs2.CgCAD, Rs2.MgnUSD, Rs2.MgnCAD FROM Rs2 WHERE (((Rs2.Yr)=9));")
DoCmd.RunSQL ("INSERT INTO tblProdTot ( ProdGrp, ProdCat, 08Vol, 08GsUSD, 08GsCAD, 08NsUSD, 08NsCAD, 08CgUSD, 08CgCAD, 08MgnUSD, 08MgnCAD ) SELECT Rs2.ProdGrp, Rs2.ProdCat, Rs2.Vol, Rs2.GsUSD, Rs2.GsCAD, Rs2.NsUSD, Rs2.NsCAD, Rs2.CgUSD, Rs2.CgCAD, Rs2.MgnUSD, Rs2.MgnCAD FROM Rs2 WHERE (((Rs2.Yr)=8));")
DoCmd.RunSQL ("INSERT INTO tblProdTot ( ProdGrp, ProdCat, 07Vol, 07GsUSD, 07GsCAD, 07NsUSD, 07NsCAD, 07CgUSD, 07CgCAD, 07MgnUSD, 07MgnCAD ) SELECT Rs2.ProdGrp, Rs2.ProdCat, Rs2.Vol, Rs2.GsUSD, Rs2.GsCAD, Rs2.NsUSD, Rs2.NsCAD, Rs2.CgUSD, Rs2.CgCAD, Rs2.MgnUSD, Rs2.MgnCAD FROM Rs2 WHERE (((Rs2.Yr)=7));")

DoCmd.OpenReport "rptProdTot", acViewReport
DoCmd.OutputTo acOutputReport, "rptProdTot", acFormatPDF, dbPath & "\Exports\" & Year(Now) & Right("0" & Month(Now), 2) & Right("0" & Day(Now), 2) & "\" & strRep & ".pdf", , , , acExportQualityPrint

Rs1.MoveNext
Loop

End Sub
 
Can someone tell me if what I'm trying is even possible? I read somewhere that it may not be.

It seems to me that it should be easy.

Set recordset to a variable, and use variable for reference to my recordset. I don't understand why it won't let me do it.
 
Well, I think I've almost got it.

I modified the Insert Into statement, and it doesn't give me the Type Mismatch Eror, but it tells me I'm missing a semicolon. Screenshot of Error attached. The error occurs in the red highlighted line.

Here's my code:
Code:
Public Sub ProdGrpExport()

Dim dbPath As String
Dim fileFolder As String
Dim Rs1 As DAO.Recordset
Dim Rs2 As DAO.Recordset
Dim Rs3 As DAO.Recordset
Dim strRepID As String
Dim strRep As String

dbPath = Application.CurrentProject.Path
Set Rs1 = CurrentDb.OpenRecordset("SELECT tblSmGrd.SalesTerrSCust, tblTerr.TerrName FROM tblTerr RIGHT JOIN tblSmGrd ON tblTerr.TerrID = tblSmGrd.SalesTerrSCust GROUP BY tblSmGrd.SalesTerrSCust, tblTerr.TerrName HAVING (((tblSmGrd.SalesTerrSCust) Is Not Null And (tblSmGrd.SalesTerrSCust)<>' '));")

Do Until Rs1.EOF
strRepID = Rs1("SalesTerrSCust")
strRep = Rs1("TerrName")

Set Rs2 = CurrentDb.OpenRecordset("SELECT sum(tblSmGrd.Year) AS Yr, tblSmGrd.ProdGrp, tblSmGrd.ProdCat, sum(tblSmGrd.NWgtImperial) AS Vol, sum(tblSmGrd.GrossSalesUSD) AS GsUSD, sum(tblSmGrd.GrossSalesL) AS GsCAD, sum(tblSmGrd.NetSalesUSD) AS NsUSD, sum(tblSmGrd.NetSalesL) AS NsCAD, sum(tblSmGrd.COGSUSD) AS CgUSD, sum(tblSmGrd.COGSL) AS CgCAD, sum(tblSmGrd.MarginUSD) AS MgnUSD, sum(tblSmGrd.MarginL) AS MgnCAD FROM tblSmGrd WHERE (((tblSmGrd.SalesTerrSCust)= '" & SalesTerrScust & "')) GROUP BY tblSmGrd.Year, tblSmGrd.ProdGrp, tblSmGrd.ProdCat;", dbOpenDynaset)

DoCmd.RunSQL ("DELETE tblProdTot.* FROM tblProdTot;")
[COLOR="Red"]CurrentDb.Execute ("INSERT INTO tblProdTot ( ProdGrp, ProdCat, BuVol, BuGsUSD, BuGsCAD, BuNsUSD, BuNsCAD, BuCgUSD, BuCgCAD, BuMgnUSD, BuMgnCAD ) VALUES (Rs2.ProdGrp, Rs2.ProdCat, Rs2.Vol, Rs2.GsUSD, Rs2.GsCAD, Rs2.NsUSD, Rs2.NsCAD, Rs2.CgUSD, Rs2.CgCAD, Rs2.MgnUSD, Rs2.MgnCAD) FROM Rs2 WHERE (((Rs2.Yr)=10)));")[/COLOR]

DoCmd.OpenReport "rptProdTot", acViewReport
DoCmd.OutputTo acOutputReport, "rptProdTot", acFormatPDF, dbPath & "\Exports\" & Year(Now) & Right("0" & Month(Now), 2) & Right("0" & Day(Now), 2) & "\" & strRep & ".pdf", , , , acExportQualityPrint

Rs1.MoveNext
Loop

End Sub

Any help would be appreciated.
 

Attachments

  • error.jpg
    error.jpg
    99.2 KB · Views: 108

Users who are viewing this thread

Back
Top Bottom