之前学习了MFC中使用Access数据库,以及MFC中向Access 数据库插入数据,想着总要学以致用嘛,就打算把自己在STEEM区块链上的所有文章插入到数据库中。
(图源 :pixabay)
变长文本
原本以为应该是很简单的事情,先用Access建好数据表,然后从steem区块链读数据,再逐条插入即可。因为我关心的只有Title以及文章内容,所以只插入这些数据就好,为了方便定位到文章在steemit.com上的链接,我还插入了URL,当然了,还有文章的创建时间。
为了方便测试,先插入3、5条数据,插入很成功,然而为啥文章数据没插全呢?找了半天,才想起来我建表就是随便点点创建的,没做啥详细设置。一看body字段,我设置的是text类型,默认的长度限制255个字符,难怪被截短了。
因为文章长度很长,又不确定多长,所以我打算设置为变长类型,可是找了半天也没发现什么变长类型,只有一个Memo类型看起来貌似能满足需求。试着将字段类型改成Memo,果然OK了。搜了一下微软的相关网页:The Memo data type is now called “Long Text”,我这还是Memo应该是我Office版本太旧的缘故(2010)。
单引号替换
解决了文章内容被截短的问题,我又开始了插数据,这次使劲插吧。结果程序噼里啪啦的报错,尽管数据大部分都插入成功,但是丢了大概几十篇文章的样子。这让我有些不爽。调试了一下发现是文章内容中的'
和SQL语句中的'
冲突。大概类似这样:
insert into posts(title) values('ddd'ddd')
Microsoft站点上找到一个和我问题类似的帖子,SQL Statement to insert a single quote i.e., ' into a column of the into MSAccess table,别人回复中给的解决方法是字符串替换大法。把'
替换成''
(两个单引号)。试着重新跑一遍程序,这次只少插入十几篇文章。
那里又出错了呢?让我再查查,晕,原来我有的帖子标题里也用到了'
,真是郁闷,就不能好好的起标题,愉快地插数据吗?哎,继续我的替换大法,搞定之。
总结
说了这么多,其实就俩坑
- 变长文本用Memo类型(新版本变成Long Text)否则会被截短。
- 文本中的
'
要转义或者替换,否则和SQL语法冲突。
当然了,这两个坑或许有其它更好的解决方法,不过对我而言,好用就好啦,不去深究咯,回头大不了删库跑路。