存储过程
程序运行提示:select error 尝试启动新的sqlserver操作,结果未决
我的代码如下:
DECLARE sp1 PROCEDURE FOR sp_sale_new
@ld_start = "2000-1-3",
@ld_end = "2010-1-1",
@clnt_cd = "dly",
@areaid = "",
@trade = "",
@saler = "",
@gdy = "",
@keyno = "",
@cmdtync = "",
@cdcode = "";
execute sp1;
do while i = 0
fetch sp1 into :cdcode,:cmdtync,:qty,:sale_u_p,:amt,:clnt_cd,:input_d,:keyno,:areaid,:trade,:saler,:gdy;
i = sqlca.sqlcode
if i = 0 then
if isnull(areaid) then areaid = ""
if isnull(trade) then trade = ""
if isnull(saler) then saler = ""
if isnull(gdy) then gdy = ""
ll_row = w_xmain.dw_show.insertrow(0)
w_xmain.dw_show.object.cdcode[ll_row] = cdcode
w_xmain.dw_show.object.cmdtync[ll_row] = cmdtync
w_xmain.dw_show.object.qty[ll_row] = qty
w_xmain.dw_show.object.sale_u_p[ll_row] = sale_u_p
w_xmain.dw_show.object.clnt_cd[ll_row] = clnt_cd
w_xmain.dw_show.object.input_d[ll_row] = string(input_d,"yyyy-mm-dd")
w_xmain.dw_show.object.keyno[ll_row] = keyno
w_xmain.dw_show.object.area[ll_row] = areaid
w_xmain.dw_show.object.trade[ll_row] = trade
w_xmain.dw_show.object.saler[ll_row] = saler
w_xmain.dw_show.object.gdy[ll_row] = gdy
end if
loop
close sp1;
存储过程如下:
ALTER PROCEDURE [dbo].[sp_sale_new] @clnt_cd char(10),@ld_start varchar(10) , @ld_end varchar(10)
,@areaid char(10),@trade char(10),@saler char(10),@gdy char(10),@keyno char(15),@cmdtync char(30),@cdcode char(15)
AS
--declare @ld_start varchar(10) , @ld_end varchar(10),@clnt_cd varchar(10),@areaid varchar(10),@trade varchar(10),@saler varchar(10),@gdy varchar(10),@keyno varchar(15),@cmdtync varchar(30),@cdcode varchar(15)
--set @ld_start = '2009-1-13'
--set @ld_end = '2010-1-13'
--set @clnt_cd = 'dly'
--set @areaid = ''
--set @trade = ''
--set @saler = ''
--set @gdy = ''
--set @keyno = ''
--set @cmdtync = ''
--set @cdcode = ''
declare @sql varchar(8000),@where varchar(1000)
set @where = ' and cmdtyout.input_d >= ''' + @ld_start +''' and cmdtyout.input_d<=''' + @ld_end + ''' '
if @clnt_cd <> '' set @where =@where + ' and ( cmdtyout.clnt_cd = '''+ @clnt_cd +''' )'
if @areaid <> '' set @where =@where + ' and ( client.areaid = ''' + @areaid +''')'
if @trade <> '' set @where =@where + ' and ( client.trade = ''' + @trade +''' )'
if @saler <> '' set @where =@where + ' and ( client.saler = ''' + @saler +''' )'
if @gdy <> '' set @where =@where + ' and ( client.gdy = ''' + @gdy +''' )'
if @keyno <> '' set @where =@where + ' and ( cmdtyout.keyno = ''' + @keyno +''' )'
if @cmdtync <> '' set @where =@where + ' and ( cmdtyout_d.cmdtync = ''' + @cmdtync +''' )'
set @sql = 'SELECT cmdtyout_d.cdcode,cmdtyout_d.cmdtync, cmdtyout_d.qty, cmdtyout_d.sale_u_p, cmdtyout_d.amt, cmdtyout.clnt_cd,
cmdtyout.input_d, cmdtyout.keyno, client.areaid,client.trade, client.saler,client.gdy FROM cmdtyout,cmdtyout_d, client
WHERE ( cmdtyout.recno = cmdtyout_d.m_recno ) and
( cmdtyout.clnt_cd = client.clnt_cd )'+ @where
--print @sql
execute(@sql)
注释的地方是我测试的数据,都好用的,不知道哪出了问题
[解决办法]
在PB里吧赋值换成单引号试试
[解决办法]
--你的set @where = ' and cmdtyout.input_d >= ''' + @ld_start +''' and cmdtyout.input_d <=''' + @ld_end + ''' ' ----参考下set @where = ' and cmdtyout.input_d >= '+'''' + @ld_start +''''+' and cmdtyout.input_d <=' +''''+ @ld_end + ''''
[解决办法]
跟着大部队走。
[解决办法]
--这样行吗DECLARE sp1 PROCEDURE FOR @returnvalue = sp_sale_new @ld_start = "2000-1-3", @ld_end = "2010-1-1", @clnt_cd = "dly", @areaid = "", @trade = "", @saler = "", @gdy = "", @keyno = "", @cmdtync = "", @cdcode = ""; execute sp1;IF sqlca.sqlcode < 0 THEN messagebox(parent.title,string(sqlca.sqldbcode) + SQLCA.SQLERRTEXT,Exclamation!) CLOSE sp1; rollback using sqlca; returnelse fetch sp1 into :cdcode,:cmdtync,:qty,:sale_u_p,:amt,:clnt_cd,:input_d,:keyno,:areaid,:trade,:saler,:gdy; ........ close sp1; END IFCommit using sqlca;
[解决办法]
学习