首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >编辑SQL查询

编辑SQL查询
EN

Stack Overflow用户
提问于 2010-02-12 19:12:47
回答 2查看 31.9K关注 0票数 2

我有一个Access数据库,里面只有一个查询。我目前可以使用DoCmd.CopyObject通过VBA复制查询。但是,我需要能够单独编辑每个查询实例中的SQL。然而,我看到的所有示例都涉及记录集,这是我没有使用的东西。

有什么想法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-02-12 19:48:07

关于您想要编辑哪种类型的查询,这个问题有点简单,但假设它是一个不需要任何动态参数的select查询。

然后,使用CopyObject方法复制查询。使用Catalog对象(您将需要引用ADO Ext)。然后,您只需更改副本的SQL,如下所示。根据您的查询,它可以是View或Procedure,但Select查询应作为View列出。

代码语言:javascript
复制
Dim catDB As ADOX.Catalog
Dim cmd As ADODB.Command
Dim sQueryName As String
Dim sSQL As String

Set cn = CurrentProject.Connection
Set catDB = New ADOX.Catalog

catDB.ActiveConnection = cn
DoCmd.CopyObject , "Query1_c", acQuery, "Query1"
sQueryName = "Query1_c"
sSQL = "SELECT a,b,c FROM Table1"

Set cmd = New ADODB.Command
Set cmd = catDB.Views(sQueryName).Command
cmd.CommandText = sSQL
Set catDB.Views(sQueryName).Command = cmd

Set catDB = Nothing
cn.Close
票数 1
EN

Stack Overflow用户

发布于 2010-02-13 02:35:17

我不同意这里给出的所有答案,即使它们确实解决了所提出的问题。我不同意,因为我认为这个问题是基于不正确的假设--根本不需要重写SQL。

这个问题似乎假设必须保存Access中的查询。您可以在任何时候执行任意SQL字符串,或者在代码中执行,或者(对于非DML SQL)作为窗体或报表的记录源执行。可以动态构建SQL字符串,并在运行时根据需要进行分配--保存的QueryDef的惟一优势是需要在多个位置使用它。

保存的QueryDef基本上与服务器数据库中的视图相同。

如果QueryDef有参数,则相当于一个简单的存储过程(即,缺少代码的存储过程,如IF/THEN或CASE SELECT分支)。

如果要将SQL实现为服务器数据库上的视图,请将其另存为Access中的QueryDef。如果要在服务器数据库中作为SPROC执行,请将其实现为已保存的参数查询。

但首先,确定它是否需要保存。

无论如何,我从1996年起就开始在Access中进行专业编程,我通常不会保存很多查询,尤其是不会在查询中保存条件。条件特定于运行时上下文,应该在运行时提供,而不是保存在QueryDef中。我将保存的QueryDefs用于需要重用的复杂SQL,或者用于定义在应用程序的多个位置使用的“视图”(尤其是那些具有复杂连接的视图)。

最初的问题没有确定在什么情况下需要更改标准,因此真的不可能提出最佳方法。在这种情况下,我会指责这个问题排除了适当的讨论,因为它提出了一个具体的解决方案,并询问如何实现它,而不是描述问题并询问可行的解决方案的范围。为了完成后者,我们需要了解上下文(是SQL DML还是SELECT?它是在代码中使用,还是用作窗体或报表的记录源?等等),但这在这里是完全缺乏的,所以不会提供全面的解决方案。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2251345

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档