相信有很多的人在为数据导入而苦恼,从微软抛弃ASP后,一大堆的站长在为转换平台而辛苦。一些新的CMS平台很少再使用Access数据库,从成本上考虑,MySQL是一个很好的选择。因此,本文就从Access平台转换到MySQL平台来说明。
不管什么CMS平台,动易还是IWMS,或是自己开发的,转入到新的CMS最重要的数据是什么?
首先是文章数据,然后才是用户数据。由于各个CMS的用户数据加密方式可能存在差异,最终我们首先选择的是文章数据。能把一个网站多少年积累发布的文章导进来,不用再一篇一篇地去发布,相信你我就都知足了。
现在我们看这样一个Access数据库,是IWMS的,我想把文章数据导入到Lerx系统中去。说明一下IWMS是一款非常优秀的CMS系统,但由于是ASP.net,并不支持linux平台。db目录下有个iwms.cs文件,这是iwms的数据库,我们改扩展名为mdb,再用Access软件打开。

如图所示,iwms_news就是主要的文章数据表。这样一个表,我要导入到新的系统里怎么办呢?
首先你会想到用工具,但你却找不到,除非你的表结构和新的cms是一样的,这种现实几乎不存在。那就踏踏实实地做吧,最稳的方法,利用这个表生成一个全是SQL脚本的文件,然后到数据库中去执行就是了。
但生成SQL脚本也是一个非常难以实现的过程,因为原有的表结构和新的表结构几乎完全不同。我的思路是将iwms_news表中的数据提取有用的字段,然后成生一个我可以轻松处理成我需要的SQL脚本的文本。那就这样处理好了,我把这个表中我不需要的字段全删掉,然后用我的自定义字段把它有用的字段进行间隔,包括头尾。
我的目标是将这个表生成一条条的如下面的记录的SQL文本:
INSERT INTO `articles` VALUES (栏目ID,'文章标题','文章正文','发布人','发布日期',点击次数);
那我就进行表设计了,把没用的全删了。对于这个表来说,我已经知道content是文章正文,title是文章标题,依此类推。删掉以后我再加上临时定义的字段名n1,n2,n3等等。最终我要形成的表结构如下图:

根据上面的表,为了快速完成工作,我的目标是生成下面的SQL语句:
INSERT INTO `articles` VALUES ('文章正文','文章标题',栏目ID',点击次数,'发布日期');
我通过n1生成字符串:“INSERT INTO `articles` VALUES ('”,通过n2生成“','”……最后n6生成“');”不就行了?
呵呵,想到这里,成功的喜悦洋溢起来了。
下面的操作很关键为:
在Access中建立一个宏,宏是什么不要问我吧。
操作选为:RunSQL,在SQL语句处输入:update iwms_news set n1='aaaaaa'。你会问我为什么是aaaaaa,我告诉你不一定是,你也可以是adsfasdfasdfasdfasdf,只要你相信文章里根本不会存在这样的字符串就行了。
保存宏,执行宏。ok。你打开iwms_news表发现成功了。数据中这个字段全按你想要的生成了。
再来:在SQL语句处输入:update iwms_news set n2='bbbbbb',不会再问我bbbbbb又是什么吧?
周而复始……
最后你的表里的数据应该是这种样子,见下图:

好了。那就导出吧,记着导出为文本文件哦。关了Access吧。
下面的操作你应该想到了。但我提醒你,不急。
用UltraEdit或是EditPlus打开文本件随你选。这里还有一个必须要注意的地方:打开后第一件事是把所有的单引号替换成两个单引号,就是把'替换成''。注意只能替换一次。
好了,现在我可以操作了,替换aaaaaa为INSERT INTO `articles` VALUES (',bbbbbb为','……,n6为');。
保存吧。
到数据库中执行就一下,怎么样?看着这么多数据到了新的cms里是不是很爽?最后利用update语句根据栏目ID一个栏目一个栏目地执行一下就行了,你别告诉我你有上百上千上万的栏目,上百还行,上千我就会吐血了。
上面两个命令记着了。还有问题,那欢迎你到Lerx来找我,在这个文章下评论区说说你的问题,我们一起来研究,如果你觉得本文解决了你的问题,在这个文章的评论区中说声谢谢两个字我就很知足了。
数据库里怎么执行?不会?