- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
运行 Access 2016
我正在尝试从 Excel 的 MS Access .mdb 表中导入数据。 (我的客户使用的专有软件只能识别 *.mdb 文件。)当我在表关闭时运行此代码时,出现错误:
Run-Time Error 3061
Too few parameters - Expected 2
如果我在 Access 中打开表时运行代码,一半的时间会出现该错误,一半的时间会得到:
Run-Time error '3008'
The table 'Daily_Logs_of_Flows' is already opened exclusively by
another user, or it is already open through the user interface
and cannot be manipulated programmatically.
这似乎表明 VBA 有时会越过第一个错误。
由于 this post on StackOverflow,我检查了变量名称,并在 monthToImport 前后使用了单引号和数字符号 (#) .错误来自
Expected 3
到
Expected 2
这是代码
Sub importPLCDataFromAccess(monthToImport As Date)
Dim myDbLocation As String
myDbLocation = "K:\Users\WWTP Computer\Documents\POV_Projects\PLC Interface\PLC_Data.mdb"
DIM mySQLCall as String
Set myWorkbook = ActiveWorkbook
Set myDataSheet = myWorkbook.Worksheets("Page 1")
Set myEngine = New DAO.DBEngine
'Set myWorkspace = myEngine.Workspaces(0)
Set myDB = myEngine.OpenDatabase(myDbLocation)
' I deleted the workspace
' Set myDB = myWorkspace.OpenDatabase(myDbLocation)
mySQLCall = "SELECT Time_Stamp, GolfVolume, CreekVolume, InfluentVolume FROM Daily_Logs_of_Flows "
' Limit records to month requested...
mySQLCall = mySQLCall & "WHERE (DATEPART(m,Time_Stamp) = DATEPART(m,#" & monthToImport & "#)) "
' ... during the year requested
mySQLCall = mySQLCall & "AND (DATEPART(yyyy,Time_Stamp) = DATEPART(yyyy,#" & monthToImport & "#)) "
mySQLCall = mySQLCall & "ORDER BY Time_Stamp"
Debug.Print "mySQLCall = " & mySQLCall
Debug.Print "monthToImport: " & monthToImport
'Error occurs on next line where execute query & populate the recordset
Set myRecordSet = myDB.OpenRecordset(mySQLCall, dbOpenSnapshot)
'Copy recordset to spreadsheet
Application.StatusBar = "Writing to spreadsheet..."
Debug.Print "RecordSet Count = " & myRecordSet.recordCount
If myRecordSet.recordCount = 0 Then
MsgBox "No data retrieved from database", vbInformation + vbOKOnly, "No Data"
GoTo SubExit
End If
'....
End Sub
这是当前读取的 SQL 语句的 Debug.Print:
mySQLCall = SELECT Time_Stamp, GolfVolume, CreekVolume, InfluentVolume FROM Daily_Logs_of_Flows WHERE (DATEPART(m,Time_Stamp) = DATEPART(m,#6/1/2016#)) AND (DATEPART(yyyy,Time_Stamp) = DATEPART(yyyy,#6/1/2016#)) ORDER BY Time_Stamp
对我在这里缺少的东西有什么想法吗?预先感谢您的帮助。
最佳答案
问题是 DATEPART 函数需要引号中的第一个参数,否则它会查找字段 yyyy
或 m
。
例如:
DATEPART("yyyy", #6/1/2016#)
或
DATEPART("m", #6/1/2016#)
总计:
SELECT Time_Stamp, GolfVolume, CreekVolume, InfluentVolume _
FROM Daily_Logs_of_Flows
WHERE (DATEPART("m",Time_Stamp) = DATEPART("m",#6/1/2016#))
AND (DATEPART("yyyy",Time_Stamp) = DATEPART("yyyy",#6/1/2016#))
ORDER BY Time_Stamp
要在 VBA 中执行此操作(如果您不知道,但我猜您知道),只需在每次调用 DATEPART
函数时将引号加倍...
例如:
mySQLCall = mySQLCall & "AND (DATEPART(""yyyy"",Time_Stamp)...."
补充一下,运行时错误“3008”实际上是第一个错误....Access 不会尝试运行任何 SQL,直到它确定它具有适当的权限。
关于VBA DAO.OpenRecordSet 不一致错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38340284/
我有两组代码,它们是相同的,我只是将变量更改为另一组存在的变量,现在使用我更改的那些代码,我收到一条错误消息:“运行时错误‘3061’:参数太少。预期为 6。” 这是更改后的代码: Dim rec
我将几个大表从 AccessDB 拆分到后端数据库,没有出现任何问题。 接下来,我需要打开一个记录集来替换各种麻烦的字符。当表位于本地时,以下代码段工作正常,但 Access 现在提示该表已链接,但未
运行 Access 2016 我正在尝试从 Excel 的 MS Access .mdb 表中导入数据。 (我的客户使用的专有软件只能识别 *.mdb 文件。)当我在表关闭时运行此代码时,出现错误:
databasename = "qryDataExport" Dim grpfield As String grpfield = "Group" Dim keys As DAO.Recordset g
我正在 MS Access 中用 VBA 编辑一些东西。谁能告诉我以下两个陈述之间的区别。 1. Set rs1 = CurrentDb.OpenRecordset("tblOPCEPLTB") 2.
我试图按路线生成账单,因此我按属于特定路线的客户对其进行了分割,然后对每个客户汇总他们的每周费率以编制月费率。 问题是,即使使用 SELECT * IN [table] 打开记录集也不会返回任何结果,
对于以前使用过 VBA for Access 的人来说,这是一个非常简单的问题。 Set S = CurrentDb.OpenRecordSet("select COLUMN from TABLE")
我有一个名为 qryAlloc_Source 的查询,它在一个条件下有两个参数: >=[forms]![frmReportingMain]![txtAllocStart] And <=[forms]!
如果 Excel 有 UDF,我如何从 Access 中获取查询结果? 我收到以下错误:“ 运行时错误‘3085’:表达式中未定义的函数‘XXXX’”。从 Excel VBA 打开( Access 查
Private Sub update () Dim db As Database Set db = CurrentDb Dim rs As Recordset Set r
我正在运行 MS Access 2007,连接到 MS SQL 2008 R2 服务器。我有一个带有多选框的表单,用于更新所选服务器的多个字段的状态。目前我在多选框中使用 ServerName 字段。
我是一名优秀的程序员,十分优秀!