通过VBA代码调用数据库中的SQL过程

发布于 2024-12-08 18:25:31 字数 202 浏览 0 评论 0原文

我有一个SQL 查询,它占用数据库中存储的一个参数。我想从在同一数据库上运行的 VBA 代码调用相同的代码。我在工作中使用 MS Access。

例如,考虑一下,我有一个 SQL 查询“Q”,它采用参数“p”,我打算从我的 VBA 代码“C”调用此 SQL 查询,这自然也涉及将此参数“p”传递给查询。

非常感谢帮助 索汉姆

I have an SQL query which takes up a parameter stored in the db. I want to invoke the same from VBA code which is running on the same db. I am using MS Access for my work.

So for example consider, I have an SQL query 'Q' which takes a parameter 'p', I intend to invoke this SQL query from my VBA code 'C' , which also naturally involves passing this parameter 'p' to the query.

Help much appreciated
Soham

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

丢了幸福的猪 2024-12-15 18:25:31

这里有几种可能性。

假设它是一个建立在保存要使用的参数的表单上的 SELECT 查询,并且输入是安全的:

s = "SELECT * FROM MyTable WHERE AText ='" & Me.MyText & "'"

可以像这样使用:

Forms!SomeForm.RecordSource = s

或者

Set qdf = CurrentDb.CreateQueryDef("NewQuery", s)

但是,可以通过其他更好的方式完成上述操作。

假设这是一个从保存要使用的参数的表单运行的 ACTION 查询,并且输入是安全的:

s = "UPDATE MyTable Set AText ='" & Me.MyText & "'"

那么

Set db = CurrentDB
db.Execute s, dbFailOnError

或者您可以使用临时查询,这会更安全:

'Temporary query
s = "UPDATE MyTable Set AText = MyRext"

Set qdf = db.CreateQueryDef("", s)

qdf.Parameters!MyText = Me.MyText
qdf.ReturnsRecords = False
qdf.Execute dbFailOnError

与上面类似的东西也适合现有的查询。

您还可以将参数传递给过程,在这种情况下,Me.MyText 成为变量,或者您可以使用 Inputbox,但这很少是一个好主意。

之后,就是整个ADO的世界了。

There are a few possibilities here.

Let us say it is a SELECT query built on a form that holds the parameters to be used and that the input is safe:

s = "SELECT * FROM MyTable WHERE AText ='" & Me.MyText & "'"

This can be used like so:

Forms!SomeForm.RecordSource = s

Or

Set qdf = CurrentDb.CreateQueryDef("NewQuery", s)

However, the above can be done in other, better ways.

Let us say it is a ACTION query run from a form that holds the parameters to be used and that the input is safe:

s = "UPDATE MyTable Set AText ='" & Me.MyText & "'"

Then

Set db = CurrentDB
db.Execute s, dbFailOnError

Or you can use a temporary query, which can be safer:

'Temporary query
s = "UPDATE MyTable Set AText = MyRext"

Set qdf = db.CreateQueryDef("", s)

qdf.Parameters!MyText = Me.MyText
qdf.ReturnsRecords = False
qdf.Execute dbFailOnError

Something similar to the above would also be suitable for an existing query.

You can also pass the parameter to a procedure, in which case Me.MyText becomes a variable, or you can use Inputbox, which is rarely a good idea.

After that, there is the whole world of ADO.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文