动态SQL的奇怪问题
侠雨飞飞 2006-12-21 07:49:43 以下是核心代码
PREPARE SQLSA FROM :Sqlstatement ;
DESCRIBE SQLSA INTO SQLDA ;
DECLARE my_cursor DYNAMIC CURSOR FOR SQLSA ;
OPEN DYNAMIC my_cursor USING DESCRIPTOR SQLDA ;
do while true
FETCH my_cursor USING DESCRIPTOR SQLDA ;
if sqlca.sqlcode<>0 then
exit
end if
row=dw_2.insertrow(0)
// 显示当前插入的行数
w_wait.st_row.text=string(row)
//循环列
for i=1 to li_count
CHOOSE CASE SQLDA.OutParmType[i]
CASE TypeString! //ok
//messagebox('','TypeString')
Stringvar = GetDynamicString(SQLDA, i)
dw_2.setitem(row,i,stringvar)
case typedouble! //ok
doublevar = GetDynamicNumber(SQLDA, i)
//dw_2.setitem(row,i,doublevar)
case typedate! //ok
//messagebox('','typedate')
datevar=GetDynamicDate(sqlda,i)
//dw_2.setitem(row,i,datevar)
case typedatetime! //ok
//messagebox('','typedatetime')
datetimevar=GetDynamicDateTime(sqlda,i)
//dw_2.setitem(row,i,datetimevar)
case typelong! //常数被sqlserver识别为long型 //ok
longvar = GetDynamicNumber(SQLDA, i)
//dw_2.setitem(row,i,longvar)
case else
messagebox('警告','有无法识别数据格式,请联系程序开发人员')
exit
// CASE typeinteger!
// intvar =integer(GetDynamicNumber(SQLDA, i))
//
// dw_2.setitem(row,i,intvar)
// case typedecimal!
// decvar = GetDynamicNumber(SQLDA, i)
// case typereal!//,typeboolean!
//
// realvar = GetDynamicNumber(SQLDA, i)
// //decvar=round(decvar,2)
END CHOOSE
next
loop
CLOSE my_cursor ;
//-----------------------------------------------------------
上面这个动态SQL就是根据一个 select 语句产生结果集,然后,循环将每一行每一列插入到一个数据窗口对象中
现在的问题是,执行时,游标循环取了几百次后,系统就没有反应了
若将CHOOSE CASE SQLDA.OutParmType[i]里面的内容都注释掉
系统正常
我也单步执行过了
源数据就四种类型
TypeString! typedouble! typedatetime! typelong!
而且我也查过,源数据不存在为空的情况
但是为何循环一定次数就没有反应了呢,正常情况应该不断显示变化的行号
这个结果集有6万多条数据,偶尔也循环成功过(局部代码变化)