Ms access Access VBA记录集-根据使用其他字段作为输入的函数的结果更新字段
我有一个包含4个字段的简单表格: a、 b,x,P 我试图根据使用其他字段作为输入参数的函数的输出来更新字段p。在这种情况下,该函数是excel函数。 我正在使用SQL server,但确实需要访问一些统计函数。所以昨天我第一次打开了通道。Eeek。我花了最后一天的时间学习vba,并学习了有关记录集的各种教程 我正在努力解决的问题是如何基于其他字段更新p字段中的a?循环 非常感谢Ms access Access VBA记录集-根据使用其他字段作为输入的函数的结果更新字段,ms-access,vba,recordset,Ms Access,Vba,Recordset,我有一个包含4个字段的简单表格: a、 b,x,P 我试图根据使用其他字段作为输入参数的函数的输出来更新字段p。在这种情况下,该函数是excel函数。 我正在使用SQL server,但确实需要访问一些统计函数。所以昨天我第一次打开了通道。Eeek。我花了最后一天的时间学习vba,并学习了有关记录集的各种教程 我正在努力解决的问题是如何基于其他字段更新p字段中的a?循环 非常感谢 Dim objExcel As Excel.Application Set objExcel = CreateObj
Dim objExcel As Excel.Application
Set objExcel = CreateObject("Excel.Application")
'Test it works
MsgBox objExcel.Application.BetaDist(0.4, 2, 5)
'OK, that works :)
'set up the ADO stuff
Dim cnn1 As ADODB.Connection
Dim MyRecordSet As New ADODB.Recordset
Set cnn1 = CurrentProject.Connection
MyRecordSet.ActiveConnection = cnn1
'Load data into MyRecordSet
MySQLcmd = "SELECT * FROM simple_table"
MyRecordSet.Open MySQLcmd
'HELP WITH THE NEXT BIT PLEASE!
'Some kind of loop to go through the recordset to set the field P
' equal to the result of the excel function betadist(x,a,b)
'I imagine looping through something like the following semi pseudo code ???
myRecordSet.Fields(“P”).Value = objExcel.Application.BetaDist(myRecordSet.Fields(“x”).Value, myRecordSet.Fields(“a”).Value, myRecordSet.Fields(“b”).Value)
'end of the loop
objExcel.Quit
Set objExcel = Nothing
MyRecordSet.Close
cnn1.Close
Set MyRecordSet = Nothing
Set cnn1 = Nothing
由于您的代码使用的是
“Dim objExcel As Excel.Application”
,这意味着您有一个Excel对象库的引用集。在这种情况下,使用BetaDist
函数不需要完整的Excel应用程序实例。您可以将对象变量设置为Excel.WorksheetFunction
,并将该函数作为该对象的方法调用。然而,我不知道这是否会产生重大影响。我没有测试CreateObject(“Excel.Application”)
备选方案
在这个示例中,我使用了DAO记录集而不是ADO。原因是我发现DAO使用本机访问(Jet/ACE)数据源可以大大加快速度。如果愿意,您可以切换到ADO,但我看不出有什么优势
注意,我直接打开了表,而不是通过查询。DAOdbOpenTable
选项也可以提高性能
有了这些细节,只需在记录集中循环,使用当前行中的值调用函数,并将函数结果存储在p
字段中。。。与您在伪代码中概述的大致相同。:-)
Dim objWFunction As Object'Excel.WorksheetFunction
将MyRecordSet设置为DAO.Recordset
Dim db作为DAO.database
设置objWFunction=Excel.WorksheetFunction“需要Excel引用”
Set db=CurrentDb
Set MyRecordSet=db.OpenRecordset(“简单表”,dbOpenTable)
使用MyRecordSet
做而不做
'Debug.Print objWFunction.BetaDist(!x,!a,!b)
编辑
!p=objWFunction.BetaDist(!x,!a,!b)
.更新
.下一步
环
.结束
以
Set MyRecordSet=Nothing
Set db=Nothing
Set objWFunction=Nothing
注意VBA代码中的引号。示例中的一行使用类型设置引号<代码>“P”。这将是一个问题。您需要使用标准(ASCII 43)引号来避免麻烦<代码>“P”这太完美了,谢谢。由于速度很重要(simple_表中有超过一百万条记录),我转而使用DAO,因此感谢您的提示。