FDbatchmove使用SQL语句的问题

秋天之落叶 2024-12-20 17:03:51

使用fdbatchmove的sql,导入excel表到mssql表,在写read语句时,里面所用到的函数遵循什么规则?

我试了试,既不是sql规则,也不是vba规则,还不是delphi规则,有点蒙。

比如TAB键值要使用chr(9)使用char(9)就错误,可以使用trim而ltrim就提示错误,可以使用replace而使用sunstring就错误。

好像sql+vba+delphi合集里挑挑拣拣的几个函数可以使用。

有知道的大佬指点一下吗?

...全文
441 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
秋天之落叶 2025-01-04
  • 打赏
  • 举报
回复

结贴:使用acess驱动2010就行

秋天之落叶 2024-12-22
  • 打赏
  • 举报
回复

测试了很多次,对FDbatchmove有了一点点的认识:
1、FDBatchMoveSQLReader1.ReadSQL。read excel表,如果在这里写规则,可以使用trim()chr(),且必须FDBatchMove1.Options - [poSkipUnmatchedDestFields],否则系统认为找不到字段名,而且你用 AS 字段名,就提示错误。
2、FDBatchMoveSQLWriter1.WriteSQL。write masql table,规则最好是写在这里 函数(:变量),不易出错,且符合mssql的内置函数使用规则ltrim()char()。
以上两句使用sql的规则完全不同,真是懵逼。

秋天之落叶 2024-12-22
  • 举报
回复
@秋天之落叶 1列举的函数在2不可用,2列举的函数在1也不可用,神奇
  • 举报
回复
@秋天之落叶 2是writer呀,是操作目标数据库的,你用的是ms sql server,所以它的一套东西当然可以用。DelphiSQL组件并不检查SQL语法是否合规,只检查参数、宏之类的,SQL是传给数据库的客户端,或者直接传给server(如果支持passthrough模式的话)。
  • 举报
回复
@日立奔腾浪潮微软松下联想 但是chr、trim这些标准SQL内置函数在2不能用确实有点费解,按说ms sql server也应该支持(绝大多数)标准SQL的特性+自己的扩展。
1条回复
秋天之落叶 2024-12-22
  • 打赏
  • 举报
回复

update 表 set 名称=:名称 where 工资编号=right(''00'' + :工资编号,4)
这样就可以,惊奇不惊奇,我去

秋天之落叶 2024-12-22
  • 打赏
  • 举报
回复

是不是我对标准SQL理解不到位:excel-->mssql中,excel表中的工资编号为17,mssql中为0017,为了使用sql的dmupdate:
能显示正确的0017。但在FDbatchmove中使用sql语句
FDBatchMoveSQLReader1.ReadSQL :='select right(''000''+cast(工资编号 as nvarchar),4) from [Sheet1$];
就提示语法错误 (操作符丢失) 在查询表达式 'right('000'+cast(工资编号 as nvarchar),4)' 中错误
我在sql中测试:select right('000'+cast(工资编号 as nvarchar),4) from OpenRowSet('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0;HDR=Yes;IMEX=1;Database=D:\test.xlsx', 'select * from [Sheet1$]') 就没有问题。
试过了concat,&,CONVERT,+等均不得要领,懵逼中
请大佬指教!

  • 打赏
  • 举报
回复

chr()、trim()、replace()是标准SQL的内置函数,char()、ltrim()、substring()是ms sql server的非标准函数~

秋天之落叶 2024-12-20
  • 举报
回复
@日立奔腾浪潮微软松下联想 明白了,谢谢

5,941

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