六月婷婷综合激情-六月婷婷综合-六月婷婷在线观看-六月婷婷在线-亚洲黄色在线网站-亚洲黄色在线观看网站

明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

在VC中動態使用FoxPro數據庫

[摘要]紫 瑗  前言  我們在用VC++進行基于數據的綜合開發時,會經常訪問到大量的物理存儲位置不可預見的FoxPro數據表(.DBF文件)。這時,我們就要使用到動態加載ODBC的技術去訪問這些數據表!  黾夹g要點分析  使用ODBC技術時,要求程序開發人員能預先確定數據源的位置,利用“控制面板”中的...
紫 瑗

  前言


  我們在用VC++進行基于數據的綜合開發時,會經常訪問到大量的物理存儲位置不可預見的FoxPro數據表(.DBF文件)。這時,我們就要使用到動態加載ODBC的技術去訪問這些數據表。


  ■技術要點分析


  使用ODBC技術時,要求程序開發人員能預先確定數據源的位置,利用“控制面板”中的“ODBC管理器”手工加載數據庫。但在實際的開發中,特別是基于Client/Server網絡環境的綜合開發中,往往無法確定數據源的位置,而只能進行動態加載。對于這種情況,我們可以使用一個Windows API函數 SQLConfigDataSource( )來完成這一操作。


  ■應用舉例


  先用FoxPro生成一張數據表Member.dbf,并設計好各項字段。注意字段名用英文,否則在VC++中使用時會出現錯誤。

  接著利用Visulal C++ 的向導生成一個基于對話框的程序,命名為DBFDemo。修改主對話框,如圖所示。利用ClassWizard為程序加入一個基類為CRecordset的名為CUserInfo的新類,按照向導的指示,取得Member.dbf的表結構。在類CUserInfo的頭文件上加入兩個文件包含語句:

  #include "afxdb.h"

  #include "odbcinst.h"

  下面給出范例程序的關鍵代碼:

  BOOL CDBFDemoDlg::OnInitDialog()

  //主對話框的初始化函數

  {

   ……//省略部分機器生成代碼

   //下面一句開始動態增加一個ODBC驅動

  SQLConfigDataSource(NULL,ODBC_ADD_DSN,"Microsoft Visual FoxPro Driver",

   "DSN=UserInfo\0Description=UserInfo\

  0SourceType=dbf\0Source=d:\\DBF\0");

  Database.Open(_T("UserInfo"));

  //打開ODBC驅動,Database派生于CDatabase類

  UserInfo.m_pDatabase=&&Database;

  //設置與CDatabase的連接,UserInfo派生于CUserInfo類

  UserInfo.Open(AFX_DB_USE_DEFAULT_TYPE, "SELECT  FROM member",CRecordset::none);

  return TRUE;

  }

  void CDBFDemoDlg::GetRecordValue()

  {

  //這個函數取得打開的表中的記錄,并利用DDX/DDV機制相應設置對話框中的各控件

   m_Order=UserInfo.m_order;

  //取得記錄中各字段的值,并設置相應的控件值

   m_Name=UserInfo.m_name;

   m_Age=UserInfo.m_age;

   m_Addr=UserInfo.m_addr;

   if(UserInfo.m_sex==TRUE)

  //典型的設置記錄中類型為BOOL型的字段的操作

  this-〉CheckRadioButton(IDB_MAN,IDB_WOMAN,IDB_MAN);

   else this-〉CheckRadioButton(IDB_MAN,IDB_WOMAN,IDB_WOMAN);

   UpdateData(FALSE);

  //將記錄信息顯示在對話框中

  }

  void CDBFDemoDlg::OnNext()

  //按鈕“下一個”的響應函數

  {

  if(!UserInfo.IsEOF())

  //測試記錄是否到底部

   {

  UserInfo.MoveNext();

  //向下移動一個記錄

  GetRecordValue();

  //設置對話框中的記錄顯示

   } else

   {

  //報告到達最末記錄信息

  ::MessageBox(this-〉m_hWnd,"到達最末記錄","消息框",MB_OK);

  UserInfo.MovePrev();

  //若到最末記錄,上移一個記錄,避免空操作

   }

  }

  void CDBFDemoDlg::OnPrev()

  //按鈕“下一個”的響應函數

  {

  if(!UserInfo.IsBOF())

  //測試記錄是否到達頂部

   {

  UserInfo.MovePrev();

  //向上移動一個記錄

  GetRecordValue();

  //設置對話框中的記錄顯示

   } else

   { //報告到達首記錄

  ::MessageBox(this-〉m_hWnd,"到達首記錄","消息框",MB_OK);

  UserInfo.MoveNext();

   }

  }

  void CDBFDemoDlg::SetRecordValue()

  {//這個函數根據對話框中各控件的值設置數據表中的某個記錄的各字段值

   UpdateData(TRUE);

  //利用DDX/DDV機制取得控件中的值

   UserInfo.m_order=m_Order;

   UserInfo.m_name=m_Name;

   UserInfo.m_addr=m_Addr;

   UserInfo.m_sex=Sex;

  //變量Sex可以取得“性別”一項中所選的值

   UserInfo.m_age=m_Age;

   UserInfo.Update(); //更新記錄的值

  }

  void CDBFDemoDlg::OnApply()

  //按鈕“應用”的響應函數

  { //這個函數可以進行用戶所選擇的如“新增用戶”、“修改用戶”、“刪除用戶”的操作

   switch(Operator) //變量Operator的值由用戶的選擇而決定

   {

   case ADD:

  //宏“ADD”已經在程序開頭時進行了定義

   if(UserInfo.CanAppend()==TRUE)

  UserInfo.AddNew(); //新增用戶

   SetRecordValue();

   this-〉OnAdd();

   break;

   case MODI: //修改用戶信息

   UserInfo.Edit();

  SetRecordValue();

   break;

   case DELE: //刪除用戶

   if(UserInfo.IsDeleted()==FALSE)

   {

   UserInfo.Delete();

   this-〉OnPrev();

   }

   break;

   default: //用戶沒有進行操作選擇

  ::MessageBox(this-〉m_hWnd,"請選擇你所要進行的操作","忘記選擇操作",MB_OK);

   break;

   }

  }

  限于篇幅,筆者只列出其主要代碼,讀者可以根據這些關鍵代碼完成這個范例程序。

  程序在中/英文Windows 98、VC++ 6.0環境下編譯通過,運行正常。需要注意的是,由于范例中使用的是Visual FoxPro 6.0的ODBC驅動器,所以要試驗這個程序,請先安裝VFP 6.0。


主站蜘蛛池模板: 欧美一区视频在线 | 五月综合激情久久婷婷 | 欧美一级在线播放 | 伊人网视频在线观看 | 日本在线成人 | 亚洲大片免费观看 | 青娱在线 | 色综合天天综合高清影视 | 一级做a爰片性色毛片刺激 一级做a爰片欧美一区 | 齐天大性床战铁扇公主 | 五月婷婷导航 | 深夜久久 | 三级黄色在线播放 | 永久免费在线看mv | 在线看91 | 午夜色站 | 青青青手机视频在线观看 | 中文区永久区乱码六区 | 青青青在线免费 | 五月婷婷六月综合 | 欧美在线黄色 | 日韩爱爱网| 日本三级理论片 | 性生活一区 | 最近韩国日本高清免费观看 | 最新国语自产精品视频在 | 日韩欧美在线观看综合网另类 | 五月婷婷网站 | 天天操天天插天天射 | 五月综合激情 | 欧美性xxxxbbbb | 日韩欧美高清 | 日日摸夜夜添夜夜添影院视频 | 亚洲精品在线观看视频 | 日本免费看片在线播放 | 香港三级理论在线影院 | 在线亚洲天堂 | 西瓜影院日韩大片在线观看 | 日韩在线视频免费 | 日本 免费 高清 | 人人看人人鲁狠狠高清 |