【问题标题】:How to return the value in one field based on lookup value in another field如何根据另一字段中的查找值返回一个字段中的值
【发布时间】:2010-10-05 02:03:02
【问题描述】:

这是基本的东西,但我对 VBA 和 Word/Access 对象模型有些陌生。

我有一个包含大约 117000 条记录的两列数据库。列是“姓”和“计数”。我希望用户能够在文本框中输入 SMITH 并点击提交。然后我想运行类似的东西

SELECT table.count FROM table WHERE surname = string

并以字符串形式返回 table.count 的值。

感觉这应该是五六行代码(我有但不会发布)但我显然遗漏了一些东西!

干杯

【问题讨论】:

    标签: sql database vba ms-word ms-office


    【解决方案1】:

    首先,小心命名列“count”——这是 SQL 中的关键字,可能会导致问题。同样,不要将表称为“表”。

    下面是一些示例代码,展示了一种方法:

    ' This example uses Microsoft ActiveX Data Objects 2.8,
    ' which you have to check in Tools | References
    
    ' Create the connection. This connection may be reused for other queries.
    ' Use connectionstrings.com to get the syntax to connect to your database:
    Dim conn As New ADODB.Connection
    conn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:\tmp\Database1.accdb"
    
    Dim cmd As New ADODB.Command
    Set cmd.ActiveConnection = conn
    
    ' Replace anything which might change in the following SQL string with ?
    
    cmd.CommandText = "select ct from tbl where surname = ?"
    
    ' Create one parameter for every ?
    
    Dim param As ADODB.Parameter
    Set param = cmd.CreateParameter("surname", adBSTR, adParamInput, , TextBox1.Text)
    cmd.Parameters.Append param
    
    Dim rs As ADODB.Recordset
    Set rs = cmd.Execute
    
    MsgBox rs("ct")
    
    rs.Close
    conn.Close
    

    【讨论】:

    • 表和列实际上有实名,列也更多,但我想自己解决这个问题,所以我实际上学到了一些东西。谢谢!
    【解决方案2】:

    可以使用InsertDatabase:

    Sub GetData()
        ActiveDocument.Bookmarks("InsertHere").Select
    
        Selection.Range.InsertDatabase Format:=0, Style:=0, LinkToSource:=False, _
            Connection:="TABLE Members", SQLStatement:= _
            "SELECT [Count] FROM [Members]" _
            & " WHERE Surname='" _
            & ActiveDocument.FormFields("Text1").Result & "'", _
            DataSource:="C:\docs\ltd.mdb", From:=-1, To:= _
            -1, IncludeFields:=True
    End Sub
    

    这是使用数据库工具栏记录的编辑宏。

    已编辑警告:如图所示,此代码受到 SQL 注入攻击。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-31
      • 2011-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多