sql的绑定及动态传递参数:
一:这个是进行绑定的函数的定义,
[code=C/C++][/code]
void prDatStf( BINDAT *bins, ... )
{
#ifdef ENTERPRISE_RELEASE
register BINDAT *bp;
register va_list ap;
#else
BINDAT *bp;
va_list ap;
#endif
va_start( ap, bins );
for (bp = bins;; bp++) {
if (bp->type = va_arg( ap, int )) {
bp->buffer = va_arg( ap, void* );
bp->length = va_arg( ap, long* );
}
else break;
}
va_end( ap );
}
二:下面是使用:
[code=C/C++][/code]
prDatStf( bindat,
PRS_STRING, (void*) abuf.Name, (long*) 0,
PRS_STRING, (void*) abuf.Project, (long*) 0,
PRS_LONG, (void*) &abuf.Version, (long*) 0,
PRS_STRING, (void*) abuf.OldName, (long*) 0,
PRS_END );
三,下面是动态的传递参数:
[code=C/C++][/code]
prSQL( "UPDATE AV_RELN SET PRED = : 1 "
"WHERE PROJ = :2 AND VER = :3 AND PRED = :4",
0, bindat, ActNameChange, &abuf, (void (*) (void*)) 0,
0, 0, DisplayMessage );
求解1:这种绑定是怎么进行的呢?半天没有看懂
求解2:这种绑定之后是不是所以的使用是不是都要传递,2,3,4这几个占位符?我只传递2,3就报错了。
不胜感激!!!
[解决办法]
auto BINDAT bindat[5];
acbuf.list = List;
/* Delete Activity Comments */
acbuf.key = 8;
prDatStf( bindat,
PRS_STRING, (void*) acbuf.Project, (long*) 0,
PRS_LONG, (void*) &acbuf.Version, (long*) 0,
PRS_STRING, (void*) acbuf.Name, (long*) 0,
PRS_END );
在给你说简单点 ,上面这段代码执行后那么bindat[0].type=PRS_STRING,bindat[0].buffer= (void*)acbuf
bindat[0].length=(long*)0,bindat[1].type=PRS_LONG,bindat[1].buffer=(void*)&acbbuf.Version,
bindat[1].length=(long*)0
好了,如果还不明白 那么我我也没办法了。