Delphi 7 ADOQuery使用VFPOledb9时提示‘Function Name is Missing’原因排查
错误原因分析
这个错误是由于Microsoft ODBC Visual FoxPro Driver对标准SQL的相关子查询语法支持有限导致的,具体细节如下:
- Visual FoxPro(VFP)自身的UPDATE语法和标准SQL存在差异,VFP的ODBC驱动无法正确解析你代码中
SET saletodate = (SELECT sum(tot_rm_amt) ...)这种在SET子句里嵌套跨表相关子查询的写法,驱动在解析时误将子查询内的聚合逻辑判定为缺少函数名。 - 你测试的简单UPDATE语句
UPDATE ardata SET saletodate =0能正常执行,是因为它属于VFP驱动完全支持的基础UPDATE语法,没有涉及跨表关联的子查询逻辑。
如果要实现相同的更新需求,需要改用VFP驱动支持的UPDATE ... FROM ...关联语法,示例代码如下:
qry1.close; qry1.sql.clear; qry1.SQL.Text := 'UPDATE ardata SET saletodate = s.sum_amt ' + 'FROM ardata a ' + 'LEFT JOIN (SELECT short_name, SUM(tot_rm_amt) AS sum_amt FROM saledat GROUP BY short_name) s ' + 'ON a.short_name = s.short_name'; qry1.execsql;
内容的提问来源于stack exchange,提问作者CCH4BI
相关产品推荐
相关产品推荐

