2009-02-03 15 views
5

Das ist grundlegende Dinge, aber ich bin etwas vertraut mit VBA und den Word/Access-Objektmodellen.Wie man den Wert in einem Feld basierend auf Lookup-Wert in einem anderen Feld zurückgibt

Ich habe eine zweispaltige Datenbank von etwa 117000 Datensätze. Die Spalten sind 'Nachname' und 'Anzahl'. Ich möchte, dass ein Benutzer SMITH in ein Textfeld eingeben und auf "Senden" klicken kann. Ich mag dann so etwas wie

SELECT table.count FROM table WHERE surname = string

und gibt den Wert von table.count in einem String laufen.

Es fühlt sich an wie dies sollte fünf oder sechs Zeilen Code sein (die ich habe, aber nicht veröffentlichen), aber ich vermisse offensichtlich etwas!

Prost

Antwort

6

aller Zuerst seien Sie vorsichtig die Spalte ‚count‘ Namensgebung - das ist ein Schlüsselwort in SQL und kann zu Problemen führen. Genauso nicht die Tabelle "Tabelle" aufrufen.

Hier ist ein Beispielcode, die es zu tun eine Art und Weise zeigt:

' 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

Tabelle und Spalten haben eigentlich echte Namen, und es gibt mehr Spalten, aber ich wollte das für mich selbst arbeiten, damit ich etwas lerne. Vielen Dank! – user51498

4

Es ist möglich, InsertDatabase zu verwenden:

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 

Dies ist eine bearbeitete Makro der Symbolleiste Datenbank aufgezeichnet werden.

BEARBEITET Warnung: Dieser Code unterliegt, wie gezeigt, einem SQL Injection-Angriff.

Verwandte Themen