求助:使用iFIX的ODBC功能时,系统报SQL语法错误! 点击:1596 | 回复:3



工工

    
  • 精华:0帖
  • 求助:0帖
  • 帖子:10帖 | 14回
  • 年度积分:0
  • 历史总积分:94
  • 注册:2002年5月30日
发表于:2002-06-01 14:26:00
楼主
请教一个问题:我在使用iFIX2.6的ODBC功能从iFIX的过程数据库取数据到自建的ACCESS关系数据库时,报警一览里面显示SQL的语法错误,“INSERT INTO 语句的语法错误”、“UPDATE 语句的语法错误”。我的INSERT INTO 和 UPDATE语句都是按照iFIX的电子书上的格式写成的,而且,我同时也使用了DELETE语句,可以成功地执行。不知道为什么不能用INSERT 和 UPDATE。我把我写在SQLLIB表格中的语句写在下面,请高手指点。谢谢!      INSERT INTO PROCESS_DATA (TAGNAME, DESCRIPTION, VALUE) VALUES (?, ?, ?);      UPDATE PROCESS_DATA SET TAGNAME = ?, VALUE = ? WHERE DESCRIPTION = ?; DELETE FROM PROCESS_DATA WHERE TAGNAME = ?; 其中PROCESS_DATA是与SQLLIB和SQLERR在同一数据库文件中的表格名,它有3个字段:TAGNAME(文本),DESCRIPTION(文本)和VALUE(数字)。在SQT块触发时,DELETE语句可以正常执行,但是INSERT INTO和UPDATE语句报语法错误,现百思不得其解,还望iFIX高手指点,多谢!



gongkongedit

  • 精华:1099帖
  • 求助:0帖
  • 帖子:14392帖 | 54470回
  • 年度积分:0
  • 历史总积分:622
  • 注册:2008年9月08日
发表于:2002-06-01 11:05:00
1楼
insert into table1(A1,A7,A3) values (?,?,?); Update table4 set d4=time(),d5=?,d7=? where d0=? and luh=?; iFIX对SQL语句要求非常苛刻,那怕是一个空格,我在使用中经常遇到这个问题,你只能耐心查了,注意一定要仔细。(以上是两句实例,已经测试过了) 我建议你以后使用SQL Server的存储过程,它有几大优点: 1、不用建立SQLLIB和SQLERR表,iFIX分析SQL语法; 2、一次触可以插入、更新的点数可以很多(我试验 过一次插入200个不同的点),如果你在ACCESS 中写SQL语句由于ACCESS的问题你一次插入不会 超过100点。 3、可以使用SQL Server强大功能来弥补用户对数据 库的苛刻要求。

工工

  • 精华:0帖
  • 求助:0帖
  • 帖子:10帖 | 14回
  • 年度积分:0
  • 历史总积分:94
  • 注册:2002年5月30日
发表于:2002-06-01 12:58:00
2楼
非常感谢你的帮助。我按照你的格式将SQL语句写入了SQLLIB表,但是iFIX还是报语法出错。真是搞不懂,看来只有自己一点点的试了。由于项目经费的关系,这次没有用SQL Sever,以后可能会尝试一下。

工工

  • 精华:0帖
  • 求助:0帖
  • 帖子:10帖 | 14回
  • 年度积分:0
  • 历史总积分:94
  • 注册:2002年5月30日
发表于:2002-06-01 14:26:00
3楼
我试出来了! 首先,我将INSERT语句中参数之间的空格都去掉,然后iFIX还是报语法错。于是我开始修改PROCESS_DATA表中的字段名。我将原来的“TAGNAME”,“DESCRIPTION”和“VALUE”改成了“TAG”,“DESC”和“VAL”,但是语法错误依然存在。接着我又作了一个改动:将“DESC”改成了“DES”,结果INSERT语句成功地执行。 看来,在iFIX中使用SQL语句,所用的字段名不可超过3个字母。 最后成功的INSERT语句: insert into PROCESS_DATA(TAG,DES,VAL) VALUES (?,?,?); 在UPDATE语句中,也用了短字段名,也获得了成功。 最后成功的UPDATE语句: Update process_data set tag=?,VAL=? where DES=?; 在UPDATE语句中使用了小写的表格名和字段名,但是语句仍可正常执行,看来iFIX中的SQL对字母的大小写不是很敏感。

热门招聘
相关主题

官方公众号

智造工程师