​http://blog.163.com/earth_of_fire/blog/static/1368943200791211622278/(总结)​

​http://blog.163.com/earth_of_fire/blog/static/1368943200791223416510/(数据列表)​

​http://blog.163.com/earth_of_fire/blog/static/13689432007918112936198/(select)​


​http://hi.baidu.com/mgqw864/item/e54b48552b8a56978d12ed7f()​

​http://read.pudn.com/downloads51/sourcecode/windows/database/176187/OCIExample/OCIExampleDlg.cpp__.htm:​

​http://www.pudn.com/downloads51/sourcecode/windows/database/detail176187.html​

​http://read.pudn.com/downloads195/sourcecode/database/916923/testoci/testociDlg.cpp__.htm​

​http://www.pudn.com/downloads195/sourcecode/database/detail916923.html​


  1. void COCIExampleDlg::OnButtonConnect()    
  2. {   

  3.     this->UpdateData ();   //更新数据   

  4.     //代码5.2,处理SQL的第一步,准备SQL   
  5.     wsprintf((char*)textSQL, "SELECT * FROM Score %s",SQL);   

  6.     if(status=OCIStmtPrepare(stmthp, errhp,textSQL, strlen((char*)textSQL),OCI_NTV_SYNTAX, OCI_DEFAULT))   
  7.     {   
  8.         ErrorProc (errhp, status) ;    
  9.         return;   
  10.     }   

  11.     //代码5.3,处理SOL的第三步,执行   
  12.     if (status=OCIStmtExecute(svchp, stmthp,errhp, (ub4)0, 0, NULL, NULL, OCI_DEFAULT))   
  13.     {   
  14.         ErrorProc (errhp, status) ;    
  15.         return;   
  16.     }   

  17.     //代码5.4,处理SOL的第四步,描述       
  18.     //代码5.4.1,读取选择列表中的项数   
  19.     ErrorProc(errhp, OCIAttrGet(stmthp,OCI_HTYPE_STMT,&col_num, 0, OCI_ATTR_PARAM_COUNT,errhp ));   
  20.     int ColumnNumbers=(int) col_num;   
  21.     text    *namep;     //字段名称   
  22.     ub4     sizep;      //字段名称的字符串长度   
  23.     text    tempText[100];   

  24.     //获取表的字段的属性信息   
  25.     int nindex=m_CombolFieldName.GetCurSel();   
  26.     if(nindex<0) nindex=0;   
  27.     m_CombolFieldName.ResetContent();   
  28.     for(int i=0;i<(int)col_num; i++)   
  29.     {   
  30.         //为选择项分配参数描述符   
  31.         ErrorProc(errhp, OCIParamGet(stmthp,OCI_HTYPE_STMT, errhp, (void**)&colhp, ub4(i+1)));   

  32.         //读取选择项的数据长度   
  33.         ErrorProc(errhp, OCIAttrGet(colhp, OCI_DTYPE_PARAM,&collen[i], 0, OCI_ATTR_DATA_SIZE, errhp ));   

  34.         //读取选择项的数据类型   
  35.         ErrorProc(errhp, OCIAttrGet(colhp, OCI_DTYPE_PARAM,&coltype[i],0, OCI_ATTR_DATA_TYPE, errhp));   

  36.         //若这个字段为日期型,则把其字符宽度置为50   
  37.         if (coltype[i]==SQLT_DATE)collen[i] =50;   

  38.         //分配缓冲区   
  39.         colbuf[i]=(text*)new text[(int)collen[i]+1];   

  40.         //代码5.4.2获取字段名称   
  41.         ErrorProc(errhp, OCIAttrGet(colhp, OCI_DTYPE_PARAM,(dvoid*)&namep, (ub4*)&sizep, OCI_ATTR_NAME, errhp ));   
  42.         strncpy((char*)tempText, (char*)namep, (size_t)sizep) ;   
  43.         tempText [sizep]= '\0';   
  44.         m_grid.SetTextMatrix(0,i+1,(const char *)tempText); //将数据写入表格控件   
  45.         m_CombolFieldName.AddString((const char *)tempText); //将字段名称添加入下拉列表框   
  46.     }      
  47.     m_CombolFieldName.SetCurSel (nindex);   

  48.     //代码5.5,处理SQL的第五步,定义变量   
  49.     for(i=0; i<(int)col_num; i++)   
  50.     {   
  51.         if (status=OCIDefineByPos (stmthp,&defhp[i],errhp, i+1,(ub1*)colbuf[i],   
  52.             collen[i]+1,SQLT_STR,&ind[i], 0, 0, OCI_DEFAULT))   
  53.         {   
  54.             ErrorProc(errhp, status);    
  55.             return;   
  56.         }   
  57.     }   

  58.     //代码5.6,处理SQL的第六步,取值               
  59.     int row=0;   
  60.     CString tempstr;   
  61.     while((OCIStmtFetch(stmthp, errhp,1,OCI_FETCH_NEXT,OCI_DEFAULT))!=OCI_NO_DATA)   
  62.     {   
  63.         row = row+1;   
  64.         m_grid.SetRows(row+1); //根据数据的行数动态设置表格控件的最大行数   
  65.         tempstr.Format ("%d",row);   
  66.         m_grid.SetTextMatrix(row,0,tempstr); //设置序号   
  67.         for(i=0; i<(int)col_num; i++)   
  68.         {   
  69.             tempstr=(char*)colbuf[i];   
  70.             tempstr.TrimRight(' '); //删除右空格   
  71.             //把获取的用户的基表的数据赋予字段数值数组   
  72.             m_grid.SetTextMatrix(row,i+1,tempstr);   
  73.         }   

  74.     }   

  75.     SQL="";   

  76. }   


root