方法如下: 首先假设:要合并到的(即合并后你将用在论坛上的)数据库文件为bbs1.mdb、被合并的(即合并后你就甩了不要的)数据库文件为bbs2.mdb ①先到以bbs1.mdb作数据库的论坛后台,去新建所没有的bbs2.mdb中的分论坛;(举例:bbs1论坛中有甲、乙分论坛,bbs2论坛中有甲、丙分论坛,你就要在前者论坛中把丙给建上,包括类别下面的二级分论坛你都要筹备好,免得bbs2合并过来的数据在bbs1中找不到原来关系而失败) ②将bbs1.mdb、bbs2.mdb都下载到本地机上,并把这两个文件各复制出备份;(注意下面的合并操作中没有什么步骤撤消功能可退,且边合并边写库、一错文件就坏,坏了你就要把库文件删了、再从备份复制回来) ③运行Access,打开bbs1.mdb,点文件–获取外部数据–链接表,找到bbs2.mdb,点链接; ④点所显示链接表中的forum表、再按住ctrl键点reforum表,点确定; ⑤右击已链接过来的forum1表,点复制,再对着旁边空白处点粘贴,点将数据追加到已有表,在表名称栏中填forum,点确定; ⑥右击已链接过来的reforum1表,按⑤的步骤如法炮制(只是表名称栏要填reforum); ⑦将列表中的forum1和reforum1两个链接表删除。这样两个库就合并了(bbs2合并到bbs1中去了)! 然后,你将bbs1.mdb库上传至空间,进入后台的论坛管理操作,把原bbs2的那些分论坛里的帖子移动到bbs1应有的分论坛中,再删掉bbs2的分论坛。两个论坛也告合并成功! |
月份:2007年6月
多个Access数据库如何合并到一起
问题:连接两台机器上的数据库,是两台都装ODBC吗?然后怎么办?怎么操作配置?
关于
一、如果是同一台机器上,可以使用如下两种方式访问另一个MDB:
(1)其中表名是在db2中的表名
SELECT *
from 表名 in
‘C:\db2.mdb’
(2)其中表名是在db2中的表名
select *
from [;database=C:\db2.mdb].表名
追加到本机的另一个MDB中:
insert into
目标MDB的表名(字段列表) in
‘C:\db2.mdb’
select 字段列表
from 当前MDB的表名
或
insert into
[;database=C:\db2.mdb].目标MDB的表名(字段列表)
select
字段列表 from 当前MDB的表名
二、如果访问另一台机器上的MDB,可以使用链接表、传递查询、或直接用SQL:
(1)使用链接表时,建议使用文件数据源创建链接表,与机器无关,拷贝到别的机器上可以直接使用,无须再手工或用代码创建ODBC。
三种数据源比较:
文件DSN
ODBC文件数据源允许用户连接到数据提供程序。文件DSN可以由安装了相同驱动程序的用户共享。
用户DSN
ODBC用户数据源存储了如何与指定数据提供程序连接的信息。用户数据源只对当前用户可见,而且只能用于当前机器上。
系统DSN
ODBC系统数据源村除了如何与指定数据提供程序连接的信息。系统数据源对当前机器上的所有用户可见,包括NT服务。
(2)传递查询,需要将连接串保存到传递查询中,但效率比链接表要高。
(3)使用Jet-SQL语句访问:
可以直接用机器名访问,如:
SELECT *
FROM [;DATABASE=\\Server\共享文档\Test.MDB].表名
也可以先将另一台机器上的共享目录映射成本地磁盘,就和访问本地的MDB一样了。
假设另一台机器IP为192.168.0.1,机器名为Server,共享的文件夹名字为“共享目录”,创建映射成本地的磁盘(如:Z)后
SELECT *
FROM [;DATABASE=Z:\Test.MDB].表名
————————————————————————————–
ODBC连通,在表->新建->连接表中建立连接表;
JET SQL:
SELECT *
FROM DD IN
ODBC[ODBC;Driver=SQL
Server;UID=sa;PWD=;Server=服务器名;
DataBase=数据库名];
选项卡特效制作
本教程只介绍运用tbody制作选项卡的方法,首先来看一个实例:
table{ font-size:9pt}
.h1{ background:#d3d6d9;border-top:1px outset
#d3d6d9;border-left:1px outset #d3d6d9;border-right:1px outset
#d3d6d9;border-bottom:0px }
.h2{ background:menu;border:1px outset menu }
.h3{ background:white;border-bottom:1px outset #d3d6d9}
#main{ background:#d3d6d9;border-left:1px outset
#d3d6d9;border-right:1px outset #d3d6d9;border-bottom:1px outset
#d3d6d9}
</style>
<script>
function sel(n){
var ye=document.all[‘handle’];
for(i=0;i<ye.cells.length-1;i++){
ye.cells[i].className=”h2″;
ye.cells[n].className=”h1″;
}
for(i=0;i<yexj00.tBodies.length;i++){
yexj00.tBodies[i].style.display=’none’;
yexj00.tBodies[n].style.display=’block’;
}
}
</script>
<table cellspacing=0 cellpadding=0 width=”350″
height=”18″ border=0>
<tbody>
<tr
align=center><td width=80 height=20
>昵称</td><td
width=80
>QQ</td><td
width=80
>主页</td><td
</td>
</tbody>
</table>
<table cellspacing=0 cellpadding=0 width=”350″
height=”150″>
<tbody>
<tr
align=center><td>yexj00</td></tr>
</tbody>
<tbody
style=”display:none”>
<tr
align=center><td>26003083</td></tr>
</tbody>
<tbody
style=”display:none”>
<tr
align=center><td>http://yexj00.5dm.cn</td></tr>
</tbody>
</table>
.h1{ background:#d3d6d9;border-top:1px outset #d3d6d9;border-left:1px outset #d3d6d9;border-right:1px outset #d3d6d9;border-bottom:0px }
.h2{ background:menu;border:1px outset menu }
.h3{ background:white;border-bottom:1px outset #d3d6d9}
#main{ background:#d3d6d9;border-left:1px outset #d3d6d9;border-right:1px outset #d3d6d9;border-bottom:1px outset #d3d6d9}
h1是默认选中的那个标题的样式,一般选第一个标题。
h2是未选中的标题的样式。
h3是当标题的总宽度小于内容主体的总宽度时要在后面添加的单元格的样式(设置为只显示下边框)。
main就是内容主体的样式,这里设置成上边框为0px(没有设定border-top就是说它的值为0),如果border-top不为0,那内容主体的上边框将与标题的下边框叠加,效果就不好了,可以也是可以的。
2. 怎样处理事件?
思路是这样的:单击哪个标题,就把所有标题样式设为h2,再回过来把当前标题的样式设为h1;然后内容主体也差不多,先隐藏所有的内容,然后再回过来显示当前标题相对应的内容主体。
有了这个思路接下来就游刃有余了,根据以前学过的脚本就可以知道:
标题所在的table是handle,因为这个table每列都只有一个单元格,这就好办了,直接对这个handle的cells集合进行遍历。
而内容主体默认除第一个tbody显示之外其它的display都设成none;于是我们可以对main这个table的tBodies集合进行遍历。
还少一个什么呢,对了,就是当前选中的标题样式要更改,对应的内容要更改,这个标题或当前标题对应的内容的索引该怎么传到函数中呢,当然了,有朋友马上想到放在函数名后面的参数里进行传值,就是例中的n。
3. 为什么
ye.cells[i].className=”h2″;
ye.cells[n].className=”h1″;
}
这里for循环的条件中ye.cells.length要减1呢?别忘了标题栏的总宽度小于内容主体的总宽度,所以最后一个单元格是不参与任何过程的。