Vba 根据其他记录的值添加记录

Vba 根据其他记录的值添加记录,vba,ms-access,Vba,Ms Access,我要再试一次,因为我太迷路了..:我有一个Access数据库,后端包含以下表: tblStat groupID 用户ID 复杂的 打开 新帐户 装船 未装运 代码 A. 123 对 不 对 869 B 147 不 对 不 936 我无法完全在SQL中找到解决方案,但在VBA中,以下方法可执行以下操作: 收集从tblStat更新的记录 循环并尝试在tblCode中查找匹配项 相应地更新记录 有一个helper函数尝试在tblCode中查找匹配项,还有一个enum函数返回,使代码更清晰、更易于阅读

我要再试一次,因为我太迷路了..:我有一个Access数据库,后端包含以下表: tblStat

groupID 用户ID 复杂的 打开 新帐户 装船 未装运 代码 A. 123 对 不 对 869 B 147 不 对 不 936
我无法完全在SQL中找到解决方案,但在VBA中,以下方法可执行以下操作:

  • 收集从tblStat更新的记录
  • 循环并尝试在tblCode中查找匹配项
  • 相应地更新记录
  • 有一个helper函数尝试在tblCode中查找匹配项,还有一个
    enum
    函数返回,使代码更清晰、更易于阅读

    我很确定有更好的东西存在

    Private Enum ShipEnum
        None = 0
        Shipped
        NotShipped
    End Enum
    


    我无法完全在SQL中找到解决方案,但在VBA中,以下方法可执行以下操作:

  • 收集从tblStat更新的记录
  • 循环并尝试在tblCode中查找匹配项
  • 相应地更新记录
  • 有一个helper函数尝试在tblCode中查找匹配项,还有一个
    enum
    函数返回,使代码更清晰、更易于阅读

    我很确定有更好的东西存在

    Private Enum ShipEnum
        None = 0
        Shipped
        NotShipped
    End Enum
    


    如果两个表中的代码列都有唯一的值,并且您在编写问题中两个表的代码字段值时没有犯错误,那么这些查询应该可以工作:

    在tblStat.code=tblCode.code上更新tblStat JOIN tblCode
    设置为1
    其中CONCAT(groupID,,,,complex,,,open,,,new_account)=uniqueid
    代码类型=‘已装运’;
    在tblStat.code=tblCode.code上更新tblStat JOIN tblCode
    设置未发货=1
    其中CONCAT(groupID,,,,complex,,,open,,,new_account)=uniqueid
    代码类型='未发货';
    
    编辑:
    这些查询是根据MySQL进行的。在VBA中,应该有一些其他的功能或方法,比如用
    +
    运算符连接字符串?

    如果两个表中的代码列都有唯一的值,并且您在编写问题中两个表的代码字段值时没有犯错误,那么这些查询应该可以工作:

    在tblStat.code=tblCode.code上更新tblStat JOIN tblCode
    设置为1
    其中CONCAT(groupID,,,,complex,,,open,,,new_account)=uniqueid
    代码类型=‘已装运’;
    在tblStat.code=tblCode.code上更新tblStat JOIN tblCode
    设置未发货=1
    其中CONCAT(groupID,,,,complex,,,open,,,new_account)=uniqueid
    代码类型='未发货';
    
    编辑:

    这些查询是根据MySQL进行的。在VBA中,应该有一些其他的函数或方法,比如用
    +
    运算符连接字符串?

    我在您的文本中没有发现问题。你能告诉我你想做什么,出了什么问题吗。。我想做一些类似的事情:
    sudocode如果tblCode.code type=shipped,那么tblStat.shipped=1,如果tblCode.code type=not shipped tblStat.not-shipped=1,唯一的问题是我不知道该怎么做..复杂的、开放的、新帐户文本字段还是布尔格式的yes/no?它们是文本字段。由于敏感,我需要更改信息,但这几乎是sameI的错误。很抱歉,我犯了一个错误。两个表中的代码都相同。我在您的文本中没有找到问题。你能告诉我你想做什么,出了什么问题吗。。我想做一些类似的事情:
    sudocode如果tblCode.code type=shipped,那么tblStat.shipped=1,如果tblCode.code type=not shipped tblStat.not-shipped=1,唯一的问题是我不知道该怎么做..复杂的、开放的、新帐户文本字段还是布尔格式的yes/no?它们是文本字段。由于敏感,我需要更改信息,但这几乎是sameI的错误。很抱歉,我犯了一个错误。两个表中的代码编号相同。我认为MS Access没有
    CONCAT
    方法,但可以将其转换为VBA函数。我现在对VBA不太了解,我两年前就用过了。我根据MySQL构建了查询。在VBA中,应该有一些其他的函数或方法,比如用“+”运算符连接字符串?符号AND或+将连接Access中的字符串。如果+用于连接两个字段或变量,其中一个为Null,则结果将为Null,而与符号将忽略Null并返回另一个字符串。但是,如注释所示,如果两个表都有uniqueid字段,则可能不需要连接。我认为MS Access没有
    CONCAT
    方法,但是它可以被转换成VBA函数。我现在对VBA不太了解,我两年前就用过了。我根据MySQL构建了查询。在VBA中,应该有一些其他的函数或方法,比如用“+”运算符连接字符串?符号AND或+将连接Access中的字符串。如果+用于连接两个字段或变量,其中一个为Null,则结果将为Null,而与符号将忽略Null并返回另一个字符串。但是,如果两个表都具有唯一的ID字段,则可能不需要连接,如注释所示。然后编辑您的问题以更正表格。是否可以对后端数据库进行DLookup?只是因为它由于表位于后端而出错。前端只是一堆表单。后端是存储所有表的地方。我猜它们是以某种方式链接到TBLCodewwith
    Set backendDB=openbackend(backendPath,False,False…
    )的,但这还不足以让dlookup连接到TBLCodewwith
    Set backendDB=openbackend(backendPath,False,False…
    ),一旦前端打开,从后端上传和查看记录。然后根据要查看的信息,
    aValue=backendDB.openrecordset(“SELECT*from tbl..”)
    这有帮助吗?是的,后端数据库只是一个dao.database。你需要创建一个新的access应用程序并打开后端进行查找。效率不高。我将更新答案以打开一个记录集,而不是dlookup,这样你就可以使用后端数据库了
    Private Function CodeTypeByCriteria(ByVal stringUniqueId As String, ByVal stringCode As String) As ShipEnum
        With CurrentDb().OpenRecordset("SELECT codetype FROM tblCode WHERE StrConv(uniqueId, 2)='" & StrConv(stringUniqueId, vbLowerCase) & "' And code='" & stringCode & "'", dbOpenSnapshot)
            If Not .EOF Then
                Select Case ![codetype]
                    Case "shipped":
                        CodeTypeByCriteria = ShipEnum.Shipped
                        
                    Case "not-shipped":
                        CodeTypeByCriteria = ShipEnum.NotShipped
                        
                    Case Else:
                        Exit Function
                End Select
            End If
        End With
    End Function