王珊的《数据库系统概论》里有个例子---用C连接SQL数据库,我用VC6.0做试验,可是不行,高手帮看看例1]依次检查某个系的学生记录,交互式更新某些学生年龄。
EXEC SQL BEGIN DEC LARE SECTION;  /*主变量说明开始*/ 
char deptname[64];
char HSno[64];
char HSname[64]; 
char HSsex[64];
int  HSage;
int NEWAGE;
EXEC SQL END DECLARE SECTION;     /*主变量说明结束*/
long SQLCODE;
EXEC SQL INCLUDE sqlca;               /*定义SQL通信区*/
for ( ; ; )                       /*用循环结构逐条处理结果集中的记录*/

EXEC SQL FETCH SX INTO :HSno, :HSname, :HSsex,:HSage;
   /*推进游标,将当前数据放入主变量*/
if (sqlca.sqlcode != 0)     /* sqlcode != 0,表示操作不成功*/
break;               /*利用SQLCA中的状态信息决定何时退出循环*/
if(count++ == 0)             /*如果是第一行的话,先打出行头*/
  printf("\n%-10s %-20s %-10s %-10s\n", "Sno", "Sname", "Ssex", "Sage");
  printf("%-10s %-20s %-10s %-10d\n", HSno, HSname, HSsex, HSage);  
/*打印查询结果*/
  printf("UPDATE AGE(y/n)?"); /*询问用户是否要更新该学生的年龄*/
 do{                     
   scanf("%c",&yn);
  }
  while(yn != 'N' && yn != 'n' && yn != 'Y' && yn != 'y');

if (yn == 'y' || yn == 'Y')                 /*如果选择更新操作*/
{
 printf("INPUT NEW AGE:");
 scanf("%d",&NEWAGE);          /*用户输入新年龄到主变量中*/
 EXEC SQL UPDATE Student            /*嵌入式SQL*/
SET Sage = :NEWAGE
WHERE CURRENT OF SX ;
}                 /*对当前游标指向的学生年龄进行更新*/
}     EXEC SQL CLOSE SX;           /*关闭游标SX不再和查询结果对应*/
EXEC SQL COMMIT WORK;                           /*提交更新*/
EXEC SQL DISCONNECT TEST;                  /*断开数据库连接*/
}

解决方案 »

  1.   

    都是些嵌入式的sql语句看看嵌入式的sql语句里怎么定义游标,sqlca.sqlcode.在pb里也是这样写(pb就是用c写的。。)是不是要用 declare sx cursor for select。
      

  2.   


    EXEC SQL BEGIN DECLARE SECTION;
       char deptname[20];
       char HSno[9];
       char HSname[20];
       char HSsex[2];
       int HSage;
       int NEWWAGE;
    EXEC SQL END DELCARE SECTION;
    long SQLCODE;
    EXEC SQL INCLUDE sqlca;
    int main(void)
    {
       int count=0;
       char yn;
       printf("please choose the department name(CS/MA/IS):");
       scanf("%s",&deptname);
       EXEC SQL CONNECT TO 教学@localhost  USER "sa"/"";
       EXEC SQL DECLARE SX CURSOR FOR 
         SELECT Sno,Sname,Ssex,Sage
     FROM Student
     WHERE SDept=:deptname;
       EXEC SQL OPEN SX;
       for( ; ;)
       {
         EXEC SQL FETCH SX INTO:HSno,:HSname,:HSsex,:HSage;
     if(sqlca.sqlcode!=0)
       break;
         if(count++==0)
       printf("\n%-10s %-20s %-10s %-10s\n","Sno","Sname","Ssex","Sage"); 
       printf("\n%-10s %-20s %-10s %-10s\n",HSno,HSname,HSsex,HSage);
       printf("UPDATE(y/n)?");
       do
       {
         scanf("%c",&yn);
       }while(yn!="N"&&yn!="n"&&yn!="Y"&&yn!="y");
       if (yn=='Y'||yn=='y')
       {
         printf("INPUT NEW AGE:");
     scanf("%d",&NEWAGE);
     EXEC SQL UPDATE Student
     SET Sage=:NEWAGEE
     WHERE CURRENT OF SX;
    }
         }
     EXEC SQL CLOSE SX;
     EXEC SQL COMMIT WORK;
     EXEC SQL DISCONNECT 教学;
    } 哦,疏忽了,连接数据库没有问题的话用VC6.0这段代码可以通过吗?可是我调问题出了很多