首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

sql的绑定及动态传送参数

2012-08-02 
sql的绑定及动态传递参数:一:这个是进行绑定的函数的定义,[codeC/C++][/code]void prDatStf( BINDAT *bin

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
好了,如果还不明白 那么我我也没办法了。

热点排行