2012-03-28 107 views
0

我不知道它的官方名称是什么所以也许这就是为什么我不能找到任何东西在线。 基本上,当你在vfp中使用sql时,它会在不移动记录光标或保存结果的情况下进行初始传递(有时是2?)。 不幸的是我有我的sql中的子例程运行,并在最初的传递过程中改变的东西。VFP SQL预测

为什么我在sql查询中使用子例程?因为vfp不支持在选择项目内的子查询之外引用(我再次不知道正式名称)。

实施例:select id, (select detail.name from detail where master.id == detail.id) name from master

这并不工作,但:select id, getname(id) from master

其中getname()是含有从第一示例中的SQL的子程序。

你也可以使用连接,但上面只是一个例子,连接在我的情况下不起作用。

有什么办法来处理初始通过? vfp是否创建了一个像firstpass之类的布尔值?我想我可以添加一个计数到我的子程序中,但似乎比现在更加混乱。

另外有人可以解释或链接我对vfp的初步通行证的解释?我相信这只是做了一次最初的通过,但现在它在更改一些代码之后做了两次。

编辑:好吧,我错了。上面的例子确实有效。不起作用的是:
SELECT d2.id, (SELECT TOP 1 d1.lname l FROM dpadd d1 WHERE d1.id== d2.id ORDER BY l) FROM dpadd d2
它给了我一个“SQL:此类型的查询不受支持”错误。
奇怪的是,如果我做了以下工作原理:
SELECT d2.id, (SELECT COUNT(d1.lname) FROM dpadd d1 WHERE d1.id == d2.id) FROM dpadd d2

关于子程序,他们是我的形式的方法。数据库是本地.dbf文件。我没有与任何服务器进行交互,只需使用into cursor子句直接运行sql命令,然后生成报告(通常)。

我会在几分钟内回复一个实际有用的select语句,“不支持”。我相信你已经注意到top 1这个例子完全没用。

+0

说明... GetName()是本地VFP方面的函数吗?或者它是连接到的SQL Server中的存储过程。另外,你能展示你想要实际做什么吗? VFP Deos支持对SQL Server进行复杂的子查询调用,甚至可以使用本地变量进行参数化查询,而无需更改要通过SQLPrepare()或SQLExec()执行的SQL字符串。 – DRapp 2012-03-28 16:38:51

回答

0

看起来TOP在预测中是不被允许的。对于这个例子,你可以这样做:

SELECT d2.id, (SELECT MAX(d1.lname) l FROM dpadd d1 WHERE d1.id== d2.id) FROM dpadd d2 

还有什么会给你一个问题?

tamar