【问题标题】:Connection to SQL连接到 SQL
【发布时间】:2010-07-14 13:11:19
【问题描述】:

我想添加一个到工作表的连接,以便每次刷新单元格时,都会从 SQL 传入一个值。我希望它在 ID =

的其他工作表之一上引用一个文本框

如何设置连接以使用该值刷新。我在我的连接字符串中放了什么?我可以让它静态工作。

【问题讨论】:

  • VBA。如果他以前没有设置标签,他现在已经设置了。

标签: vba excel connection connection-string


【解决方案1】:

Excel 有一个方便的小功能,称为“导入外部数据”。这就是我要做的:

  1. 在您的 Excel 文件中,转到 数据->导入外部数据->新建数据库查询(在您的情况下,导入数据选项不会是最好的方法)

  2. 完成向导。选择您的数据源等。除了最后一个选项,选择在 Microsoft Query 中查看数据或编辑查询

  3. MS Query 基本上是一个小小的查询设计器。选择显示/隐藏标准图标(看起来像眼镜+漏斗)。

  4. 这个用于输入标准的界面很像 Access。选择一个字段,而不是硬编码值,使用 [Criteria](或其他东西)。

  5. 关闭 MS Query 并返回 Excel 文件。

  6. 在您的新数据范围内,右键单击Parameters。->从以下单元格获取值

  7. 不要忘记单元格值更改时自动刷新

总而言之,您正在使用参数导入外部数据,并将该参数的值声明为文件中的一个单元格。嗯,这是我自己工作的一个不错的小休息。我希望这会有所帮助。

【讨论】:

    【解决方案2】:

    是什么导致单元格被刷新?连接字符串将取决于您使用的数据库。下面的示例使用 Access,需要引用 Microsoft ActiveX Dataobjects 2.8

    数据被放入 sheet1 的单元格 (1,1) 中。 where 子句取自 sheet2 上的 textbox1:

    Private Sub CommandButton1_Click() 
    
    Dim sqlQuery As String
    
    sqlQuery = "SELECT * FROM myTable WHERE " & Worksheets("sheet2").TextBox1.Text
    fetchData "C:\file_databases\myDatabase.accdb", Worksheets("sheet1").Cells(1, 1), sqlQuery
    
    End Sub
    
    Private Function fetchData(databaseName As String, targetRange As Range, sqlQuery As String)
    
    Dim connection As New ADODB.connection
    Dim records As New ADODB.Recordset
    Dim connectionString As String
    connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & databaseName & ";"
    
    connection.Open connectionString
    records.Open sqlQuery, connection
    targetRange.CopyFromRecordset records
    
    records.Close
    connection.Close
    
    End Function
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多