2009-02-03 7 views
5

Ceci est un élément de base, mais je ne suis pas familier avec VBA et les modèles d'objet Word/Access.Comment renvoyer la valeur dans un champ en fonction de la valeur de recherche dans un autre champ

J'ai une base de données de deux colonnes d'environ 117000 enregistrements. Les colonnes sont 'nom de famille' et 'compte'. Je veux qu'un utilisateur puisse taper SMITH dans une zone de texte et appuyer sur soumettre. Je veux ensuite lancer quelque chose comme

SELECT table.count FROM table WHERE surname = string

et retourner la valeur de table.count dans une chaîne.

On dirait que cela devrait être cinq ou six lignes de code (que j'ai mais ne posterai pas) mais il me manque évidemment quelque chose!

Vive

Répondre

6

Tout d'abord, veillez à nommer la colonne « count » - c'est un mot-clé dans SQL et peut causer des problèmes. De même, n'appelez pas la table 'table'.

Voici quelques exemples de code qui montre une façon de le faire:

' 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

Le tableau et les colonnes ont en réalité de vrais noms, et il y a plus de colonnes, mais je voulais travailler sur ce point pour moi-même afin d'apprendre quelque chose. Merci! – user51498

4

Il est possible d'utiliser 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 

Ceci est une macro éditée enregistrée en utilisant la barre d'outils de base de données.

EDITED Avertissement: ce code, comme illustré, est soumis à une attaque par injection SQL.

Questions connexes