问题描述
在vc6.0的專案中用odbc的方法讀取excel檔的資料時仍有下列問題未解決:1.我是利用m_pRa.GetFieldValue(_T("身分證號"),Sa);將excel檔中身分證號欄的資料讀進Sa文字變數中.2.假如excel的身分證號欄全是文字欄(第一位是英文字母或中文字)便毫無問題.若是數字欄則讀進來的會是有一位小數的數字,例如原來是123的數字資料,結果Sa=”123.0”.這還沒多大問題.可是若有部份是數字,另一部份是文字,那麼數字的資料卻完全讀不到,也就是Sa=””.由於GetFieldValue()函式一定要使用文字變數Sa.不能用數字變數,至少在odbc的方法中是如此.所以請問各位vc高手到底在excel同一欄中若有數字與文字時,數字的資料要怎樣才能正確讀取得到?拜託!謝謝!
解决方案
解决方案二:
sa是CDBVariant类型的变量,可以是任意类型,估计读出来没有问题,可能是你后面的转换出问题了。
解决方案三:
你把它当字符串读出来再转化肯定没问题。
解决方案四:
老老实实的用select语句读取我用过没捷径的
解决方案五:
先謝謝各位的回答,我現在將程式列舉如下,請各位再提供詳細的解決方法,謝謝!拜託!//SaODBC驅動程式,SbDSN,ScExcel檔Sc=m_Path+"\member.xls";Sa=GetExcelDriver();if(Sa==""){AfxMessageBox(_T("找不到Excel的ODBC驅動程式!"));return;}Sb.Format(_T("ODBC;DRIVER={%s};DSN='';DBQ=%s"),Sa,Sc);m_pDa.Open(NULL,false,false,Sb);Sd="Select[會員編號],[身分證號],[姓名],[帳號]FrommemberOrderby[會員編號]";CRecordsetm_pRa(&m_pDa);m_pRa.Open(CRecordset::forwardOnly,Sd,CRecordset::readOnly);while(!m_pRa.IsEOF()){m_pRa.GetFieldValue(_T("會員編號"),Sa);S1=Fill(Sa,7);m_pRa.GetFieldValue(_T("身分證號"),Sa);//當身份證號第一碼是英文字,Sa能讀到,但當全是數字時(是公司的統編)卻讀不到AfxMessageBox(_T("sa="+Sa));m_pRa.GetFieldValue(_T("姓名"),S3);m_pRa.GetFieldValue(_T("帳號"),S4);//這裡是將讀取到的變數寫入一資料表中(程式省略)m_pRa.MoveNext();}CStringCC2::GetExcelDriver(){charC1[121];char*Buf=C1;WORDW1=120;WORDW2;if(!SQLGetInstalledDrivers(Buf,W1,&W2))return"";while(Buf[1]!=''){if(strstr(Buf,"Excel")!=0){Sa=CString(Buf);break;}Buf=strchr(Buf,'')+1;}returnSa;}就如上述當身份證全是數字時就讀不到,請大家幫忙解決,感謝!