Access交流中心

北京 | 上海 | 天津 | 重庆 | 广州 | 深圳 | 珠海 | 汕头 | 佛山 | 中山 | 东莞 | 南京 | 苏州 | 无锡 | 常州 | 南通 | 扬州 | 徐州 | 杭州 | 温州 | 宁波 | 台州 | 福州 | 厦门 | 泉州 | 龙岩 | 合肥 | 芜湖 | 成都 | 遂宁 | 长沙 | 株洲 | 湘潭 | 武汉 | 南昌 | 济南 | 青岛 | 烟台 | 潍坊 | 淄博 | 济宁 | 太原 | 郑州 | 石家庄 | 保定 | 唐山 | 西安 | 大连 | 沈阳 | 长春 | 昆明 | 兰州 | 哈尔滨 | 佳木斯 | 南宁 | 桂林 | 海口 | 贵阳 | 西宁 | 乌鲁木齐 | 包头 |

如何选择性追加

开心  发表于:2009-10-27 15:55:34  
复制

B表是A表的备份,A表不时有新数据增加。

请问如何在窗体上设计一个命令按钮,

把A表的新数据追加到B表?

(注:A表与B表在不同的数据库)

 

Top
竹笛 发表于:2009-10-27 16:15:18

DoCmd.SetWarnings False' 不提示系统警告
DoCmd.RunSQL "drop table tblB" '删除B表

DoCmd.RunSQL "SELECT tblA.* INTO tblB FROM tblA" '生成B表


 



竹笛 发表于:2009-10-27 16:16:21
如果你是不同的数据库,则不如直接备份你的数据库。

开心 发表于:2009-10-27 16:33:21

谢谢!

A表每天接收仪器生成许多的数据,删除B表再生成或者直接复制数据库的话要花的时间太长。

 



符鸿敏 发表于:2009-10-27 18:11:17
可根据自己设定的固定的数据更新日期,如每天、每2天或每3天、每周……等,在更新。追加备份数据时,选择查询出该段时间内的数据进行追加,即可达到楼主的目的。

点燃一支烟 发表于:2009-10-27 22:47:15

把A表的记录自动编号,已追加到b表的记录编号取最大值,大于这个最大值的就是A表新增的记录,以此为条件把新增的记录追加到B表就是



ABB 发表于:2009-10-28 01:42:23

只能用SQL语句来实现吧:

insert into b select * from a where id>1000

 



开心 发表于:2009-10-28 13:19:39

感谢各位!

dengshaobin版主说的办法也行不通,因为A表是不能修改的。



开心 发表于:2009-10-28 16:32:39

根据http://www.accessoft.com/article-show.asp?id=3060

作了一个例子。实现应用时A表是链接另一数据库的。

请帮忙设计到窗体按钮上。

点击下载此附件

温暖的阳光 发表于:2009-10-29 21:03:18
我已经做好了,请试一试!点击下载此附件

符鸿敏 发表于:2009-10-29 23:04:11

作为数据的记录,常常有日期字段的吧。如果有的话,就可以:

 

1.先进行B表的选择查询,以日期字段的最后日期为条件。

2.再将A表中大于B表中最后日期的记录全部追加到B表中。

 

或者:

就做一个追加查询,条件为 A表中的日期字段值大于B表中日期字段值的最后日期。

 

这办法比较简单易行。



andymark 发表于:2009-10-30 13:24:08

做一个不重复追加的查询嘛

只要ID是唯一值,什么时候追加都OK

 

Private Sub Command0_Click()
    Dim Sql As String

    '不重复记录的追加,假设ID是唯一的
    Sql = "INSERT INTO B SELECT * FROM A WHERE id not in ( select id from B)"
    CurrentProject.Connection.Execute Sql

End Sub

 

 

点击下载此附件

开心 发表于:2009-10-30 22:56:54

andymark版主的想法比较接近,不过A表中id是有重复的,

只有date和id两个字段加起来才是唯一的。

 



andymark 发表于:2009-10-31 00:48:05

修改了一下

不重复追加查询

 

Private Sub Command0_Click()
    Dim Sql As String

    '不重复记录的追加,假设ID是唯一的
    Sql = "INSERT INTO B SELECT * FROM A WHERE NOT exists (SELECT * FROM b where b.id=a.id and b.date=a.date and b.name=a.name)"

    CurrentProject.Connection.Execute Sql

End Sub

 

上面的语句只用ID,DATA,NAME不同,就会追加,已存在的记录不会理会

 

如果不考虑NAME的值,那可以修改如下

 

Sql = "INSERT INTO B SELECT * FROM A WHERE NOT exists (SELECT * FROM b where b.id=a.id and b.date=a.date)"

 

 

 

点击下载此附件

andymark 发表于:2009-10-31 00:49:51

上面的语句不需要考虑ID重复

 



开心 发表于:2009-10-31 15:49:04

谢谢各位!

既解决了问题,又增长了知识。

 

 



总记录:15篇  页次:1/1 9 1 :