Database 访问VBA将表值与常量进行比较并更新它

Database 访问VBA将表值与常量进行比较并更新它,database,vba,compare,Database,Vba,Compare,好的,所以我正在尝试编写VBA代码来尽可能地自动化。我需要它做的是从表中的字段中读取,如果它满足条件,则将其复制到新表中。这是为了旋转。如果CurrentDate等于NextDateOut,而不是该项的任何值,则我希望转到某个表,但也希望更新当前表中的值。NextDateOut将是表中新的LastDateOut值,NextDateIn将是NextDateIn之后的10天,NextDateOut将是NextDateIn之后的10天。我可以写这个的数学逻辑,它只是比较我的表中的值和我的常数,现在是C

好的,所以我正在尝试编写VBA代码来尽可能地自动化。我需要它做的是从表中的字段中读取,如果它满足条件,则将其复制到新表中。这是为了旋转。如果CurrentDate等于NextDateOut,而不是该项的任何值,则我希望转到某个表,但也希望更新当前表中的值。NextDateOut将是表中新的LastDateOut值,NextDateIn将是NextDateIn之后的10天,NextDateOut将是NextDateIn之后的10天。我可以写这个的数学逻辑,它只是比较我的表中的值和我的常数,现在是CurrentDate,更新值,并在条件满足时将值写到某个表中

这是到目前为止的代码,试图找出它也有很多错误

选项显式 分段 '用于从VBA数据库中获取数据的声明 Dim数据库作为DAO.Database 将rst设置为DAO.Recordset 作为字符串的Dim strSQL '打开与当前Access数据库的连接 Set db=CurrentDb '用于处理日期的变量声明 将当前日期设置为日期 Dim NextDateOut As Date Dim NextDateIn As Date 将LastDateOut设置为日期 将LastDateIn设置为日期 '设置一个恒定值,从技术上讲不是一个恒定值,因为没有常数 CurrentDate=日期 "最终会把这个拿出来 MsgBox当前日期 strSQL=从磁带中选择下一个日期,其中下一个日期=当前日期 Set rst=db.OpenRecordsetstrSQL,dbOpenDynaset 用rst 如果.RecorCount>0,则 .先走一步 编辑 !下一个日期=当前日期+20 使现代化 如果结束 以 端接头
提前感谢!!!我正在进步,但在路上遇到了困难。再次感谢

我想你可以通过查询直接解决这个问题

让我们将此问题分为几个步骤:

如果表中的NextDate字段等于代码中的currentDate变量,则:

您需要将条件为真的所有记录移动到新表中 对于表中保留的记录,需要将LastDateOut更新为currentDate,将nextDateIn更新为currentDate+10,将nextDateOut更新为currentDate+20 如果这是正确的,您可以尝试以下方法:

dim strSQL as String
dim currentDate as Date
...
' Step 1: Copy the records to a new table '
strSQL = "insert into otherTable " & _
         "select * from tapes " & _
         "where [nextDateOut]=" & CDbl(currentDate)
doCmd.runSQL strSQL

' Step 2: Delete the records just copied '
strSQL = "delete from tapes where [nextDateOut]=" & CDbl(currentDate)
doCmd.runSQL strSQL

' Step 3: Update the dates in ALL the records remaining the "tapes" table '
strSQL = "update tapes " & _
         "set [lastDateOut]=" & CDbl(currentDate) & ", " & _
         "set [nextDateIn]=" & CDbl(currentDate + 10) & ", " & _
         "set [nextDateOut]=" & CDbl(currentDate + 20)
doCmd.runSQL strSQL
...
注意:我使用CDblcurrentDate来避免日期格式的问题,MS Access将日期存储为双值,整数部分表示天,小数部分表示天的分数


希望这对您有所帮助

SQL语句中有两个错误:1。您没有将值传递给where条件;2.字段名未包含在方括号中:strSQL=从磁带中选择[Next Date Out]=&CurrentDate&,其中[Next Date Out]=&CurrentDate&。请注意,在Access SQL中,需要将日期括在数字符号之间,并且日期值对本地配置敏感。我更喜欢选择。。。where[Next Date Out]=&cdblcurrentDate我不知道我是否做对了,所以这里是我访问文件的链接。没有病毒,请提前感谢。