(请注意这是针对学校作业的,所以尽管有更有效的方法可以解决我面临的问题,但需要以特定的方式完成。)
我在Access上创建了一个名为“新生儿疾病风险计算器”的表单。这种形式的目的主要是根据DNA的构成,找出新生儿可能面临的疾病风险。以下是我的表单所需的功能:
表单有一个按钮和两个文本框。用户将NewBornID输入到第一个文本框中,然后单击该按钮。然后,第二个文本框根据SQL查询显示新生儿可能面临风险的疾病。这是我的小组伙伴写的查询(我知道它很草率,可以改写):
SELECT Mutation.DiseaseAssociation, Newborn.NewBornID
FROM Newborn INNER JOIN ((Mutation INNER JOIN (DNA INNER JOIN DNAMutation ON DNA.DNA_ID = DNAMutation.DNA_ID) ON Mutation.MutationID = DNAMutation.MutationID) INNER JOIN NewbornDNA ON DNA.DNA_ID = NewbornDNA.DNA_ID) ON Newborn.NewBornID = NewbornDNA.NewBornID
WHERE (((Newborn.NewBornID)=[InputNewBornID]));
因此,由于我的编码经验很少,以下是我的问题:
1)甚至可以让结果TextBox以文本格式显示查询信息吗?
2)如果是这样,最好的方法是什么?我将在下面发布我的完整代码,但我似乎无法让文本框显示任何结果。我知道这是一个相当基本的问题,但我很清楚这一点,所以任何建议都会非常有用。
以下是按钮点击的代码:
Private Sub Comand0_Click()
Dim db As Database, rs As Recordset, strSQL As String
Set db = CurrentDb
strSQL = "SELECT Mutation.DiseaseAssociation, Newborn.NewBornID FROM Newborn INNER JOIN ((Mutation INNER JOIN (DNA INNER JOIN DNAMutation ON DNA.DNA_ID = DNAMutation.DNA_ID) ON Mutation.MutationID = DNAMutation.MutationID) INNER JOIN NewbornDNA ON DNA.DNA_ID = NewbornDNA.DNA_ID) ON Newborn.NewBornID = NewbornDNA.NewBornID WHERE Newborn.NewBornID=Forms!Calculator!txtSearch;"
Set rs = db.OpenRecordset(strSQL)
Me!lstDiag.RowSource = strSQL
End Sub
答案 0 :(得分:1)
您的配合创建了一个查询,您的VBA代码尝试从该查询中检索结果。但是,查询WHERE
子句包含此条件...
AND NewBorn.ID=sym
不幸的是,sym
是一个VBA变量,而db引擎对此一无所知。似乎它会将sym
解释为参数并抱怨您没有为该参数提供值。
我认为您现在应该忽略VBA代码并专注于修改查询。只有在您有工作查询后才能返回VBA并尝试使用它。
使用Access查询设计器创建并测试您的查询。选择源表并设置连接。接下来选择输出字段。最后创建一个查询参数并添加一个查询条件,将NewBorn.ID
与该参数进行比较。切换到SQL视图时,WHERE
子句的相关部分应与此类似......
NewBorn.ID = [YourParameterName]
当您测试该查询时,Access将显示一个输入框,要求您提供 YourParameterName 的参数值。
稍后当您使用VBA中的查询时,您可以在代码中提供参数值。但是,现在,请专注于查询。
现在您有一个工作参数查询,调整它以使用 txtSearch 文本框值代替参数,然后将该查询用于列表框Row Source
:
strSQL = "SELECT Mutation.DiseaseAssociation, Newborn.NewBornID" & vbCrLf & _
"FROM Newborn INNER JOIN ((Mutation INNER JOIN (DNA INNER JOIN DNAMutation ON DNA.DNA_ID = DNAMutation.DNA_ID) ON Mutation.Mutation = DNAMutation.MutationID) INNER JOIN NewbornDNA ON DNA.DNA_ID = NewbornDNA.DNA_ID) ON Newborn.NewBornID = NewbornDNA.NewBornID" & vbCrLf & _
"WHERE (((Newborn.NewBornID)=Forms!YourFormName!txtSearch));"
Me!lstDiag.RowSource = strSQL
您的表单包含一个名为 Command0 的命令按钮。您的表单的代码模块包含此过程......
Private Sub Comand0_Click()
但该过程名称与命令按钮名称不匹配。这没有错误(Command0_Click,2米!)并填充列表框...
Private Sub Command0_Click()
'Dim db As Database, rs As Recordset, strSQL As String
Dim strSQL As String
'Set db = CurrentDb
strSQL = "SELECT Mutation.DiseaseAssociation, Newborn.NewBornID FROM Newborn INNER JOIN ((Mutation INNER JOIN (DNA INNER JOIN DNAMutation ON DNA.DNA_ID = DNAMutation.DNA_ID) ON Mutation.MutationID = DNAMutation.MutationID) INNER JOIN NewbornDNA ON DNA.DNA_ID = NewbornDNA.DNA_ID) ON Newborn.NewBornID = NewbornDNA.NewBornID WHERE Newborn.NewBornID=Forms!Calculator!txtSearch;"
'Set rs = db.OpenRecordset(strSQL)
Me!lstDiag.RowSource = strSQL
MsgBox "Hello World!"
End Sub