Просто интересно, может ли кто-нибудь помочь мне с этой проблемой.Я делаю макрос в Excel, который открывает запрос в режиме конструктора, чтобы я мог его редактировать.Затем запустите запрос и извлеките результаты.К сожалению, я получаю сообщение об ошибке, которое говорит, что этот набор записей не редактируется.Код ниже.
'connect to Access Database
Application.StatusBar = "Connecting to Access database..."
Const DbLoc As String = "I:\Ben\New Stores\Reports\Scratch Reporting DB.accdb"
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim recCount As Long
Set db = OpenDatabase(DbLoc)
Set objAccess = CreateObject("Access.Application")
With objAccess
.opencurrentdatabase (DbLoc)
.docmd.openquery "OOS by DC5"
.docmd.openquery "Today2"
.docmd.openquery "Today2_intrans"
.docmd.openquery "Today7"
.docmd.openquery "Today7_InTrans"
.docmd.openquery "OOS by Dept_Final", acViewDesign
End With
Set rs1 = db.OpenRecordset("OOS by DC5", dbOpenSnapshot)
Set rs2 = db.OpenRecordset("Today7_InTrans", dbOpenSnapshot)
Set rs3 = db.OpenRecordset("Today7", dbOpenSnapshot)
Set rs4 = db.OpenRecordset("OOS by Dept_Final", dbOpenSnapshot)
'copy recordset to spreadsheet
Application.StatusBar = "Writing Access data to spreadsheet..."
If rs1.RecordCount = 0 Then
MsgBox "No data retrieved from database", vbInformation + vbOKOnly, "No Data"
GoTo Subexit
Else
rs1.MoveLast
recCount = rs1.RecordCount
rs1.MoveFirst
End If
ws11.Range("A1").CopyFromRecordset rs1
ws11.Range("B" & recCount + 1).Formula = "=SUM(B1:B" & recCount & ")"
ws11.Range("C" & recCount + 1).Formula = "=SUM(C1:C" & recCount & ")"
ws18.Range("A1").CopyFromRecordset rs2
ws19.Range("A1").CopyFromRecordset rs3
ws8.Range("A1").CopyFromRecordset rs4
Примечание;это фрагмент всего макроса, поэтому мои переменные здесь не объявлены.Спасибо за вашу помощь заранее!
SQL ДО
SELECT [OOS by Dept2].MaxOfDept, [dept name].[Department Name], [OOS by Dept2].[17935] AS Expr1, [OOS by Dept2].[18363] AS Expr2, [OOS by Dept2].[18455], [OOS by Dept2].[18584] AS Expr3, [OOS by Dept2].[18593] AS Expr4, [OOS by Dept2].[18638] AS Expr5, [OOS by Dept2].[18649], [OOS by Dept2].[18695] AS Expr6, [OOS by Dept2].[18696], [OOS by Dept2].[18712], [OOS by Dept2].[18810] AS Expr7, [OOS by Dept2].[18919], [OOS by Dept2].[18990] AS Expr8, [OOS by Dept2].[19720]
FROM [OOS by Dept2] LEFT JOIN [dept name] ON [OOS by Dept2].MaxOfDept = [dept name].Dept
GROUP BY [OOS by Dept2].MaxOfDept, [dept name].[Department Name], [OOS by Dept2].[17935], [OOS by Dept2].[18363], [OOS by Dept2].[18455], [OOS by Dept2].[18584], [OOS by Dept2].[18593], [OOS by Dept2].[18638], [OOS by Dept2].[18649], [OOS by Dept2].[18695], [OOS by Dept2].[18696], [OOS by Dept2].[18712], [OOS by Dept2].[18810], [OOS by Dept2].[18919], [OOS by Dept2].[18990], [OOS by Dept2].[19720];
SQL ПОСЛЕ
SELECT [OOS by Dept2].MaxOfDept, [dept name].[Department Name], [OOS by Dept2].[17052], [OOS by Dept2].[18220], [OOS by Dept2].[18272], [OOS by Dept2].[18455], [OOS by Dept2].[18614], [OOS by Dept2].[18633], [OOS by Dept2].[18645], [OOS by Dept2].[18649], [OOS by Dept2].[18696], [OOS by Dept2].[18712], [OOS by Dept2].[18919], [OOS by Dept2].[19720]
FROM [OOS by Dept2] LEFT JOIN [dept name] ON [OOS by Dept2].MaxOfDept = [dept name].Dept
GROUP BY [OOS by Dept2].MaxOfDept, [dept name].[Department Name], [OOS by Dept2].[17052], [OOS by Dept2].[18220], [OOS by Dept2].[18272], [OOS by Dept2].[18455], [OOS by Dept2].[18614], [OOS by Dept2].[18633], [OOS by Dept2].[18645], [OOS by Dept2].[18649], [OOS by Dept2].[18696], [OOS by Dept2].[18712], [OOS by Dept2].[18919], [OOS by Dept2].[19720];
Константа SQL
SELECT [OOS by Dept2].MaxOfDept, [dept name].[Department Name]
FROM [OOS by Dept2] LEFT JOIN [dept name] ON [OOS by Dept2].MaxOfDept = [dept name].Dept
GROUP BY [OOS by Dept2].MaxOfDept, [dept name].[Department Name];