使用IF THEN将文本框值与表名进行比较

时间:2014-05-02 00:27:28

标签: vba access-vba ms-access-2010

我是VB和Access的新手,所以不要在这个上打我太多:-P 我试图从未绑定的文本框中取一个值,并在数据库(Access 2010)中搜索与该值匹配的表名。棘手的部分是该值在文本框中输入为ABC-123。我正在使用mid(Me.Text ...将值拆分为两部分.ABC是一个前缀,也是一个名为ABC-Tools的表名。这个前缀改变了(MTE,MOLD,MFG等)取决于所需的条目。但我似乎一直在坚持如何在整个函数中使用表名。一旦我得到它,那么我想更进一步,进入表并比较下一部分文本框条目,123部分是资产编号(表中自动生成的主键)。我尝试过使用DLookup但我遇到了同样的问题.FYI,这是一个公司自行开发的校准管理数据库,此代码位于表单上的“记录数据”按钮内。所有文本框都是未绑定的,并且还将其内容导出到预先格式化的Excel电子表格中以便记录。

到目前为止,这是我的代码。也许我对如何正确地做到这一点感到满意。如果您需要更多信息,请与我们联系。

Cat = Mid(Me.Text4.Value, 1, InStr(Me.Text4.Value, "-") - 1) 'Takes data on the left of the "-" within unbound text4 box for tool asset prefix (eg. MOLD-xxx)

AssetNum = Mid(Me.Text4.Value, InStr(Me.Text4.Value, "-") + 1) 'Takes data on the right of the "-" within unbound text4 box for tool asset number (eg. xxxx-001)

'Check database for tool

If "& Cat &-Tools" <> "{look_for_table_matching & Cat &-Tools}" Then

msg = _
  MsgBox("Tool " & Cat & "-" & AssetNum & " does not exist. Please check that the tool is in the         database and retry.", _
    vbExclamation, "")

Else {continue on with the rest of the script}

End If

1 个答案:

答案 0 :(得分:2)

搜索数据库中的表格列表:

Dim tdf as TableDef
Dim MatchingTable as String

For each tdf in CurrentDB.TableDefs
   If tdf.Name Like Cat & "*" Then
      MatchingTable = tdf.Name
      Exit For
   End If
Next

If MatchingTable = "" Then 'table not found
   Msgbox...
End If

然后搜索表格:

'Dlookup returns a null value if nothing found
str = Nz(Dlookup("<Name of field>",MatchingTable,"AssetNumber = " & AssetNum),"")

If str = "" Then 'asset num not found
   Msgbox...
End If