2009-02-03 138 views
5

这是基本的东西,但我对VBA和Word/Access对象模型有点不熟悉。如何根据另一个字段中的查找值返回一个字段中的值

我有一个大约117000记录的双列数据库。列是“姓”和“计数”。我希望用户能够在文本框中键入SMITH并点击提交。然后我要像

SELECT table.count FROM table WHERE surname = string

运行的东西,并在返回字符串table.count的价值。

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

干杯

回答

6

首先,要小心命名列“计数” - 这是SQL关键字,并可能导致的问题。同样,不要调用表'table'。

下面是一些示例代码显示了这样做的一种方式:

' 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 
+0

表和列实际上有真实姓名,并有更多列,但我想为自己工作一点,所以我实际上学到了一些东西。谢谢! – user51498 2009-02-03 19:54:01

4

它可以使用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 

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

EDITED警告:如下所示,此代码受SQL注入攻击。

相关问题