访问通过查询

时间:2016-03-10 17:10:20

标签: sql-server ms-access stored-procedures

我在SQL中有一个非常简单的存储过程(这是我的第一个!),我可以在研究如何完成此操作后运行它。实质上,它会删除表中的所有当前记录并附加一组新记录。 (我已经读过在同一个存储过程中有两个查询可能会导致我遇到的问题。)

第一次运行它时效果非常好。我对打开的表进行了更改,看它是否第二次运行。它不是。我甚至可以关闭数据库,重新打开并重新运行代码,它仍然无法满足我的期望。

我想到的是,如果我尝试在Access窗口中打开“CurrentProc”查询,我会收到一条错误消息,指出“将ReturnRecords属性设置为True的传递查询未返回任何记录”。这很好,因为在我点击“OK”之后,代码将再次运行并给我预期的回报。

我的问题是我可以用下面的代码做什么,以便我可以在表中进行任何我想要的更改,但是每当我调用函数时都要重置它,而不必打开CurrentProc查询并获取错误消息。 (是的,我尝试使用OpenQuery打开查询,但这也不起作用。)

请理解,虽然我是(yikes!)近20年的Access开发人员,但这是我第一次尝试使用SQL存储过程。在Access中运行相同的查询大约需要45分钟。使用存储过程,它需要几秒钟!我将修改它以用于更大的记录集,并将一些Access代码重写为SQL存储过程以利用此功能,因此您将提供的任何想法将不胜感激。

Dim qdf As dao.QueryDef
Dim dbs As dao.Database
Dim rst As dao.Recordset
Dim sSQL As String


strConnect = "ODBC;DRIVER={SQL Server}" _
            & ";SERVER=ourserver\equipment" _
            & ";DATABASE=BDS"

Set dbs = CurrentDb
Set qdf = dbs.QueryDefs("CurrentProc")
qdf.Connect = strConnect
qdf.SQL = "exec AppendtoFRPbyModel1"
DoCmd.OpenTable "FRP by Model1"

Set rst = Nothing
Set qdf = Nothing
Set dbs = Nothing

Josetta

1 个答案:

答案 0 :(得分:1)

这是有效的: 我将ReturnsRecords更改为“no”并且没有做任何事情,但是,当我添加“DoCmd.OpenQuery”CurrentProc时“我没有收到错误(就像我之前尝试在代码之外运行它时所做的那样)而我确实每次都得到预期的结果。谢谢!!