人人做人人澡人人爽欧美,国产主播一区二区,久久久精品五月天,羞羞视频在线观看免费

當前位置:蘿卜系統下載站 > 技術開發教程 > 詳細頁面

在VC中動態運用FoxPro數據庫

在VC中動態運用FoxPro數據庫

更新時間:2022-10-08 文章作者:未知 信息來源:網絡 閱讀次數:

紫 瑗

  前言


  我們在用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。

溫馨提示:喜歡本站的話,請收藏一下本站!

本類教程下載

系統下載排行

網站地圖xml | 網站地圖html
主站蜘蛛池模板: 邢台市| 宁强县| 阿拉善盟| 林甸县| 英吉沙县| 平定县| 含山县| 都昌县| 松滋市| 栾川县| 钟祥市| 三明市| 克拉玛依市| 赤城县| 嫩江县| 晋江市| 临邑县| 鄢陵县| 栖霞市| 阳新县| 上饶市| 岑巩县| 永新县| 财经| 永州市| 虎林市| 东辽县| 萍乡市| 峡江县| 视频| 沁源县| 阳城县| 隆子县| 南昌市| 灌云县| 望奎县| 常山县| 天门市| 离岛区| 布尔津县| 祁东县|