【问题标题】:connect to SSMS ide window from VBA从 VBA 连接到 SSMS ide 窗口
【发布时间】:2015-07-14 07:24:12
【问题描述】:

我正在尝试在 SQL Server Management Studio 中打开一个 SQL 窗口来显示使用的 SQL 语句(这是为了让人们可以直接修改语句)

我不想运行该语句,我已经可以这样做了。

我可以很容易地启动一个新进程:(当前代码)

Public Sub ShowSQL(strSQL As String)

Dim TempSQL As String
Dim FileNum As Long

strSQL = Replace(strSQL, ",", "," & vbCrLf)

TempSQL = Get_Temp_File_Name
FileNum = FreeFile()
Open TempSQL For Output As #FileNum
Print #FileNum, strSQL
Close #FileNum

Shell "ssms " & TempSQL

End Sub

但我不知道如何判断 SSMS 是否已打开。
对于 Excel,我知道我可以使用 GetObject(, "Excel.Application") - SSMS 的等价物是什么?

(来自previous questionShell "explorer " & TempSQL1在当前实例中打开文件,但如果没有SSMS实例打开则失败)

【问题讨论】:

  • 你到底为什么要尝试使用 VBA 打开 SSMS?这只是在尖叫很多坏事......
  • 我有一个访问 SQL 数据库的前端。一些用户表示有兴趣获取所使用的 SQL。我想在正确的程序中打开文件作为对用户的好处,而不是将其发送到 word/notepad/whatever。
  • 但为了实现这一点,您必须在用户计算机上安装 SSMS。为什么用户首先需要 sql?如果他们没有查看 sql 的权限,通常有一个很好的理由,那是因为用户没有业务查看,或者更糟糕的是修改来自应用程序的任何 sql。
  • 大多数都有,因为它是公司安装的标准部分。他们有权编写自己的 SQL 语句,并以他们认为的任何方式加入。有些不打扰,只使用前端。有些人喜欢前端结果,但希望查看底层查询以便编辑它,或者了解数据的来源以编写自己的查询。
  • 如果这只是供用户查看和修改,你不能在你的 VBA 中创建一个文本框,将查询放在那里,用户完成修改并在必要时运行查询试图控制 SSMS?

标签: sql-server vba ms-access sql-server-2012 ms-access-2010


【解决方案1】:

您可以使用以下函数来确定管理工作室 (ssms.exe) 当前是否在您的计算机上运行:

Function IsProcessRunning(ProcessName As String) As Boolean
    Dim Process, strObject
    strObject = "winmgmts://" & Environ("ComputerName")
    For Each Process In GetObject(strObject).InstancesOf("win32_process")
        If UCase(Process.Name) = UCase(ProcessName) Then
             IsProcessRunning = True
             Exit Function
        End If
    Next
    IsProcessRunning = False
End Function 

在你的代码中写:

if Not IsProcessRunning("ssms.exe") Then Shell "ssms " & TempSQL

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多