㈠ MFC資料庫編程源代碼
10.Sql Server7.0/2000資料庫
/*
#import "c:\Program Files\Common Files\System\ADO\msado15.dll" \
no_namespace rename("EOF", "EndOfFile")
*/
CoInitialize(NULL); // 初始化OLE/COM庫環境 ,為訪問ADO介面做准備
_RecordsetPtr m_pRecordset("ADODB.Recordset");
_ConnectionPtr m_pConnection("ADODB.Connection");
_bstr_t bstrSQL("select * from stu_info"); //查詢語句
char * query_cmd = "DELETE FROM stu_info WHERE sname = 』本拉登』";
try
{
// 創建Connection對象
m_pConnection.CreateInstance("ADODB.Connection");
// 設置連接字元串,必須是BSTR型或者_bstr_t類型
_bstr_t strConnect= "Provider=SQLOLEDB;Server=(local);Database=db2; uid=; pwd=;";
//若資料庫在網路上則Server為形如(192.168.1.5,3340)
//用戶sa和密碼123隻是針對我的庫
m_pConnection->Open(strConnect,"","",adModeUnknown);
if(m_pConnection==NULL)
cerr<<"Lind data ERROR!\n";
// 創建記錄集對象
m_pRecordset.CreateInstance(_uuidof(Recordset));
// 取得表中的記錄
m_pRecordset->Open(bstrSQL,m_pConnection.GetInterfacePtr(),
adOpenDynamic,adLockOptimistic,adCmdText);
_variant_t vsnum,vsname,vsage,vssex,vsmajor; //對應庫中的snum,sname,sage,ssex,smajor
cout << "學號 姓名 年齡 姓別 專業";
cout << "\n----------------------------------------------------------------\n";
while (!m_pRecordset->EndOfFile)
{
vsnum = m_pRecordset->GetCollect(_variant_t((long)0));//這兒給欄位編號和欄位名都可以
vsname = m_pRecordset->GetCollect("sname");
vsage = m_pRecordset->GetCollect("sage");
vssex = m_pRecordset->GetCollect("ssex");
vsmajor = m_pRecordset->GetCollect("smajor");
if (vsnum.vt != VT_NULL && vsname.vt != VT_NULL && vsage.vt != VT_NULL
&& vssex.vt != VT_NULL && vsmajor.vt != VT_NULL)
{
cout.setf(ios::left);
cout << setw(14) << (char*)(_bstr_t)vsnum;
cout << setw(14) << (char*)(_bstr_t)vsname;
cout << setw(8) << vsage.lVal;
cout << setw(8) << (char*)(_bstr_t)vssex;
cout <<setw(20) << (char*)(_bstr_t)vsmajor;
cout.unsetf(ios::left);
cout << endl;
}
m_pRecordset->MoveNext(); ///移到下一條記錄
}
cout << "\n----------------------------------------------------------------\n";
cout << "\n請輸入你要添加的學生信息\n";
cout << "學號:";
cin >> student.snum;
cout << "\n姓名:";
cin >> student.sname;
cout << "\n年齡:";
cin >> student.sage;
cout << "\n姓別:";
cin >> student.ssex;
cout << "\n專業:";
cin >> student.smajor;
m_pRecordset->MoveFirst(); //移動到第一條記錄
m_pRecordset->AddNew(); ///添加新記錄
m_pRecordset->PutCollect("snum",_variant_t(student.snum));
m_pRecordset->PutCollect("sname",_variant_t(student.sname));
m_pRecordset->PutCollect("sage",_variant_t(student.sage));
m_pRecordset->PutCollect("ssex",_variant_t(student.ssex));
m_pRecordset->PutCollect("smajor",_variant_t(student.smajor));
m_pRecordset->Update();
m_pConnection->Execute(query_cmd,NULL,1); //用Execute執行sql語句來刪除
m_pRecordset->Close(); // 關閉記錄集
}
// 捕捉異常
catch(_com_error e)
{
// 顯示錯誤信息
cerr << "\nERROR:" << (char*)e.Description();//拋出異常
}
if(m_pConnection->State)
m_pConnection->Close();
::CoUninitialize();
20.資料庫存入二進制欄位數據
/*
#import "c:\Program Files\Common Files\System\ADO\msado15.dll" \
no_namespace rename("EOF", "EndOfFile")
*/
CoInitialize(NULL);
_RecordsetPtr pRs=NULL;
_StreamPtr pStream=NULL;
pRs.CreateInstance(_uuidof(Recordset));
pStream.CreateInstance(__unidof(Stream));
_bstr_t ConnectString(("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%%1;Persist Security Info=False"); //C:\\mydb.mdb
pRs->Open(_bstr_t("Blob"),ConnectString,adOpenKeyset,adLockOptimistic,adCmdTable);
_variant vtSource;
vtSource.vt=VT_ERROR;
_bstr_t bstrUser(L"");
_bstr_t bstrPass(L"");
pStream->Type=adTypeBinary;
pStream->Open(vtSource,adModeUnknown,adOpenStreamUnspecified,bstrUser,bstrPass);
pStream->LoadFromFile(_bstr_t(%%3)); //"C:\\mypic.bmp"
pRs->AddNew();
pRs->Fields->GetItem(_variant_t(%%2))->put_Value(_variant_t(pStream->Read(adReadAll))); //"Image"
pRs->();
pStream->Close();
pRs->Close();
CoUninitialize();
21.資料庫取出二進制欄位數據
/*
#import "c:\Program Files\Common Files\System\ADO\msado15.dll" \
no_namespace rename("EOF", "EndOfFile")
*/
CoInitialize(NULL);
_RecordsetPtr pRs=NULL;
_StreamPtr pStream=NULL;
pRs.CreateInstance(_uuidof(Recordset));
pStream.CreateInstance(__unidof(Stream));
_bstr_t ConnectString(("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%%1;Persist Security Info=False");//C:\\mydb.mdb
pRs->Open(_bstr_t("Blob"),ConnectString,adOpenKeyset,adLockOptimistic,adCmdTable);
pStream->Write(_variant_t(pRs->Fields->GetItem(_variant_t(%%2))->GetValue())); //"Image"
pStream->SaveToFile(_bstr_t(%%3),adSaveCreateOverWrite); //"C:\\mypic.bmp"
pStream->Close();
pRs->Close();
CoUninitialize();
㈡ MFC ODBC資料庫編程
給你個實例 只是一部分 應該有你要的全部東西了 至於變數與控制項關聯,用一下VC6.0的winzard就 會明白了 快捷鍵 ctrl+w
//////////////cpp部分
BOOL Subjectdlg::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: Add extra initialization here
CString sqlStr;
sqlStr="SELECT * FROM tb_subject";
mysubjectset = new Subjectinfo(&((CStudentsysApp*)AfxGetApp())->m_DB);
if(!mysubjectset->Open(AFX_DB_USE_DEFAULT_TYPE,sqlStr)) //打開數據表
{
AfxMessageBox("tb_subject表打開失敗!");
}
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
bool Subjectdlg::DisplayRecord()
{
if(mysubjectset->IsEOF()&&mysubjectset->IsBOF()) //判斷是否移動到了開頭和結尾
{
m_subjectname = "";
m_subjectid = "";
}
else
{
if(mysubjectset->IsBOF()) //移動到了開頭,就向後移動
{
mysubjectset->MoveNext();
}
else //否則前移
{
if(mysubjectset->IsEOF())
{
mysubjectset->MovePrev();
}
}
}
m_subjectname = mysubjectset->m_subject; //對應變數賦值
m_subjectid = mysubjectset->m_code;
UpdateData(FALSE);
return TRUE;
}
////////////那幾個指針
Subjectinfo* mysubjectset;
Subjectinfo* mysubjectset_find;
Subjectinfo* myclass_subject_findref;
///////////
subjectinfo是連接數據源的那個類
㈢ 學習MFC,看孫鑫視頻,感覺太慢了,又難理解,要怎麼學
我自己總結的步驟,不一定正確,僅供參考
1、先了解基本Windows編程,注意是了解,不用掌握。然後再看MFC編程。
2、搞清楚MFC和Windows編程的關系,別在意太多實現細節,只要搞清楚大體流程就行。因為這只是讓你用MFC用得踏實,否則總是感覺飄在雲彩里,不知道MFC背著你搞了些什麼。
3、然後學對話框編程,搞清楚那些代碼是自動生成的,那些自動生成的你先不要去管。然後做個計算器,掌握控制項編程,就能大體知道MFC運作流程了。
4、搞清楚文檔-視圖結構,然後學單文檔編程。搞清楚各個類之間的關系。視圖類從CFormView類開始學,然後再慢慢搞其他視圖類。
5、最後學多文檔視圖。
6、然後學什麼多線程開發啊,資料庫啊,其實就是往前面學的骨頭里添肉了。
注意:學的時候主要是搞清楚框架,重點學習如何應用MFC,也就是說你要搞清楚自己在幹嘛。對於MFC的原理、類之間的關系、消息映射機制等等,知道那麼回事兒、知道誰會包含或調用誰就行,千萬別是糾結MFC那些內部原理是如何實現的,對於使用MFC的人來說,那意義真的不大,純屬浪費時間。像孫鑫視頻里花了大量時間去講MFC內部原理的實現方法,領著你去追MFC內部代碼。你連MFC能幹嘛都不知道,他就領著你跟蹤MFC內部代碼,告訴你winmain是如何被調用的。其實對於新手來說,要的就是他跟蹤代碼之後得到的結論,那結論還就是幾句話而已。所以你看他的視頻會覺得慢,而且是很慢。並且,新手的學習路應該是先建立整體框架,然後逐步深入。而孫鑫的視頻里,前面先領著你跟蹤代碼,弄暈你。後續章節就東一下、西一下,視圖類不從最簡單的類開始搞,上來就是最復雜的繪圖類,給你很不系統的講CDC。你要是跟著他的思路學,沒有點兒功底,一遍肯定不行。往往要回頭再看多次,你有那個閑工夫還不如找幾本老外的書,學一遍就能寫程序了。
另外,選書的原則,一是不要讓他領著你探究MFC內部實現;二是避免買那種控制項屬性羅列的書。
㈣ mfc 資料庫編程 (odbc)
沒時間詳細說 給你個例子 有時間晚上交流
qq 469392501
void CMemoDBSDlg::OnBtnDelMember()
{
// TODO: Add your control notification handler code here
//獲取要刪除的成員記錄所在的行.
int nItem = m_listMember.GetNextItem(-1, LVNI_SELECTED);
if(nItem == -1){
AfxMessageBox("沒有選擇要刪除的成員");
return;
}
//獲取成員ID.
int id = atoi(m_listMember.GetItemText(nItem,0));
TRY{
CString sql;
//從資料庫中刪除記錄.
sql.Format("DELETE member_tab "
"where member_id = %d",id);
TRACE(sql);
m_db.ExecuteSQL(sql);
//從列表控制項中刪除該記錄.
m_listMember.DeleteItem(nItem);
}
CATCH(CDBException,ex)
{
AfxMessageBox (ex->m_strError);
AfxMessageBox (ex->m_strStateNativeOrigin);
}
AND_CATCH(CException,e)
{
TCHAR szError[100];
e->GetErrorMessage(szError,100);
AfxMessageBox (szError);
}
END_CATCH
}
void CMemoDBSDlg::OnBtnAddType()
{
// TODO: Add your control notification handler code here
//添加備注類型.
//初始化備注類型對話框實例.
CMemoTypeDlg dlg;
if(dlg.DoModal() == IDOK){
//從對話框中獲取新添加的備注類型.
CString strName = dlg.m_strTypeName;
TRY{
CRecordset rs(&m_db);
//獲取最大的類型ID值.
rs.Open(CRecordset::dynaset,
"Select max(TYPE_ID) from MEMO_TYPE_TAB");
//初始化新類型ID值為1.
int newTypeID = 1;
//如果資料庫已經有類型記錄,則新的類型ID為最大類型ID+1
if(!rs.IsEOF()) {
CDBVariant var;
rs.GetFieldValue((short)0, var, SQL_C_SLONG);
if (var.m_dwType != DBVT_NULL)
newTypeID = var.m_iVal + 1;
}
CString sql;
//向資料庫中添加新的備忘錄類型記錄.
sql.Format("Insert into MEMO_TYPE_TAB(TYPE_ID,"
"TYPE_NAME) "
"VALUES("
"%d,'%s')",newTypeID,strName);
TRACE(sql);
m_db.ExecuteSQL(sql);
//向界面中添加記錄行.
InsertMemoTypeItem(newTypeID,strName);
}
CATCH(CDBException,ex)
{
AfxMessageBox (ex->m_strError);
AfxMessageBox (ex->m_strStateNativeOrigin);
}
AND_CATCH(CException,e)
{
TCHAR szError[100];
e->GetErrorMessage(szError,100);
AfxMessageBox (szError);
}
END_CATCH
}
}
void CMemoDBSDlg::OnBtnModType()
{
// TODO: Add your control notification handler code here
//獲取要修改的類型記錄
int nItem = m_listType.GetNextItem(-1, LVNI_SELECTED);
//如果沒有選擇要修改的紀錄,返回.
if(nItem == -1){
AfxMessageBox("沒有選擇要修改的類型");
return;
}
//獲取要修改記錄的ID和名稱.
int id = atoi(m_listType.GetItemText(nItem,0));
CString name = m_listType.GetItemText(nItem,1);
//初始化備注類型對話框.
CMemoTypeDlg dlg;
//給對話框的變數賦值.
dlg.m_strTypeName = name;
if(dlg.DoModal() == IDOK){
//獲取修改後的數據.
CString strName = dlg.m_strTypeName;
TRY{
CString sql;
//更新記錄.
sql.Format("UPDATE MEMO_TYPE_TAB SET TYPE_NAME = '%s' "
" WHERE TYPE_ID = %d",strName,id);
TRACE(sql);
m_db.ExecuteSQL(sql);
//修改界面的值.
m_listType.SetItemText(nItem,1,strName);
}
CATCH(CDBException,ex)
{
AfxMessageBox (ex->m_strError);
AfxMessageBox (ex->m_strStateNativeOrigin);
}
AND_CATCH(CException,e)
{
TCHAR szError[100];
e->GetErrorMessage(szError,100);
AfxMessageBox (szError);
}
END_CATCH
}
}
void CMemoDBSDlg::OnBtnDelType()
{
// TODO: Add your control notification handler code here
//獲取要刪除的記錄所在的行.
int nItem = m_listType.GetNextItem(-1, LVNI_SELECTED);
//如果沒有選擇,返回.
if(nItem == -1){
AfxMessageBox("沒有選擇要刪除的類型");
return;
}
//獲取要刪除的類型ID
int id = atoi(m_listType.GetItemText(nItem,0));
TRY{
CString sql;
sql.Format("DELETE MEMO_TYPE_TAB "
"where TYPE_ID = %d",id);
TRACE(sql);
//刪除類型記錄
m_db.ExecuteSQL(sql);
//刪除界面中的記錄.
m_listType.DeleteItem(nItem);
}
CATCH(CDBException,ex)
{
AfxMessageBox (ex->m_strError);
AfxMessageBox (ex->m_strStateNativeOrigin);
}
AND_CATCH(CException,e)
{
TCHAR szError[100];
e->GetErrorMessage(szError,100);
AfxMessageBox (szError);
}
END_CATCH
}
void CMemoDBSDlg::OnBtnAddMemo()
{
// TODO: Add your control notification handler code here
//初始化備忘錄信息對話框.
CMemoInfoDlg dlg;
//獲取所有的家庭成員的名稱.
for(int i = 0 ; i < m_listMember.GetItemCount() ; i++ )
dlg.m_strMemberArray.Add(m_listMember.GetItemText(i,1)) ;
//獲取所有的類型信息.
for(i = 0 ; i < m_listType.GetItemCount() ; i++ )
dlg.m_strTypeArray.Add(m_listType.GetItemText(i,1)) ;
//打開對話框,添加新的記錄.
if(dlg.DoModal() == IDOK){
//從對話框中獲取記錄值.
CString strName = dlg.m_strMember;
CString strType = dlg.m_strMemoType;
CString strHappenDate = dlg.m_oleDate.Format("%Y-%m-%d")
+ " " + dlg.m_oleTime.Format("%H:%M:%S");
CString strOperDate = COleDateTime::GetCurrentTime().Format("%Y-%m-%d %H:%M:%S");
int isEvent = dlg.m_isEvent;
CString strCost = dlg.m_strCost;
CString strMemo = dlg.m_strMemoInfo;
TRY{
CRecordset rs(&m_db);
CString sql;
//根據成員姓名獲取成員ID值.
sql.Format("Select MEMBER_ID from MEMBER_TAB where "
"MEMBER_NAME = '%s'",strName);
rs.Open(CRecordset::dynaset,sql);
int memberID = 1;
if(!rs.IsEOF()) {
CDBVariant var;
rs.GetFieldValue((short)0, var, SQL_C_SLONG);
if (var.m_dwType != DBVT_NULL)
memberID = var.m_iVal;
}
rs.Close();
//根據備忘錄類型獲取備忘錄類型ID.
sql.Format("Select TYPE_ID from MEMO_TYPE_TAB where "
"TYPE_NAME = '%s'",strType);
rs.Open(CRecordset::dynaset,sql);
int typeID = 1;
if(!rs.IsEOF()) {
CDBVariant var;
rs.GetFieldValue((short)0, var, SQL_C_SLONG);
if (var.m_dwType != DBVT_NULL)
typeID = var.m_iVal;
}
rs.Close();
//從SEQ_MEMO_ID序列中獲取下一個值.這個值就是新的備忘錄ID.
rs.Open(CRecordset::dynaset,
"Select max(MEMO_ID) from MEMO_INFO_TAB");
int memoID = 1;
if(!rs.IsEOF()) {
CDBVariant var;
rs.GetFieldValue((short)0, var, SQL_C_SLONG);
if (var.m_dwType != DBVT_NULL)
memoID = var.m_iVal+1;
}
sql.Format("Insert into MEMO_INFO_TAB(MEMO_ID,"
"MEMBER_ID,OPER_DATE,HAPPEN_DATE,"
"IS_BIGEVENT,EVENT_COST,TYPE_ID,MEMO_TEXT) "
"VALUES("
"%d,%d,'%s'"
",'%s',%d,'%s'"
",%d,'%s')",memoID,memberID,
strOperDate,strHappenDate,isEvent,strCost,typeID,strMemo);
TRACE(sql);
m_db.ExecuteSQL(sql);
//向界面中插入新的紀錄.
InsertMemoInfoItem(memoID,strName,strOperDate,strHappenDate,isEvent,strCost,strType,strMemo) ;
}
CATCH(CDBException,ex)
{
AfxMessageBox (ex->m_strError);
AfxMessageBox (ex->m_strStateNativeOrigin);
}
AND_CATCH(CException,e)
{
TCHAR szError[100];
e->GetErrorMessage(szError,100);
AfxMessageBox (szError);
}
END_CATCH
}
}
㈤ MFC ODBC 資料庫編程
m_rsDataSet.m_strFilter="Desk_code='"+m_strCode;
m_rsDataSet.m_strFilter+="'";
外面一個雙引號表示字元串,裡面一個單引號是字元串中的一個符號。
這么說吧,如果m_strCode是abc的話
那麼通過這兩句後,
m_rsDataSet.m_strFilter的值就是Desk_code='abc'
這兩個單引號是給資料庫用的。在sql語句中表示一個字元串
㈥ MFC資料庫編程問題
試了一下,代碼沒有什麼問題,連接和訪問表都可以成功,不過沒有用LZ的資料庫表格式,自己亂寫了一個。
如果連接出問題,可以檢查一下資料庫文件是否在程序可以訪問的目錄,或者DataSource給個完整路徑試試。
----
發現一個小問題(不知道是不是貼出來的文字不對)
在連接字元串中間有個換行,最好寫在一行,如果一定要換行,在後面加上\
㈦ 如何進行MFC資料庫編程
MFC資料庫編程包含如下:
首先,你要選擇使用什麼方式連接資料庫,有ODBC,ADO等,
其他,就是sql語句操作資料庫了,對後是怎麼存儲操作數據。
㈧ MFC資料庫編程OLEDB定義CCommand<CAccessor<CHouseAccessor>>rs;
妹子啊現如今想找個好男人不容易啊你可要好好把握哦。我也是朋友介紹的咨詢師,在他的指引下我順利的通過了老公那一關,我現在的生活很不錯;哪個男人都希望是自己的女人的唯一!所以我也向你推薦:如果有需要,可以加咨詢師扣扣 號,前四位數:陸四一六、後五位數:二零⑦八捌;他也會指導你。希望你能得到和我一樣的幸福.祝你成功
㈨ 關於編程和資料庫!MFC(C++)
如果你的系統是在windows平台下的話,sqlserver肯定是不需要裝驅動就能用的,當然如果你用資料庫肯定需要安裝相應的資料庫軟體,不然,根本沒有庫,你程序連接什麼呢?是可以通過程序語言來控制資料庫的寫入,刪除的,這個和標準的sql語句沒有差別,你只需要會用就可以了,一般在windows平台線面訪問數據的操作可以使用ado 和一些資料庫控制項,比如說datagrid
㈩ MFC資料庫編程,想設置許可權,普通用戶登入比管理員登入顯示的表中數據要少一些。
void CLoginDlg::InitDlgPara()
{
if(m_pOperate_List)
{
delete []m_pOperate_List;
m_pOperate_List=NULL;
}
m_Count=0;
while (m_CombOper.GetCount())
{
m_CombOper.DeleteString(m_CombOper.GetCount()-1);
}
m_StaPass.SetWindowText("");
m_Count=ReadOperateWithOperateID(&g_adoRecordSet,0,m_pOperate_List);
for(int i=0;i<m_Count;i++)
{
m_CombOper.InsertString(m_CombOper.GetCount(),m_pOperate_List[i].Operate_Name);
m_CombOper.SetItemData(m_CombOper.GetCount()-1,m_pOperate_List[i].Operate_ID);
}
m_CombOper.SetCurSel(0);
m_StaPass.SetFocus();
m_StaPass.SendMessage(EM_SETSEL,(int) 0,(int)200);
m_StaPass.Invalidate(TRUE);
}
void CLoginDlg::OnOK()
{
UpdateData(TRUE);
if (m_pOperate_List)
{
int n=m_CombOper.GetCurSel();
if (m_Pass!=m_pOperate_List[n].Operate_Password)
{
AfxMessageBox("密碼錯誤");
m_StaPass.SetFocus();
m_StaPass.SendMessage(EM_SETSEL,(int) 0,(int)200);
m_StaPass.Invalidate(TRUE);
return;
}
else
{
memcpy(&g_Cur_Operate,m_pOperate_List+n,sizeof(TABLE_OPERATE));
CDialog::OnOK();
}
}
else
{
AfxMessageBox("open database error");
this->EndDialog(IDNO);
}
CDialog::OnOK();
}
int ReadOperateWithOperateID(void *pVoid,int Operate_ID,TABLE_OPERATE *&pOperate_List)
{
CAdoRecordSet *pRecord=NULL;
CDBInterface *pDBInterface=NULL;
char *pTableBuff=NULL;
int iBuffLen=0;
#if DATABASE_METHOD == DATABASE_METHOD_ADO
pRecord=(CAdoRecordSet *)pVoid;
#else if DATABASE_METHOD == DATABASE_METHOD_ODBC
pDBInterface=(CDBInterface *)pVoid;
#endif
int nCount=0;
if (pOperate_List)
{
free(pOperate_List);
pOperate_List=NULL;
}
if ((pRecord==NULL&&pDBInterface==NULL) || Operate_ID<0 )
{
return 0;
}
char sql[1024];
TABLE_OPERATE *pReturn=NULL;
BOOL bRet=FALSE;
switch(Operate_ID)
{
case 0:
sprintf(sql,"SELECT TOP 5000 * FROM TABLE_Operate order by ID");
break;
default :
sprintf(sql,"SELECT TOP 5000 * FROM TABLE_Operate\
where ID=%d ",Operate_ID);
}
#if DATABASE_METHOD == DATABASE_METHOD_ADO
bRet=pRecord->Open(sql);
#else if DATABASE_METHOD == DATABASE_METHOD_ODBC
bRet=pDBInterface->odbc_select(sql,pTableBuff,&iBuffLen,FALSE);
#endif
if (bRet>0)
{
#if DATABASE_METHOD == DATABASE_METHOD_ADO
nCount=pRecord->GetRecordCount();
#else if DATABASE_METHOD == DATABASE_METHOD_ODBC
nCount=bRet;
#endif
if (nCount<=0)
{
return 0;
}
nCount=nCount>MAX_RECORDSET_NUM?MAX_RECORDSET_NUM:nCount;
pReturn=(TABLE_OPERATE *)malloc(sizeof(TABLE_OPERATE)*nCount);
memset(pReturn,0x0,sizeof(TABLE_OPERATE)*nCount);
#if DATABASE_METHOD == DATABASE_METHOD_ADO
for(int i=0;i<nCount;i++)
{
pRecord->GetCollect((long)0,(pReturn+i)->Operate_ID);
CString sTemp;
pRecord->GetCollect(1,sTemp);
sprintf((pReturn+i)->Operate_Name,sTemp);
pRecord->GetCollect(2,sTemp);
sprintf((pReturn+i)->Operate_Password,sTemp);
pRecord->GetCollect(3,(pReturn+i)->Operate_Degree);
pRecord->GetCollect(4,(pReturn+i)->Operate_Degree_ID);
pRecord->GetCollect(5,(pReturn+i)->Operate_Dept_ID);
pRecord->GetCollect(6,(pReturn+i)->Operate_Create_Time);
pRecord->GetCollect(7,sTemp);
sprintf((pReturn+i)->Operate_Tele_Code,sTemp);
pRecord->GetCollect(8,sTemp);
sprintf((pReturn+i)->Operate_Remark,sTemp);
pRecord->MoveNext();
}
#else if DATABASE_METHOD == DATABASE_METHOD_ODBC
memcpy(pReturn,pTableBuff,sizeof(TABLE_OPERATE)*nCount);
if (pTableBuff)
{
delete pTableBuff;
pTableBuff=NULL;
}
#endif
}
pOperate_List=pReturn;
return nCount;
}