// apply the statement dialog, prepare and execute SQL sentence
  // ......
  error_proc(errhp, OCIHandleAlloc((dvoid *) envhp,(dvoid **) &stmthp, OCI_HTYPE_STMT,(size_t)structlen,(dvoid **) &gene_data));
  error_proc(errhp, OCIStmtPrepare(stmthp,errhp,insert,(ub4) strlen((char *) insert),OCI_NTV_SYNTAX,OCI_DEFAULT));
  status = OCIBindByPos(stmthp,&bnd1p,errhp,1, &gene_data.Generator_No,(sword) sizeof(gene_data.Generator_No),SQLT_STR,(dvoid *) 0,(ub2 *) 0,(ub2 *) 0,(ub4) 0,(ub4 *) 0,OCI_DEFAULT);
  status |= OCIBindByPos(stmthp,&bnd2p,errhp,2, &gene_data.year,(sword) sizeof(gene_data.year),SQLT_STR,(dvoid *) 0,(ub2 *) 0,(ub2 *) 0,(ub4) 0,(ub4 *) 0,OCI_DEFAULT);
  status |= OCIBindByPos(stmthp,&bnd3p,errhp,3, &gene_data.month,(sword) sizeof(gene_data.month),SQLT_STR,(dvoid *) 0,(ub2 *) 0,(ub2 *) 0,(ub4) 0,(ub4 *) 0,OCI_DEFAULT);
  status |= OCIBindByPos(stmthp,&bnd4p,errhp,4, &gene_data.day,(sword) sizeof(gene_data.day),SQLT_STR,(dvoid *) 0,(ub2 *) 0,(ub2 *) 0,(ub4) 0,(ub4 *) 0,OCI_DEFAULT);
  status |= OCIBindByPos(stmthp,&bnd5p,errhp,5, &gene_data.hour,(sword) sizeof(gene_data.hour),SQLT_STR,(dvoid *) 0,(ub2 *) 0,(ub2 *) 0,(ub4) 0,(ub4 *) 0,OCI_DEFAULT);
  status |= OCIBindByPos(stmthp,&bnd6p,errhp,6, &gene_data.minute,(sword) sizeof(gene_data.minute),SQLT_STR,(dvoid *) 0,(ub2 *) 0,(ub2 *) 0,(ub4) 0,(ub4 *) 0,OCI_DEFAULT);
  status |= OCIBindByPos(stmthp,&bnd7p,errhp,7, &gene_data.second,(sword) sizeof(gene_data.second),SQLT_STR,(dvoid *) 0,(ub2 *) 0,(ub2 *) 0,(ub4) 0,(ub4 *) 0,OCI_DEFAULT);
  status |= OCIBindByPos(stmthp,&bnd8p,errhp,8, &gene_data.A_Voltage_Value,(sword) sizeof(gene_data.A_Voltage_Value),SQLT_STR,(dvoid *) 0,(ub2 *) 0,(ub2 *) 0,(ub4) 0,(ub4 *) 0,OCI_DEFAULT);
  status |= OCIBindByPos(stmthp,&bnd9p,errhp,9, &gene_data.A_Voltage_Time,(sword) sizeof(gene_data.A_Voltage_Time),SQLT_STR,(dvoid *) 0,(ub2 *) 0,(ub2 *) 0,(ub4) 0,(ub4 *) 0,OCI_DEFAULT);
  status |= OCIBindByPos(stmthp,&bnd10p,errhp,10, &gene_data.A_Current_Value,(sword) sizeof(gene_data.A_Current_Value),SQLT_STR,(dvoid *) 0,(ub2 *) 0,(ub2 *) 0,(ub4) 0,(ub4 *) 0,OCI_DEFAULT);
  status |= OCIBindByPos(stmthp,&bnd11p,errhp,11, &gene_data.A_Current_Time,(sword) sizeof(gene_data.A_Current_Time),SQLT_STR,(dvoid *) 0,(ub2 *) 0,(ub2 *) 0,(ub4) 0,(ub4 *) 0,OCI_DEFAULT);
  status |= OCIBindByPos(stmthp,&bnd12p,errhp,12, &gene_data.B_Voltage_Value,(sword) sizeof(gene_data.B_Voltage_Value),SQLT_STR,(dvoid *) 0,(ub2 *) 0,(ub2 *) 0,(ub4) 0,(ub4 *) 0,OCI_DEFAULT);
  status |= OCIBindByPos(stmthp,&bnd13p,errhp,13, &gene_data.B_Voltage_Time,(sword) sizeof(gene_data.B_Voltage_Time),SQLT_STR,(dvoid *) 0,(ub2 *) 0,(ub2 *) 0,(ub4) 0,(ub4 *) 0,OCI_DEFAULT);
  status |= OCIBindByPos(stmthp,&bnd14p,errhp,14, &gene_data.B_Current_Value,(sword) sizeof(gene_data.B_Current_Value),SQLT_STR,(dvoid *) 0,(ub2 *) 0,(ub2 *) 0,(ub4) 0,(ub4 *) 0,OCI_DEFAULT);
  status |= OCIBindByPos(stmthp,&bnd15p,errhp,15, &gene_data.B_Current_Time,(sword) sizeof(gene_data.B_Current_Time),SQLT_STR,(dvoid *) 0,(ub2 *) 0,(ub2 *) 0,(ub4) 0,(ub4 *) 0,OCI_DEFAULT);
   status |= OCIBindByPos(stmthp,&bnd16p,errhp,16, &gene_data.C_Voltage_Value,(sword) sizeof(gene_data.C_Voltage_Value),SQLT_STR,(dvoid *) 0,(ub2 *) 0,(ub2 *) 0,(ub4) 0,(ub4 *) 0,OCI_DEFAULT);
   status |= OCIBindByPos(stmthp,&bnd17p,errhp,17, &gene_data.C_Voltage_Time,(sword) sizeof(gene_data.C_Voltage_Time),SQLT_STR,(dvoid *) 0,(ub2 *) 0,(ub2 *) 0,(ub4) 0,(ub4 *) 0,OCI_DEFAULT);
   status |= OCIBindByPos(stmthp,&bnd18p,errhp,18, &gene_data.C_Current_Value,(sword) sizeof(gene_data.C_Current_Value),SQLT_STR,(dvoid *) 0,(ub2 *) 0,(ub2 *) 0,(ub4) 0,(ub4 *) 0,OCI_DEFAULT);
   status |= OCIBindByPos(stmthp,&bnd19p,errhp,19, &gene_data.C_Current_Time,(sword) sizeof(gene_data.C_Current_Time),SQLT_STR,(dvoid *) 0,(ub2 *) 0,(ub2 *) 0,(ub4) 0,(ub4 *) 0,OCI_DEFAULT);
   status |= OCIBindByPos(stmthp,&bnd20p,errhp,20, &gene_data.delta,(sword) sizeof(gene_data.delta),SQLT_STR,(dvoid *) 0,(ub2 *) 0,(ub2 *) 0,(ub4) 0,(ub4 *) 0,OCI_DEFAULT);   /*if (status)
     {*/
  error_proc(errhp,status);
  //OCIHandleFree((dvoid *) envhp, OCI_HTYPE_ENV);
  //exit(-1);
  //}  sscanf(frameBuff,"%d,%d,%d,%d,%d,%d,%d,%d,%f,%d,%f,%d,%f,%d,%f,%d,%f,%d,%f,%d",
    &gene_data.Generator_No,
    &gene_data.year,&gene_data.month,&gene_data.day,
    &gene_data.hour,&gene_data.minute,&gene_data.second,     &gene_data.A_Voltage_Time,&gene_data.A_Voltage_Value,
    &gene_data.B_Voltage_Time,&gene_data.B_Voltage_Value,
    &gene_data.C_Voltage_Time,&gene_data.C_Voltage_Value,
    &gene_data.A_Current_Time,&gene_data.A_Current_Value,
    &gene_data.B_Current_Time,&gene_data.B_Current_Value,
    &gene_data.C_Current_Time,&gene_data.C_Current_Value,
    &gene_data.delta
    );
      display_second( &gene_data );//execute the sentence 
