Visual Fox Pro在PHP中的查询连接错误 - odbc_exec

时间:2013-10-20 04:07:07

标签: php sql odbc foxpro visual-foxpro

我用php编写了这个查询:

<?php
$dsn="sistema";
$usuario="";
$clave="";
/*conexion mediante odbc*/
$cid=odbc_connect($dsn, $usuario, $clave);
if (!$cid){
exit("<strong>Ya ocurrido un error tratando de conectarse con el origen de datos.  </strong>");
}
$sql="SELECT SUM(Document.docimp) AS sumar FROM Document WHERE Doctpo IN ('1','6','7') AND Document.Abocod = 1";
$sql1="SELECT SUM(Document.docimp) AS restar FROM Document WHERE Doctpo IN ('2','3') AND Document.Abocod = 1";
$sql3="Select (A.sumar - A.restar) AS Saldo; 
From (;
Select Document.abocod,;
      (SELECT SUM(Document.docimp) AS sumar;
    FROM Document; 
    WHERE Doctpo IN ('1','6','7'); 
        AND Document.Abocod = 1;
    ),;
    (SELECT SUM(Document.docimp) AS restar ;
    FROM Document; 
    WHERE Doctpo IN ('2','3'); 
        AND Document.Abocod = 1;
    );
From; Document;
Where Document.abocod = 1;
GROUP BY Document.abocod;
)AS A";
$result=odbc_exec($cid,$sql)or die(exit("Error en odbc_exec"));
print odbc_result_all($result,"Border=1"););
?>

sql从Document表中获取,来自Doctpo字段的所有类型为1,6和7的文件,执行sum字段中的Docimp,按订户号过滤(abocod )等于1并将结果与​​其名称(别名)放在一起。

sql1功能与sql相同,但这是客户付款,使用与上述相同的字段,但只选择类型2和3。

sql3是在单个查询中加入sqlsql1的查询,并执行sql和{{1}分别生成的所有函数}。

当我将它们运行到visual fox pro中时,查询(SQL)工作正常,但是当我从php执行它们时,sql1sql可以正常工作,但它始终会抛出{{1}的错误声明。说该表未被识别或不存在。

我无法弄清楚它是如何无法与这些表进行连接的,如果这对Visual foxpro本身完全有效。

我想知道php,odbc和visual fox pro是否有'更清洁'或'更好'的方法。

任何人都能对此有所了解吗?

提前致谢!

1 个答案:

答案 0 :(得分:1)

如何直接运行查询而不是两个单独的,然后加入...像

这样的东西
select
      sum( 0000.00 + iif( Doctpo in ( '1', '6', '7' ), Document.docimp, 0 )) as Sumar,
      sum( 0000.00 + iif( Doctpo in ( '2', '3' ), Document.docimp, 0 )) as Restar,
      sum( Document.docimp * iif( Doctpo in ( '1', '6', '7' ), 1, -1 )) as Saldo
   from
      FROM Document; 
   WHERE 
          Document.Abocod = 1;
      AND Doctpo IN ('1','6','7', '2', '3'); 

我正在做0000.00 + IIF()的总和,因为从VFP查询返回的第一个值是最终集中该列类型的基础。因此,如果您希望任何余额超过9999.99,您可能需要根据需要调整默认长度/精度。