Ms access Access VBA记录集-根据使用其他字段作为输入的函数的结果更新字段

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

我有一个包含4个字段的简单表格: a、 b,x,P

我试图根据使用其他字段作为输入参数的函数的输出来更新字段p。在这种情况下,该函数是excel函数。 我正在使用SQL server,但确实需要访问一些统计函数。所以昨天我第一次打开了通道。Eeek。我花了最后一天的时间学习vba,并学习了有关记录集的各种教程

我正在努力解决的问题是如何基于其他字段更新p字段中的a?循环

非常感谢

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,但我看不出有什么优势

注意,我直接打开了表,而不是通过查询。DAO
dbOpenTable
选项也可以提高性能

有了这些细节,只需在记录集中循环,使用当前行中的值调用函数,并将函数结果存储在
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,因此感谢您的提示。