标题:Execscript sql 问题
取消只看楼主
lgp740401_72
Rank: 1
等 级:新手上路
帖 子:48
专家分:0
注 册:2014-4-17
结帖率:100%
已结贴  问题点数:20 回复次数:6 
Execscript sql 问题
在sql中运行:SELECT cast(thick AS char(10)) as 厚度 FROM tb_中板仓库_b WHERE (jlsjh_tb_生产跟踪表 IN (SELECT jlsjh FROM Tb_细木板跟踪表 WHERE (RTRIM(LTRIM(单据编号)) ='xmgzb'+CAST(YEAR(GETDATE()) AS varchar(4))+RIGHT('0'+CAST(MONTH(GETDATE()) AS varchar(2)),2)))),可以运行,没有错!
用Execscript()没有问题
             SELECT cast(thick*venthick*2-1 AS char(10)) as 厚度 FROM tb_中板仓库_b WHERE (jlsjh_tb_生产跟踪表 IN (SELECT jlsjh FROM Tb_细木板跟踪表 WHERE (RTRIM(LTRIM(单据编号)) ='xmgzb'+CAST(YEAR(GETDATE()) AS varchar(4))+RIGHT('0'+CAST(MONTH(GETDATE()) AS varchar(2)),2)))),也可以运行,也没有错!
但在:Execscript()出错了?大侠们知道怎么回事?
搜索更多相关主题的帖子: 仓库 
2014-05-30 18:52
lgp740401_72
Rank: 1
等 级:新手上路
帖 子:48
专家分:0
注 册:2014-4-17
得分:0 
对啊
2014-05-30 20:20
lgp740401_72
Rank: 1
等 级:新手上路
帖 子:48
专家分:0
注 册:2014-4-17
得分:0 
回复 2 楼 sdta
是的
Execscript sql 问题
在sql中窗口运行:SELECT cast(thick AS char(10)) as 厚度 FROM tb_中板仓库_b WHERE (jlsjh_tb_生产跟踪表 IN (SELECT jlsjh FROM Tb_细木板跟踪表 WHERE (RTRIM(LTRIM(单据编号)) ='xmgzb'+CAST(YEAR(GETDATE()) AS varchar(4))+RIGHT('0'+CAST(MONTH(GETDATE()) AS varchar(2)),2)))),可以运行,没有错!
再让程序在Execscript()运行没有问题!
在sql中窗口运行: SELECT cast(thick+venthick*2-1 AS char(10)) as 厚度 FROM tb_中板仓库_b WHERE (jlsjh_tb_生产跟踪表 IN (SELECT jlsjh FROM Tb_细木板跟踪表 WHERE (RTRIM(LTRIM(单据编号)) ='xmgzb'+CAST(YEAR(GETDATE()) AS varchar(4))+RIGHT('0'+CAST(MONTH(GETDATE()) AS varchar(2)),2)))),也可以运行,也没有错!
但在让程序在Execscript()运行出错了?大侠们知道怎么回事?

[ 本帖最后由 lgp740401_72 于 2014-5-30 21:54 编辑 ]
2014-05-30 20:22
lgp740401_72
Rank: 1
等 级:新手上路
帖 子:48
专家分:0
注 册:2014-4-17
得分:0 
以下是引用tlliqi在2014-5-30 23:15:26的发言:

你这select语句不像是vfp能运行的代码啊
误会了,我是在vfp通过Execscript调用下面语句执行sql
2014-06-01 14:15
lgp740401_72
Rank: 1
等 级:新手上路
帖 子:48
专家分:0
注 册:2014-4-17
得分:0 
以下是引用sdta在2014-5-31 00:56:16的发言:

SELECT cast(thick*venthick*2-1 AS char(10)) as 厚度 FROM tb_中板仓库_b WHERE (jlsjh_tb_生产跟踪表 IN (SELECT jlsjh FROM Tb_细木板跟踪表 WHERE (RTRIM(LTRIM(单据编号)) ='xmgzb'+CAST(YEAR(GETDATE()) AS varchar(4))+RIGHT('0'+CAST(MONTH(GETDATE()) AS varchar(2)),2))))

如果是VFP代码,红字处应该是 字段名 ,从代码中看, 红字 应该是数据表名称
Tb_细木板跟踪表是表名,其实就是只有选择的字段区别啦,第一个是表中已存在的THICK数值型字段,直接用CAST转换做组合框的数据源,另一个是利用表中已存在的THICK和VENTHICK经过计算(thick*venthick*2-1)后产生的新字段用CAST转换做组合框的数据源,我直接在SQL窗体运行这句又没问题

