我有2个这样的表:
Visitors ID|Name|Visit_from|To|image
Visitor_log ID|Name|Visit_from|To|requestor
当我将记录插入Visitor_log
时,访问者表中的日期会更新。我请求1位访客时使用此功能。问题是Visitor_log.Visitor
字段是一个多选字段,因此代码仅适用于一个访问者:
sub row_inserted (rsold, rsnew)
ew_execute ("UPDATE [Visitors] SET [To Visit On] = ('" & rsnew("To Visit On") & "'),
[To] = ('" & rsnew("To") & "')
WHERE [Visitors].[Visitor(s) Name] = ('" & rsnew("Visitor") & "');")
where子句变为:
WHERE [Visitors].[Visitor(s) Name] = (Visitor A)
但是当选择多个访问者时,它变为:
WHERE [Visitors].[Visitor(s) Name] = (Visitor A, Visitor B, Visitor C)
访问者表中没有名为Visitor A, Visitor B, Visitor C
的访问者作为一个名称,因此SQL查询失败。
我已经被困在这一段时间了,现在任何帮助都非常感谢。
更新:我已将查询设置为response.write
以显示SQL正在执行的操作...
sql: UPDATE [Visitors] SET [To Visit On] = ('10/10/2014'), [To] = ('10/10/2014') WHERE [Visitors].[Visitor(s) Name] = ('Mark M, Paul P');
答案 0 :(得分:1)
审核您的更新,我认为您的问题在于引号。应引用每个不同的值,您应该使用IN运算符。 所以你的查询应该是这样的:
UPDATE [Visitors] SET [To Visit On] = ('10/10/2014'), [To] = ('10/10/2014')
WHERE [Visitors].[Visitor(s) Name] IN ('Mark M', 'Paul P');
因此假设rsnew(“visitor”)是由逗号分隔的一串值,并且您的语言是Vbscript,您可以这样做
ew_execute ("UPDATE [Visitors] SET [To Visit On] = ('" & rsnew("To Visit On") & "'),
[To] = ('" & rsnew("To") & "')
WHERE [Visitors].[Visitor(s) Name] IN ('" & replace(rsnew("Visitor"),",","','") & "');")
答案 1 :(得分:0)
也许你可以在visitor_log表上定义一个触发器来更新访问者表。 在Mysql中,这将是这样的:
CREATE TRIGGER visitor_log_insert_trigger AFTER INSERT ON visitor_log
FOR EACH ROW
UPDATE visitor SET visitor.to = NEW.to, visitor.visit_from = NEW.visit_from
WHERE visitor.name=NEW.name;
答案 2 :(得分:-1)
解决!
以下是完整的工作答案:
Dim sql
sql = ("UPDATE [Visitors] SET [To Visit On] = ('" & rsnew("To Visit On") & "'), [To] = ('" & rsnew("To") & "') WHERE [Visitors].[Visitor(s) Name] IN ('" & replace(rsnew("Visitor"),", ","','") & "');")
Call ew_Execute(sql)
这是smalarons的答案,轻微编辑替换语句中的间距。
感谢大家的支持。