if((status = OCIStmtExecute(svchp, stmthp, errhp, (ub4) 20, (ub4) 0, (CONST OCISnapshot *) NULL,(OCISnapshot *) NULL,OCI_DEFAULT)) && status != OCI_SUCCESS_WITH_INFO)

  display_second( &gene_data );
  error_proc(errhp,status);
  display_second( &gene_data );
  OCIHandleFree((dvoid *) envhp, OCI_HTYPE_ENV);
  exit(-1);
}出错在:if((status = OCIStmtExecute(svchp, stmthp, errhp, (ub4) 20, (ub4) 0, (CONST OCISnapshot *) NULL,(OCISnapshot *) NULL,OCI_DEFAULT)) && status != OCI_SUCCESS_WITH_INFO)
我在Oracle中的pmu用户下建立了表gps.
请朋友们帮我看看问题在那?谢谢

解决方案 »

  1.   

    不是我说你,这么长的程序摆出来,实在是....,再说了
    /*sscanf(frameBuff,"%d,%d,%d,%d,%d,%d,%d,%d,%f,%d,%f,%d,%f,%d,%f,%d,%f,%d,%f,%d",
    这句中/*对应的*/我找了半天,也没看到,唉我不清楚你的程序错在哪,我只是觉得你没必要使用那么多的bind,直接将static text *insert = (text *) "INSERT INTO gps(Generator_No,year,month,day,hour,minute,second,A_Voltage_Value, A_Voltage_Time,A_Current_Value, A_Current_Time,B_Voltage_Value, B_Voltage_Time,B_Current_Value, B_Current_Time,C_Voltage_Value, C_Voltage_Time,C_Current_Value, C_Current_Time,delta) VALUES (:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12,:13,:14,:15,:16,:17,:18,:19,:20)";中的(:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12,:13,:14,:15,:16,:17,:18,:19,:20)
    换成"%d,%d,%d,%d,%d,%d,%d,%d,%f,%d,%f,%d,%f,%d,%f,%d,%f,%d,%f,%d"之类的,然后拼出insert的SQL语句,并且可以将此时的SQL语句作为调试信息输出,就很容易定位错误了。你试试吧。