1,072
社区成员
发帖
与我相关
我的任务
分享
这么写 string ls_Dbsn, ls_field_bh, ls_dbname DECLARE my_cursor DYNAMIC CURSOR FOR SQLSA ; PREPARE SQLSA FROM "select max(" + ls_field_bh + ") from " + ls_dbname; OPEN DYNAMIC my_cursor ; FETCH my_cursor INTO :ls_Dbsn ; CLOSE my_cursor ;
public function integer uf_selectinto (string as_sql, ref any a_parm[]);string Stringvar, Sqlstatement
integer i,Intvar,li_NumOutputs
Long LongVar
Sqlstatement = as_sql
PREPARE SQLSA FROM :Sqlstatement ;
if sqlca.sqlcode=-1 then goto e
DESCRIBE SQLSA INTO SQLDA ;
if sqlca.sqlcode=-1 then goto e
DECLARE my_cursor DYNAMIC CURSOR FOR SQLSA ;
if sqlca.sqlcode=-1 then goto e
OPEN DYNAMIC my_cursor USING DESCRIPTOR SQLDA ;
if sqlca.sqlcode=-1 then goto e
FETCH my_cursor USING DESCRIPTOR SQLDA ;
if sqlca.sqlcode=-1 then goto e
li_NumOutputs=SQLDA.NumOutputs
for i=1 to li_NumOutputs
CHOOSE CASE SQLDA.OutParmType[i]
CASE TypeString!
Stringvar = GetDynamicString(SQLDA, i)
a_parm[i]=Stringvar
CASE TypeInteger!,TypeLong!,TypeByte!,TypeUInt!,TypeUInt!,TypeULong!
Intvar = GetDynamicNumber(SQLDA, i)
a_parm[i]=Intvar
CASE TypeLongLong!,TypeDecimal!,TypeReal!,TypeDouble!
Longvar = GetDynamicDecimal(SQLDA, i)
a_parm[i]=Longvar
case Typedate!
a_parm[i]=GetDynamicDate (SQLDA, i)
case typedatetime!
a_parm[i]=GetDynamicDateTime (SQLDA, i)
case typetime!
a_parm[i]=GetDynamicTime(SQLDA, i)
END CHOOSE
next
CLOSE my_cursor ;
if sqlca.sqlcode=-1 then goto e
return li_NumOutputs
e:
return -1
end function
PREPARE SQLSA FROM "select max(field_bh) from dbname" ;
field_bh 和dbname好像不起作用(用引号引起来以后),我用messagebox读:ls_Dbsn ,结果是空白的
[quote=引用 楼主 jiang396 的回复:] 有个函数,需要使用动态sql语句,如下,其中field_bh,ls_Dbsn,dbname都是参数化的。请问应该怎么写? select max(field_bh) into :ls_Dbsn from dbname;
有个函数,需要使用动态sql语句,如下,其中field_bh,ls_Dbsn,dbname都是参数化的。请问应该怎么写? select max(field_bh) into :ls_Dbsn from dbname;
public function integer uf_selectinto (string as_sql, ref any a_parm[]);string Stringvar, Sqlstatement integer i,Intvar,li_NumOutputs Long LongVar Sqlstatement = as_sql PREPARE SQLSA FROM :Sqlstatement ; if sqlca.sqlcode=-1 then goto e DESCRIBE SQLSA INTO SQLDA ; if sqlca.sqlcode=-1 then goto e DECLARE my_cursor DYNAMIC CURSOR FOR SQLSA ; if sqlca.sqlcode=-1 then goto e OPEN DYNAMIC my_cursor USING DESCRIPTOR SQLDA ; if sqlca.sqlcode=-1 then goto e FETCH my_cursor USING DESCRIPTOR SQLDA ; if sqlca.sqlcode=-1 then goto e li_NumOutputs=SQLDA.NumOutputs for i=1 to li_NumOutputs CHOOSE CASE SQLDA.OutParmType[i] CASE TypeString! Stringvar = GetDynamicString(SQLDA, i) a_parm[i]=Stringvar CASE TypeInteger!,TypeLong!,TypeByte!,TypeUInt!,TypeUInt!,TypeULong! Intvar = GetDynamicNumber(SQLDA, i) a_parm[i]=Intvar CASE TypeLongLong!,TypeDecimal!,TypeReal!,TypeDouble! Longvar = GetDynamicDecimal(SQLDA, i) a_parm[i]=Longvar case Typedate! a_parm[i]=GetDynamicDate (SQLDA, i) case typedatetime! a_parm[i]=GetDynamicDateTime (SQLDA, i) case typetime! a_parm[i]=GetDynamicTime(SQLDA, i) END CHOOSE next CLOSE my_cursor ; if sqlca.sqlcode=-1 then goto e return li_NumOutputs e: return -1 end function