踩了Access数据库的两个坑,吐血中

in #database6 years ago

之前学习了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语法冲突。

当然了,这两个坑或许有其它更好的解决方法,不过对我而言,好用就好啦,不去深究咯,回头大不了删库跑路。

相关链接

Sort:  

神算用mfc会不会被码农 @coder-bts 鄙视

鄙视啊鄙视啊,就习惯了

别呀,才开始就想着

回头大不了删库跑路

继续继续…………

Coin Marketplace

STEEM 0.32
TRX 0.12
JST 0.034
BTC 64647.93
ETH 3160.25
USDT 1.00
SBD 4.09