2009-02-03 30 views
5

Esto es básico, pero no estoy familiarizado con VBA y los modelos de objetos Word/Access.Cómo devolver el valor en un campo según el valor de búsqueda en otro campo

Tengo una base de datos de dos columnas de aproximadamente 117000 registros. Las columnas son 'apellido' y 'cuenta'. Quiero que un usuario pueda escribir SMITH en un cuadro de texto y presionar enviar. entonces yo quiero correr algo así como

SELECT table.count FROM table WHERE surname = string

y devolver el valor de table.count en una cadena.

Parece que esto debería ser de cinco o seis líneas de código (que tengo pero no publicaré) pero obviamente me falta algo.

Saludos

Respuesta

6

En primer lugar, tenga cuidado de nombrar a la columna de 'contar' - esto es una palabra clave en SQL y podría causar problemas. Del mismo modo, no llame a la tabla 'tabla'.

Aquí hay un código de ejemplo que muestra una forma de hacerlo:

' 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

La tabla y las columnas en realidad tienen nombres reales, y hay más columnas, pero quería trabajar ese bit para mí, así que realmente aprendí algo. ¡Gracias! – user51498

4

Es posible utilizar 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 

Ésta es una macro editada grabada utilizando la barra de herramientas de base de datos.

EDITADO Advertencia: este código, como se muestra, está sujeto a un ataque de inyección SQL.

Cuestiones relacionadas