Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ms access 使用textbox中的值更新/编辑列表框中选择的多条记录_Ms Access_Vba - Fatal编程技术网

Ms access 使用textbox中的值更新/编辑列表框中选择的多条记录

Ms access 使用textbox中的值更新/编辑列表框中选择的多条记录,ms-access,vba,Ms Access,Vba,我有一个相当棘手的问题,我无法解决 我有一个access数据库,存储在仓库中的工具从仓库借来用于生产现场。我有一个表,其中存储了借用和归还物品到ofc仓库的日期数据以及其他数据,如工人ID等。当物品在仓库外时,表中的归还日期字段为空 所以我创建了一个查询,只显示返回日期字段为空的记录,并创建了一个表单,其中包含一个显示查询数据的多选列表框和一个日期格式的文本框。现在我想要实现的是能够在列表框中选择多条记录,并使用文本框中的日期更新返回日期字段的所选记录。我的问题是,我不知道如何调用所选记录中的特

我有一个相当棘手的问题,我无法解决

我有一个access数据库,存储在仓库中的工具从仓库借来用于生产现场。我有一个表,其中存储了借用和归还物品到ofc仓库的日期数据以及其他数据,如工人ID等。当物品在仓库外时,表中的归还日期字段为空

所以我创建了一个查询,只显示返回日期字段为空的记录,并创建了一个表单,其中包含一个显示查询数据的多选列表框和一个日期格式的文本框。现在我想要实现的是能够在列表框中选择多条记录,并使用文本框中的日期更新返回日期字段的所选记录。我的问题是,我不知道如何调用所选记录中的特定字段以在其中插入数据。这可能是我来的方式吗?如果没有,我如何解决这个问题

编辑:对于迭代过程,我尝试使用两种类型的迭代:

For Each varItm In Me.Listbox.ItemsSelected
'update statement should go here
Next varItm
第二个:

For i = 0 to Listbox.ItemsSelected.Count - 1
'update statement
Next i

我在变量和缺少对象运行时错误424方面遇到了一些问题,但主要问题是我不知道如何将数据插入到选定行的某些字段中

列表框应至少有两列提供源查询的数据。第一个应该是ToolID,第二个应该是ToolName,或者是包含工具名称的任何字段。附近的按钮可以运行上面的例程,以确保在正确选择所有项目之前不会运行。然后,标识columns属性以获取运行查询所需的ID号。请记住,在Access中,第一列是0,就像列表框中的第一条记录是0一样,因此在列表计数的末尾有一个-1

如果要单独为每个ID调用更新例程,有一种方法:

Dim ToolID as Long
Dim strSQL as String
For i = 0 To Me.lsbTools.ListCount - 1
    If Me.lsbTools.Selected(i) Then
        ToolID = Me.lsbTools.Column(0, i)
        strSQL = "UPDATE tblTool SET ReturnDate=#" & me.txbDateReturned & "# WHERE ToolID=" & ToolID
        DoCmd.RunSQL strSQL
    End If
Next
但是,您也可以将SQL构造为运行一次并更新所有包含的SQL,如下所示:

Dim ToolID as Long
Dim strSQL as String
'The hashtags around the dates ONLY work in MS ACCESS and will not work in T-SQL.  you will have to edit the syntax to use this on a SQL-server linked table
strSQL = "UPDATE tblTool SET ReturnDate=#" & me.txbDateReturned & "# WHERE ToolID IS IN("

For i = 0 To Me.lsbTools.ListCount - 1
    If Me.lsbTools.Selected(i) Then
        ToolID = Me.lsbTools.Column(0, i)
        strSQL = strSQL & ToolID &", "
    End If
Next
'This checks to make sure the last two characters are a comma and space, and removes them
If Right(strSQL,2) = ", " Then                   
    strSQL = Left$(strSQL, Len(strSQL)-2) & ")"
    DoCmd.RunSQL strSQL                    'This runs the SQL statement
End if

使用VBA。迭代选定项selected并为每个选定项运行update语句。在语句中引用表示返回数据的表单字段。将返回数据文本框放在表单的标题中。你自己先试一试。谢谢你的回答。我知道我必须对每个选定的项进行迭代,但是我应该使用什么update语句呢?考虑过使用记录集,但我仍然不知道如何引用所选的项您有迭代代码吗?编辑您的问题以显示它。感谢您的帮助。我不明白一件事,我用的是第一种方法,它在我的一台电脑上不起作用,但在第二台电脑上起作用。我看到的唯一区别是Access的一个版本是波兰语,第二个版本是英语。我在波兰语版本运行时错误3075中发现语法错误,查询表达式“31.12.2017”中出现语法错误标签后面的日期是我在日期文本框中键入的日期。你知道是什么导致了这个问题吗?好的,我知道了,我必须改变Windows中的日期设置,用短划线而不是圆点来显示短日期。第一种方法很有魅力,谢谢!无论如何,在第二个方法中,“IS in”表达式后面应该是什么:strSQL=UPDATE-tblTool SET-ReturnDate=&me.txbDateReturned&ToolID在哪里?我在这个方法中也有一些语法错误