Как вернуть значение в одном поле на основе значения поиска в другом поле - PullRequest
5 голосов
/ 03 февраля 2009

Это базовые вещи, но я немного незнаком с VBA и объектными моделями Word / Access.

У меня есть база данных из двух столбцов, насчитывающая около 117000 записей. Столбцы «Фамилия» и «Количество». Я хочу, чтобы пользователь мог ввести SMITH в текстовое поле и нажать «Отправить». Затем я хочу запустить что-то вроде

SELECT table.count FROM table WHERE surname = string

и вернуть значение table.count в строку.

Такое ощущение, что это должно быть пять или шесть строк кода (который у меня есть, но я не буду публиковать), но я явно что-то упускаю!

Приветствия

Ответы [ 2 ]

6 голосов
/ 03 февраля 2009

Прежде всего, будьте осторожны с именованием столбца '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
4 голосов
/ 03 февраля 2009

Можно использовать 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-инъекции.

...