Access911.net   |   a9BBS   |   OTaA System  
  搜索文章:  
Access911欢迎您光临  
   主页      上传      繁體版       论坛     
设为首页  |  加入收藏   
  
你现在的位置:文章索引 -> 文章分类 -> 查询  
 首页|  近日更新|  下载  |  文章索引  |  搜索|  术语|  承接工程|  
 
系统正在加载内容,请耐心等待...
 
 查询
 窗体
 报表
 
 
 VBA
 函数
 ADO/DAO/ADO.NET
 API
 ADP
 安全
 发布
 OA
 ASP/ASP.NET
 其他语言
 控件
 DELPHI
 C#/.Net
 本站
 其他
 小例程
 常用软件
 参考文档
 业主作品
 网友大作
 
 
友情链接
 access911.net
 
访问人次
 1701862
 
站长 E-Mail
 net911@sina.com
 access911@gmail.com
 
RSS 订阅

显示附加信息 >>>

新手来看:如何根据一个表去更新另一个表,带 JOIN 的update怎么写?

作者:cg1  摘自:access911.net  :cg1  更新日期:2010-9-1  浏览人次:

 

问题:

如何根据一个表去更新另一个表,带 JOIN 的update怎么写?

实时表
编号(自动编号)      栏目(文字)      点击率(长整)
1                   公告栏           25000
2                   新闻栏              56
3                   产品栏             556
4                   广告栏             698


统计表
编号(自动编号)      栏目(文字)      点击率(长整)
1                   公告栏               0
2                   新闻栏               0
3                   产品栏               0
4                   宣传栏               0

如何将[实时表]的点击率更新到[统计表]的点击率,以栏目字段为关联?

更新后的结果为:

统计表
编号(自动编号)      栏目(文字)      点击率(长整)
1                   公告栏           25000
2                   新闻栏              56
3                   产品栏             556
4                   宣传栏               0

 


回答:


Function DoUpdate()
    '先将数据恢复到初始状态
    CreateTableUpdateJoin
    CreateProcedureUpdateJoin
    
    '大家可以分开执行以下几段代码,然后打开统计表看执行的效果
    DoCmd.OpenQuery "用join方法更新"
    'DoCmd.OpenQuery "用where方法更新"
    'DoCmd.OpenQuery "用dlookup方法更新"
    ''大家注意实时表中栏目为“产品栏”的记录。实时表中有两条记录与统计表中的一条记录相符。但是更新时取的是ID较小的那条。
End Function

'本函数创建3个更新查询。每个查询表示一种不同的更新方法。
Function CreateProcedureUpdateJoin()
    Dim strSql As String
    With CurrentProject.Connection
        DeleteProcedureUpdateJoin
        
        '用join的方法
        strSql = "create procedure [用join方法更新] as update 统计表 inner join 实时表 on 统计表.栏目=实时表.栏目 set 统计表.点击率=实时表.点击率"
        .Execute strSql
        
        '用where关联的方法
        strSql = "create procedure [用where方法更新] as update 统计表,实时表 set 统计表.点击率=实时表.点击率 where 统计表.栏目=实时表.栏目"
        .Execute strSql
        
        '用dlookup组织字符串的方法
        strSql = "create procedure [用dlookup方法更新] as update 统计表 set 统计表.点击率=dlookup('点击率','实时表','点击率=' & 统计表.点击率)"
        .Execute strSql
        
        '大家注意实时表中栏目为“产品栏”的记录。实时表中有两条记录与统计表中的一条记录相符。但是更新时取的是ID较小的那条。
    End With
    
End Function

'删除数据库中已经存在的2个表。
Function DeleteTableUpdateJoin()
    On Error Resume Next
    With CurrentProject.Connection
        .Execute "drop table 实时表"
        .Execute "drop table 统计表"
    End With
End Function

'删除数据库中已经存在的3个查询
Function DeleteProcedureUpdateJoin()
    On Error Resume Next
    With CurrentProject.Connection
        .Execute "drop procedure [用join方法更新]"
        .Execute "drop procedure [用where方法更新]"
        .Execute "drop procedure [用dlookup方法更新]"
    End With

End Function
'创建2个测试表,并加入测试数据
Function CreateTableUpdateJoin()
    Dim strSql As String
    With CurrentProject.Connection
        DeleteTableUpdateJoin
    
        .Execute "create table 实时表 (编号 AUTOINCREMENT(1,1) PRIMARY KEY,栏目 varchar(50),点击率 long)"
        .Execute "create table 统计表 (编号 AUTOINCREMENT(1,1) PRIMARY KEY,栏目 varchar(50),点击率 long)"
        
        .Execute "insert into 实时表 (栏目,点击率) values('公告栏',25000)"
        .Execute "insert into 实时表 (栏目,点击率) values('新闻栏',56)"
        .Execute "insert into 实时表 (栏目,点击率) values('产品栏',556)"
        .Execute "insert into 实时表 (栏目,点击率) values('产品栏',679)"    '注意,这里有2个产品栏,但点击率不同
        .Execute "insert into 实时表 (栏目,点击率) values('广告栏',698)"
        
        .Execute "insert into 统计表 (栏目,点击率) values('公告栏',0)"
        .Execute "insert into 统计表 (栏目,点击率) values('新闻栏',0)"
        .Execute "insert into 统计表 (栏目,点击率) values('产品栏',0)"
        .Execute "insert into 统计表 (栏目,点击率) values('宣传栏',0)"
    End With
End Function


 

 

 
相关文章
     没有手动相关文章
 
评论
     查看或发表更多的评论,请单击这里。
 
 
 
 
 
   
  Access911.net   |   a9BBS   |   OTaA System   |
建站日期:2000年4月2日  |  设计施工:陈格 ( access911 & cg1 )
 Copyright © 2000 - 2003 COMET, 陈格 保留所有权利