首页 文章

在Access数据库中打开表单时的SQL查询

提问于
浏览
0

我正在开发我正在开发的访问数据库中的表单时遇到问题 . 查询正在运行而没有停止 . 我必须手动停止它(因此不执行下面描述的操作) . 在开头,表单应该执行这部分代码:

Private Sub Form_Load()

DoCmd.SetWarnings False
DoCmd.RunSQL "UPDATE Table1 SET Field1 = Null WHERE EXISTS(SELECT * FROM Query2 WHERE Query2.Field2 = Table1.Field2 AND Query2.Field3 = 0 AND Query2.Field1 = Table1.Field1)"
DoCmd.SetWarnings True

End sub

换句话说,我需要在Query2中检查记录Field3 = 0的记录,在这些记录中,哪些记录具有Field1匹配Table1的Field1和Field2匹配Table1的Field2 . 当识别出这些记录时,我想将Table1中Field1的记录值设置为Null .

For example (i put in "code" aspect to have this part more readable, but it's not code, only an example)

Table1.Field1 | Table1.Field2
ABC             12345
DEF             67891

Query2.Field1 | Query2.Field2 | Query2.Field3
ABC             12345           5            --> this record is not selected
DEF             12345           0            --> this record is not selected
DEF             67891           0            --> this record is selected and value of DEF in Table1 is deleted (Null)

你看到有什么错误吗?你有没有办法做到这一点?我不太了解sql . 我希望它足够清楚......

谢谢,黛安

2 回答

  • 0

    我要尝试的第一件事就是改变

    WHERE EXISTS(SELECT * FROM Query2 WHERE Query2.Field2
    

    WHERE EXISTS(SELECT 1 FROM Query2 WHERE Query2.Field2
    

    虽然在大多数数据库引擎中两者之间没有区别,但在Access中它可能会有所不同 .

    希望这可以帮助 .

    编辑:

    由于这没有多大帮助,我接下来要尝试的是:

    UPDATE Table1
    INNER JOIN Query2 ON Query2.Field2 = Table1.Field2 AND Query2.Field3 = 0 AND Query2.Field1 = Table1.Field1
    SET Table1.Field1 = Null;
    

    请确保首先针对测试数据库运行此操作 .

    HTH .

  • 0

    感谢您的帮助,我终于以不同的方式完成了它,我不是程序员所以也许它不是很干净但是它适用于我的目的:-)

    首先我修改了一下query2以限制为2个条件然后我在新表中导出查询的数据然后我删除所有我不感兴趣的记录然后我使用剩余的记录更新table1(最后非常很少,所以查询很快) . 更多步骤但更快......

    Private Sub Form_Load()
    DoCmd.SetWarnings False
    
    'Append data of query2 to table2_temp
    DoCmd.OpenQuery "query2"
    
    'Delete some records in table table2_temp 
    DoCmd.RunSQL "DELETE * FROM table2_temp WHERE table2_temp.field3 <> 0"
    
    'Delete value in field1 and field2 of table1 where field2 exists in table2_temp
    DoCmd.RunSQL "UPDATE table1 SET field1 = Null WHERE EXISTS(SELECT * FROM table2_temp WHERE table2_temp.field3 = table1.field2)"
    
    
    'Empty the temp table
    DoCmd.RunSQL "DELETE * FROM table2_temp"
    
    DoCmd.SetWarnings True
    
    End Sub
    

相关问题