现在有问题如下: 
error  C2043:  illegal  break          
if  (sqlca.sqlcode  ==  100)  break ; 
------------------------------------------------------------ 
程序代码如下(耐心点): 
出错语句. /* EXEC SQL SELECT COUNT(LoginID) into :ok from Teacher where LoginID=:logpwd; */ { 
  struct sqlexd sqlstm; 
  sqlstm.sqlvsn = 12; 
  sqlstm.arrsiz = 4; 
  sqlstm.sqladtp = &sqladt; 
  sqlstm.sqltdsp = &sqltds; 
  sqlstm.stmt = "select count(LoginID) into :b0  from Teacher where LoginID\ 
=:b1"; 
  sqlstm.iters = (unsigned int  )1; 
  sqlstm.offset = (unsigned int  )562; 
  sqlstm.selerr = (unsigned short)1; 
  sqlstm.cud = sqlcud0; 
  sqlstm.sqlest = (unsigned char  *)&sqlca; 
  sqlstm.sqlety = (unsigned short)256; 
  sqlstm.occurs = (unsigned int  )0; 
  sqlstm.sqhstv[0] = (        void  *)&ok; 
  sqlstm.sqhstl[0] = (unsigned int  )sizeof(int); 
  sqlstm.sqhsts[0] = (        int  )0; 
  sqlstm.sqindv[0] = (        void  *)0; 
  sqlstm.sqinds[0] = (        int  )0; 
  sqlstm.sqharm[0] = (unsigned int  )0; 
  sqlstm.sqadto[0] = (unsigned short )0; 
  sqlstm.sqtdso[0] = (unsigned short )0; 
  sqlstm.sqhstv[1] = (        void  *)logpwd; 
  sqlstm.sqhstl[1] = (unsigned int  )9; 
  sqlstm.sqhsts[1] = (        int  )0; 
  sqlstm.sqindv[1] = (        void  *)0; 
  sqlstm.sqinds[1] = (        int  )0; 
  sqlstm.sqharm[1] = (unsigned int  )0; 
  sqlstm.sqadto[1] = (unsigned short )0; 
  sqlstm.sqtdso[1] = (unsigned short )0; 
  sqlstm.sqphsv = sqlstm.sqhstv; 
  sqlstm.sqphsl = sqlstm.sqhstl; 
  sqlstm.sqphss = sqlstm.sqhsts; 
  sqlstm.sqpind = sqlstm.sqindv; 
  sqlstm.sqpins = sqlstm.sqinds; 
  sqlstm.sqparm = sqlstm.sqharm; 
  sqlstm.sqparc = sqlstm.sqharc; 
  sqlstm.sqpadto = sqlstm.sqadto; 
  sqlstm.sqptdso = sqlstm.sqtdso; 
  sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn); 
  if (sqlca.sqlcode == 100) break; //此为出错原因 
  if (sqlca.sqlcode < 0) sql_error(); 

------------------------------ 
正确语句: /* EXEC SQL CALL  teacher_pack.islogin_proc(:logpwd,:logname,:ok); */ { 
  struct sqlexd sqlstm; 
  sqlstm.sqlvsn = 12; 
  sqlstm.arrsiz = 4; 
  sqlstm.sqladtp = &sqladt; 
  sqlstm.sqltdsp = &sqltds; 
  sqlstm.stmt = "call teacher_pack.islogin_proc(:b0,:b1,:b2)"; 
  sqlstm.iters = (unsigned int  )1; 
  sqlstm.offset = (unsigned int  )562; 
  sqlstm.cud = sqlcud0; 
  sqlstm.sqlest = (unsigned char  *)&sqlca; 
  sqlstm.sqlety = (unsigned short)256; 
  sqlstm.occurs = (unsigned int  )0; 
  sqlstm.sqhstv[0] = (        void  *)logpwd; 
  sqlstm.sqhstl[0] = (unsigned int  )9; 
  sqlstm.sqhsts[0] = (        int  )0; 
  sqlstm.sqindv[0] = (        void  *)0; 
  sqlstm.sqinds[0] = (        int  )0; 
  sqlstm.sqharm[0] = (unsigned int  )0; 
  sqlstm.sqadto[0] = (unsigned short )0; 
  sqlstm.sqtdso[0] = (unsigned short )0; 
  sqlstm.sqhstv[1] = (        void  *)logname; 
  sqlstm.sqhstl[1] = (unsigned int  )9; 
  sqlstm.sqhsts[1] = (        int  )0; 
  sqlstm.sqindv[1] = (        void  *)0; 
  sqlstm.sqinds[1] = (        int  )0; 
  sqlstm.sqharm[1] = (unsigned int  )0; 
  sqlstm.sqadto[1] = (unsigned short )0; 
  sqlstm.sqtdso[1] = (unsigned short )0; 
  sqlstm.sqhstv[2] = (        void  *)&ok; 
  sqlstm.sqhstl[2] = (unsigned int  )sizeof(int); 
  sqlstm.sqhsts[2] = (        int  )0; 
  sqlstm.sqindv[2] = (        void  *)0; 
  sqlstm.sqinds[2] = (        int  )0; 
  sqlstm.sqharm[2] = (unsigned int  )0; 
  sqlstm.sqadto[2] = (unsigned short )0; 
  sqlstm.sqtdso[2] = (unsigned short )0; 
  sqlstm.sqphsv = sqlstm.sqhstv; 
  sqlstm.sqphsl = sqlstm.sqhstl; 
  sqlstm.sqphss = sqlstm.sqhsts; 
  sqlstm.sqpind = sqlstm.sqindv; 
  sqlstm.sqpins = sqlstm.sqinds; 
  sqlstm.sqparm = sqlstm.sqharm; 
  sqlstm.sqparc = sqlstm.sqharc; 
  sqlstm.sqpadto = sqlstm.sqadto; 
  sqlstm.sqptdso = sqlstm.sqtdso; 
  sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn); 
  if (sqlca.sqlcode < 0) sql_error(); 
} 两条语句在同一个函数中: 
main() 

.... 
switch(logflag[0]) 

case 'm': 
case 'M': 
managerModern(logname,logpwd); //进入管理员模块 
break; 
case 't': 
case 'T': 
teacherFunc(logname,logpwd); //进入老师模块 
break; 
case 's': 
case 'S': 
studentFunc(logname,logpwd); //进入学生模块 
break; 
default: 
printf("\n身份有误!\n"); 
exit(1); 
break; 

.... 

teacherFunc(logname,logpwd); //进入老师模块 

..... 
//EXEC SQL SELECT COUNT(LoginID) into :ok from Teacher where LoginID=:logpwd; //出错语句 
EXEC SQL CALL  teacher_pack.islogin_proc(:logpwd,:logname,:ok);  //检查此老师是否注册 
..... 

解决方案 »

  1.   

    if (sqlca.sqlcode == 100) break; //此为出错原因
    这里不能用break。
      

  2.   

    if (sqlca.sqlcode == 100) break; //此为出错原因 c++中,这个又不在while或for循环中,当然不能break了。break在循环中用的,跳出循环。另外,这个题跟oracle无关。9i,10g中尚未有break关键字
      

  3.   

    if (sqlca.sqlcode == 100) break; 
    它是对PC源文件预编译时产生的,
    不是我写的。
    预编译正确语句: /* EXEC SQL CALL  teacher_pack.islogin_proc(:logpwd,:logname,:ok); */ 时,
    却没有以上的错误。????
      

  4.   

    EXEC SQL WHENEVER NOT FOUND DO ...