MS Access VBA,在运行DoCmd以查找记录时未获得结果

时间:2016-10-04 13:27:13

标签: vba ms-access

我不是程序员,但我正试图获得一个小型数据收集数据库。我需要根据输入找到记录。我有两个标准,我希望它找到,如果两者都没有找到,它应该创建一个新的记录(填写两个字段,以防止重复对)。第一个标准是它需要寻找一个日期。我已经知道了一个,这里是代码。

<Button text="polygon" style="background-color: magenta; border-width:2; border-color: red; clip-path: polygon(20% 0%, 0% 20%, 30% 50%, 0% 80%, 20% 100%, 50% 70%, 80% 100%, 100% 80%, 70% 50%, 100% 20%, 80% 0%, 50% 30%);" row="3" />

像魅力一样工作。现在,我尝试添加第二个标准。第二个标准来自列表框,无论是白天还是黑夜。然后,它应该在我的Data上的列表框中搜索我的数据字段中的相同条件!形式。

Dim Date1 As String
Date1 = Text6.Value

DoCmd.OpenForm "Data", , , "Data![ShiftDate] = #" & Date1 & "#"

msgbox只是为了验证它是在白天或晚上拉出正确的单词。一切都很好,但不是在正确的日期拉一个记录,而是在正确的转变,我得到空白的记录。我尝试取出where语句的前半部分来隔离移位部分,但仍然无法让它找到记录。我不知道我做错了什么。

2 个答案:

答案 0 :(得分:0)

好像你已经有了表格。

我建议您尝试这样做: 向表单添加一个带有单击事件的按钮,并将以下代码添加到click事件中:

dim rs as dao.recordset set rs = currentdb.openrecordset ("SELECT * FROM [yourtable] WHERE ('ShiftDate' = '" & [yourParameter] & "' AND 'Shift' = '" & [your2ndParameter] & "')") if rs.eof then ' here NO record is found currentdb.execute ("INSERT INTO [yourtable] ('ShiftDate', 'Shift') VALUES ('" & [yourParameter] & "', '" & [your2ndParameter] & "')") else ' here a record is found endif

由于您的ShiftDate是一个日期,您需要将日期转换为SQL日期格式,如下所示:

Function SQLDatum(Datumx) As String
If IsDate(Datumx) Then
    SQLDatum = Format(CDate(Datumx), "\#yyyy-mm-dd\#", vbMonday, _
                      vbFirstFourDays)
  Else
    SQLDatum = ""
End If
End Function

答案 1 :(得分:0)

在你的命令中

DoCmd.OpenForm "Data", , , "Data![ShiftDate] = #" & Date1 & "# AND ...

您打开表单Data,但同时通过引用使用Data![ShiftDate]打开的表单来指定过滤器。这很奇怪,因为必须将过滤器应用于数据源。我只想写

DoCmd.OpenForm "Data", , , "ShiftDate= #" & Date1 & "# AND Shift= '" & Shift1 & "'"

引用数据源的表格列(=左侧)。

请注意,列Shift必须是文本列。如果是某个数字,则必须删除单引号并将其传递给相应的ID。