2009-02-03 92 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注入攻擊。

相關問題