使用FDBatchMove的几个问题总结

FDBatchMove的使用,搞了好久,今天终于解决了自己的几个问题,网上很少例子,记录一下,仅做参考。

1、使用firedac导入excel表,需要access database驱动,不要使用2007,一定要使用2010,否则你将有很多麻烦不能解决。会提示数据类型不匹配。

2、FDBatchMove的read和write语句,text,dataset,sql三个语句可以混用,不一定必须成双成对。

3、使用FDBatchMoveSQL的Reader和writer语句时,read的语句中的字段如果和write的字段不一致,必须as成一致的字段,write语句中的字段必须和数据表的字段一致,即使使用:变量时,这个变量也必须一致,否则提示主键未定义。

4、读写语句中,你可以任意使用sql的标准函数,但须遵守上述的条件。

5、字段中如果需要日期的读入,最好使用Format+FormatDateTime读入,否则会提示数据类型不匹配。

6、有时候提示string数据类型不能转换为cerrency类型,这是Excel表中的数据类型异常导致的,把需要的列用分列做一次常规赋值(用单元格格式不起作用),什么也不要动作,直接下一步完成即可,保存后就正常了。

其他的你可以随意发挥。

举个特别的例子,excel->sql,姓名是sql表的主键,excel表中没有姓名字段,只有编号,但sql的表中有对应关系:

ReadSQL=select 分值 as 业务量,编号 as 姓名 from [A表$]

WriteSQL=update 计算表 set 业务量=:业务量 where 姓名=(select 姓名 from 计算表 where 编号=:姓名)

不用质疑,就是这么奇葩的写法,如果不这样转换,就会提示主键没有定义的错误。

20250106补充:有时候提示数据类型不匹配,也可能是excel表的格式问题,解决方法:哪一列的数读不出,就选定那一列,然后点击分列,直接点击完成即可。

20250107补充:如果在导入excel表之前需要处理一下表的格式问题,比如字段带有空格,则使用adoconnection+adoquery可以查询和修改的操作,速度还可以。而是用fdconnection+fdquery则不行。反正我测试了很多次都不行。有可以的大佬请指教一下。

为什么不用txlsreadwrute控件?因为我发现一个问题,read后修改单元格再write后,如果表中带有透视图等内容,则再用ado或fd就打不开,提示数据格式错误(大概是这个意思,忘记了),还要打开一次excel表,保存一下才能使用(我猜是因为原表变更导致透视图不能更新导致,目前还没有找到解决的方法,刷新一下也不行),很不方便。不带透视图的表更新后没有此问题。有解决方法的大佬请指教一下。

相关推荐
秋天之落叶17 天前
备忘一个FDBatchMove数据转存的问题
fdbatchmove