[ 本帖最后由 lgp740401_72 于 2014-6-1 14:22 编辑 ]
2014-06-01 14:15
lgp740401_72
Rank: 1
等 级:新手上路
帖 子:48
专家分:0
注 册:2014-4-17
得分:0 
以下是引用liuxingang28在2014-6-1 16:44:40的发言:

用 ExecScript() 执行 SQL 语句?我还是第一次碰到。楼主是不是把 SQLEXEC()函数与 EXECSCRIPT()函数混淆了?
如果在 SQL Server 上运行没有问题,则采用如下语句肯定也是没有问题的:

cSql = "SELECT cast(thick AS char(10)) as 厚度 FROM tb_中板仓库_b WHERE (jlsjh_tb_生产跟踪表 IN (SELECT jlsjh FROM Tb_细木板跟踪表 WHERE (RTRIM(LTRIM(单据编号)) ='xmgzb'+CAST(YEAR(GETDATE()) AS varchar(4))+RIGHT('0'+CAST(MONTH(GETDATE()) AS varchar(2)),2))))"
IF SQLEXEC(gnHandle,cSql,'curRet') > 0
    BROWSE
ENDIF
我不是说过了:这没有问题,是select thick+venthick*2-1 AS char(10)) as 厚度,后提示出错了.SQLEXEC()函数与 EXECSCRIPT()函数当然不能混淆了,
lcsql="if tb_生产任务单.类别='中板'
          othisform.sql.sqlexec("SELECT cast(thick AS char(10)) as 厚度 FROM tb_中板仓库_b WHERE (jlsjh_tb_生产跟踪表 IN (SELECT jlsjh FROM Tb_细木板跟踪表 WHERE (RTRIM(LTRIM(单据编号)) ='xmgzb'+CAST(YEAR(GETDATE()) AS varchar(4))+RIGHT('0'+CAST(MONTH(GETDATE()) AS varchar(2)),2))))","v_厚度"
        else
         othisform.sql.sqlexec("select thick+venthick*2-1 AS char(10)) as 厚度 FROM tb_中板仓库_b WHERE (jlsjh_tb_生产跟踪表 IN (SELECT jlsjh FROM Tb_细木板跟踪表 WHERE (RTRIM(LTRIM(单据编号)) ='xmgzb'+CAST(YEAR(GETDATE()) AS varchar(4))+RIGHT('0'+CAST(MONTH(GETDATE()) AS varchar(2)),2))))","v_厚度"
endif
...."

在VFP中执行
...
othisform=thisform
try
   EXECSCRIPT(lcsql)
   catch
   ...
endtry
....
提示出错了,问题已经一句句查清楚了,就是thick+venthick*2-1 AS char(10)) as 厚度,这句有问题?我说清楚了吗?我用cast(thick AS char(10)) as 厚度替换,正确,没有问题.

[ 本帖最后由 lgp740401_72 于 2014-6-2 10:51 编辑 ]
2014-06-02 10:46
lgp740401_72
Rank: 1
等 级:新手上路
帖 子:48
专家分:0
注 册:2014-4-17
得分:0 
哎,终于说清楚了,其实我第一次发时已经加了cast 看一楼,只是回复多了,我一直强调是改这这个计算字段后提示出错了,导致这样的错误。venthick 是数值型字段。但就是遇到了:select cast(thick+venthick*2-1 as char(10) as 厚度...”就报错,因加了try...endtry,运行到ELSE select cast(thick+venthick*2-1 as char(10) as 厚度...直接运行catch语句了.
版主的建议很好,我大约明白了:
1、我是初学者,对存储过程编辑还不太会。所以。。。
2、我这样编辑的用意:我把这段程序编辑在表grid的字段lostfocus属性中(让其一加载本表格,就会把这段程序当变量值加载了,当特定的字段值编辑lostfocus后就会运行这段),若这段程序有点改动,只需在任意一台客户端就可修改,纯属方便修改。若是存储过程还得回服务器修改。
这段程序让我搞了两三天,没法让它不出错,我现在只能在原表增加一个字段sumthick,让它的值=(thick+venthick*2-1),然后再用了:


[ 本帖最后由 lgp740401_72 于 2014-6-2 23:30 编辑 ]
2014-06-02 23:05



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-432291-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.446054 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved