informix 诡异问题求助
如下面的程序段:int Location(char *pszCondition , struct CMSLocalInstInfo *pstCMSLOCALINSTINFO)
{
int idbs_SqlCode ;
EXEC SQL BEGIN DECLARE SECTION ;
char acCondition_l[ 1024 ];
struct EcCmsLocalInstInfo lstCmsLocalInstInfo;
EXEC SQL END DECLARE SECTION ;
memset( acCondition_l , 0 , sizeof(acCondition_l));
sprintf( acCondition_l , "SELECT * FROM %s WHERE %s FOR UPDATE " ,
"tablename", pszCondition );
EXEC SQL PREPARE s1_l FROM :acCondition_l;
if ( sqlca.sqlcode )
{
idbs_SqlCode = sqlca.sqlcode;
return idbs_SqlCode;
}
EXEC SQL DECLARE CMSLocalInstInfo_l_cur CURSOR FOR s1_l;
EXEC SQL OPEN CMSLocalInstInfo_l_cur ;
if ( sqlca.sqlcode )
{
idbs_SqlCode = sqlca.sqlcode;
return idbs_SqlCode;
}
EXEC SQL FETCH CMSLocalInstInfo_l_cur INTO :lstCmsLocalInstInfo; ;
if ( sqlca.sqlcode && sqlca.sqlcode != SQLNOTFOUND )
{
idbs_SqlCode = sqlca.sqlcode;
EXEC SQL CLOSECMSLocalInstInfo_l_cur;
return idbs_SqlCode;
}
if ( CMSSQLCODE == SQLNOTFOUND )
{
idbs_SqlCode = sqlca.sqlcode;
EXEC SQL CLOSECMSLocalInstInfo_l_cur;
return idbs_SqlCode;
}
}
int Update(struct CMSLocalInstInfo *pstCMSLOCALINSTINFO)
{
int idbs_SqlCode ;
EXEC SQL BEGIN DECLARE SECTION ;
char acCondition_l[ 1024 ];
struct EcCmsLocalInstInfo lstCmsLocalInstInfo;
EXEC SQL END DECLARE SECTION ;
memcpy ((char *)&lstCmsLocalInstInfo , (char *)pstCMSLOCALINSTINFO,sizeof(CMSLocalInstInfo))
EXEC SQL UPDATE CMSLOCALINSTINFO SET * = :lstCmsLocalInstInfo
WHERE CURRENT of CMSLocalInstInfo_l_cur ;
return sqlca.sqlcode
}
调用顺序为 beginwork-->Location(...) --> Update(...)-->commitwork;
多数都跑得好好的没问题,但偶尔报259或266错,实在查不出来了,请高手帮忙分析下是什么原因?谢谢! 你的调用序列也给出来。最好贴出完整的代码。这段看不出来。 调用序列上面已经列出来了:
调用顺序为 beginwork-->Location(...) --> Update(...)-->commitwork;
源代码太长了,贴出来估计看得更晕。 用附件吧。 然后你给出,错误是在哪个点报出来的。 做了个时程序试 了试,在open失败时fetch会报259 , fetch失败做update会报266.但问题是,上面的程序在open时没报错,update前的fetch也没报错。 这段代码没有办法看出来问题。
挑个无关的吧。
int Update(
exec sql begin declare section;
parameter struct CMSLocalInstInfo *pstCMSLOCALINSTINFO
exec sql end declare section;
)
{
EXEC SQL UPDATE CMSLOCALINSTINFO SET * = :pstCMSLOCALINSTINFO
WHERE CURRENT of CMSLocalInstInfo_l_cur ;
return sqlca.sqlcode
}
何必来回memcpy? 诶呀,不愿意贴附件。我走咯。 我晕、完整的源程序只有我贴出的这一块在操作数据库,贴出来何用?
回复 #7 ivhb 的帖子
不是所有的嵌入式语言都支持你这种写法,我这样是考虑移植的方便性。
页:
[1]