niec2003 发表于 2007-10-19 16:46

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错,实在查不出来了,请高手帮忙分析下是什么原因?谢谢!

ivhb 发表于 2007-10-19 18:57

你的调用序列也给出来。最好贴出完整的代码。这段看不出来。

niec2003 发表于 2007-10-19 19:03

调用序列上面已经列出来了:
调用顺序为 beginwork-->Location(...) --> Update(...)-->commitwork;

源代码太长了,贴出来估计看得更晕。

ivhb 发表于 2007-10-19 19:10

用附件吧。

ivhb 发表于 2007-10-19 19:11

然后你给出,错误是在哪个点报出来的。

niec2003 发表于 2007-10-19 19:25

做了个时程序试 了试,在open失败时fetch会报259 , fetch失败做update会报266.但问题是,上面的程序在open时没报错,update前的fetch也没报错。

ivhb 发表于 2007-10-19 19:35

这段代码没有办法看出来问题。

挑个无关的吧。
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?

ivhb 发表于 2007-10-19 19:36

诶呀,不愿意贴附件。我走咯。

niec2003 发表于 2007-10-19 19:40

我晕、完整的源程序只有我贴出的这一块在操作数据库,贴出来何用?

niec2003 发表于 2007-10-19 19:53

回复 #7 ivhb 的帖子

不是所有的嵌入式语言都支持你这种写法,我这样是考虑移植的方便性。
页: [1]
查看完整版本: informix 诡异问题求助