第一篇:ADO編程模型之VB數(shù)據(jù)庫操作小結(jié)
ADO編程模型之VB數(shù)據(jù)庫操作小結(jié)
使用ADO編程模型需添加ADO對象類庫的“引用”----“Microsoft ActiveX Data Objects 2.x Library” ADO之VB數(shù)據(jù)庫操作主要包括讀、寫、修改及刪除等操作,不論是進行什么數(shù)據(jù)庫操作都必須首先連接到數(shù)據(jù)庫。
一、連接到數(shù)據(jù)庫
1、連接到SQL數(shù)據(jù)庫:
通過ADO的Connection對象可實現(xiàn)VB與SQL數(shù)據(jù)庫的連接。一般方法如下:
Dim cnn As New ADODB.Connection ‘創(chuàng)建Connection對象cnn,關(guān)鍵字new用于創(chuàng)建新對象
cnn.ConnectionString = “Provider=SQLOLEDB.1;Password=密碼;User ID=用戶名;Initial Catalog=SQL數(shù)據(jù)庫文件;Data Source= localhost;”
'指定提供者,設(shè)置數(shù)據(jù)源 cnn.Open
‘打開到數(shù)據(jù)庫的連接 ……..cnn.Close
‘關(guān)閉到數(shù)據(jù)庫的連接 或者:
Dim cnn As New ADODB.Connection ‘創(chuàng)建Connection對象cnn,關(guān)鍵字new用于創(chuàng)建新對象
cnn.Open “Provider=SQLOLEDB.1;Password=密碼;User ID=用戶名;Initial Catalog=SQL數(shù)據(jù)庫文件;Data Source= localhost;”
‘打開到數(shù)據(jù)庫的連接 ……..cnn.Close
‘關(guān)閉到數(shù)據(jù)庫的連接
2、連接到ACCESS數(shù)據(jù)庫:
通過ADO的Connection對象可實現(xiàn)VB與ACCESS數(shù)據(jù)庫的連接。一般方法如下:
Dim cnn As New ADODB.Connection ‘創(chuàng)建Connection對象cnn,關(guān)鍵字new用于創(chuàng)建新對象
cnn.ConnectionString = “Provider=Microsoft.Jet.OLEDB.4.0;Data Source=ACCESS數(shù)據(jù)庫文件.MDB” '指定提供者,設(shè)置數(shù)據(jù)源
cnn.Open
‘打開到數(shù)據(jù)庫的連接 ……..cnn.Close
‘關(guān)閉到數(shù)據(jù)庫的連接 或者: Dim cnn As New ADODB.Connection ‘創(chuàng)建Connection對象cnn,關(guān)鍵字new用于創(chuàng)建新對象 cnn.Open “Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=ACCESS
數(shù)據(jù)庫文件.MDB”
‘打開到數(shù)據(jù)庫的連接 ……..cnn.Close
‘關(guān)閉到數(shù)據(jù)庫的連接
二、讀數(shù)據(jù)庫操作
讀數(shù)據(jù)庫操作一般可通過recordset對象實現(xiàn)。方法如下—以ACCESS數(shù)據(jù)庫為例:
Dim cnn As New ADODB.Connection ‘創(chuàng)建Connection對象cnn,關(guān)鍵字new用于創(chuàng)建新對象 cnn.Open “Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=ACCESS
數(shù)據(jù)庫文件.MDB”
‘打開到數(shù)據(jù)庫的連接
Dim rs As New Recordset
'聲明一個記錄集對象
rs.Open [記錄源, cnn, 游標類型, 鎖定類型, 命令類型]
‘也可先設(shè)置記錄集相關(guān)屬性
text1.text= rs(“字段名稱1或索引”)
‘假設(shè)讀取出來的字段信息顯示在文本框中,三種讀取方法等價 text2.text=rs.fields(“字段名稱2或索引”)text3.text= rs!字段名稱3 …….rs.close
‘關(guān)閉記錄集對象 cnn.Close
‘關(guān)閉與數(shù)據(jù)庫的連接 set rs=Nothing
‘釋放rs對象實例 set cnn=Nothing ‘釋放Connection對象實例
? 記錄源一般為一條SQL查詢語句,以實現(xiàn)查詢目的。
? Recordset對象還保持查詢返回的記錄的位置,它返回第一個檢索到的記錄,并允許你一次一項逐步掃描其他結(jié)果。Recordset對象的部分屬性及方法如下 Rs(i): 讀取第i個字段的數(shù)據(jù),i從0開始 Rs(字段名): 讀取指定字段的數(shù)據(jù) Rs.EOF:記錄指針指到記錄的尾部 Rs.BOF:記錄指針指到記錄的頭部 Rs.RecordCount: 游標中的數(shù)據(jù)記錄總數(shù)
Rs.PageSize:當對象設(shè)有分頁時,用于指定邏輯頁中的記錄個數(shù) Rs.PageCount:返回記錄集中的邏輯分頁數(shù) Rs.MoveNext: 將記錄指針移到下一個記錄 Rs.MovePrev: 將記錄指針移到上一個記錄 Rs.MoveFirst: 將記錄指針移到第一個記錄 Rs.MoveLast: 將記錄指針移到最后一個記錄 rs.Delete:將當前記錄刪除 rs.addnew:添加一條新記錄(行)
? 如果要讀取滿足條件的數(shù)據(jù)庫記錄,只要在SELECT語句中增加WHERE子句即可(例如:WHERE 性別=”男”),如果要讀取多條滿足條件的數(shù)據(jù)庫記錄,可通過循環(huán)語句來實現(xiàn),并且每讀取一條記錄后使用Rs.MoveNext移動記錄指針以讀取下一條記錄。
三、寫數(shù)據(jù)庫操作
方法1:使用recordset對象(此方法一般初學(xué)者使用較多)。方法如下—以ACCESS數(shù)據(jù)庫為例: Dim cnn As New ADODB.Connection ‘創(chuàng)建Connection對象cnn,關(guān)鍵字new用于創(chuàng)建新對象 cnn.Open “Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=ACCESS
數(shù)據(jù)庫文件.MDB”
‘打開到數(shù)據(jù)庫的連接
Dim rs As New Recordset
'聲明一個記錄集對象
rs.Open [記錄源, cnn, 游標類型, 鎖定類型, 命令類型]
‘也可先設(shè)置記錄集相關(guān)屬性 rs.addnew ‘告訴rs我們要添加一行
rs(“字段名稱1或索引”)=值1
‘給要添加的行的一個字段賦值,三種方法等價 rs.fields(“字段名稱2或索引”)=值2 rs!字段名稱3 =值3 …….rs.update
‘通知rs我們要把這個行寫入數(shù)據(jù)庫 rs.close
‘關(guān)閉記錄集對象 cnn.Close
‘關(guān)閉與數(shù)據(jù)庫的連接 set rs=Nothing
‘釋放rs對象實例 set cnn=Nothing ‘釋放Connection對象實例
? addnew使用方法后,如果要放棄添加的結(jié)果,應(yīng)調(diào)用記錄集的CancelUpdate方法放棄。
方法2:使用Connection對象的Execute方法對表進行SQL記錄插入操作(要求要熟悉SQL命令)Dim cnn As New ADODB.Connection ‘創(chuàng)建Connection對象cnn,關(guān)鍵字new用于創(chuàng)建新對象 cnn.Open “Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=ACCESS
數(shù)據(jù)庫文件.MDB”
‘打開到數(shù)據(jù)庫的連接
strSQL = “Insert Into 數(shù)據(jù)表(字段1, 字段2…..)Values(值1, 值2…..)
‘拼寫Insert插入語句 cnn.Execute strSQL
'執(zhí)行Insert語句實現(xiàn)添加 …….cnn.Close
‘關(guān)閉與數(shù)據(jù)庫的連接
set cnn=Nothing ‘釋放Connection對象實例
四、修改數(shù)據(jù)庫操作
方法1:使用recordset對象(此方法一般初學(xué)者使用較多)。方法如下—以ACCESS數(shù)據(jù)庫為例: Dim cnn As New ADODB.Connection ‘創(chuàng)建Connection對象cnn,關(guān)鍵字new用于創(chuàng)建新對象 cnn.Open ”Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=ACCESS
數(shù)據(jù)庫文件.MDB“
‘打開到數(shù)據(jù)庫的連接
Dim rs As New Recordset
'聲明一個記錄集對象
rs.Open [記錄源, cnn, 游標類型, 鎖定類型, 命令類型]
‘也可先設(shè)置記錄集相關(guān)屬性 …….rs(”字段名稱1或索引“)=新值1
‘‘給要修改的行的一個字段賦一個新值,三種方法等價 rs.fields(”字段名稱2或索引“)=新值2 rs!字段名稱3 =新值3 …….rs.update
‘通知rs,我們要把修改好的記錄行寫入數(shù)據(jù)庫 rs.close
‘關(guān)閉記錄集對象 cnn.Close
‘關(guān)閉與數(shù)據(jù)庫的連接 set rs=Nothing
‘釋放rs對象實例 set cnn=Nothing ‘釋放Connection對象實例
? 如果放棄修改結(jié)果,應(yīng)調(diào)用記錄集的CancelUpdate方法放棄更新數(shù)據(jù)庫。
方法2:使用Connection對象的Execute方法對表進行SQL記錄更新操作(要求要熟悉SQL命令)Dim cnn As New ADODB.Connection ‘創(chuàng)建Connection對象cnn,關(guān)鍵字new用于創(chuàng)建新對象 cnn.Open ”Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=ACCESS
數(shù)據(jù)庫文件.MDB“
‘打開到數(shù)據(jù)庫的連接
strSQL = ”Update 數(shù)據(jù)表 Set 字段1=新值1, 字段2=新值2…..‘拼寫Update語句,以便進行修改 cnn.Execute strSQL
'執(zhí)行Insert語句實現(xiàn)添加 …….cnn.Close
‘關(guān)閉與數(shù)據(jù)庫的連接
set cnn=Nothing ‘釋放Connection對象實例
五、刪除數(shù)據(jù)庫操作
方法1:使用recordset對象(此方法一般初學(xué)者使用較多)。方法如下—以ACCESS數(shù)據(jù)庫為例方法1:通過 Dim cnn As New ADODB.Connection ‘創(chuàng)建Connection對象cnn,關(guān)鍵字new用于創(chuàng)建新對象 cnn.Open “Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=ACCESS
數(shù)據(jù)庫文件.MDB”
‘打開到數(shù)據(jù)庫的連接
Dim rs As New Recordset
'聲明一個記錄集對象
rs.Open [記錄源, cnn, 游標類型, 鎖定類型, 命令類型]
‘也可先設(shè)置記錄集相關(guān)屬性 …….rs.Delete
‘刪除當前記錄 …….rs.update
‘通知rs,我們要把修改好的記錄行寫入數(shù)據(jù)庫 rs.close
‘關(guān)閉記錄集對象 cnn.Close
‘關(guān)閉與數(shù)據(jù)庫的連接 set rs=Nothing
‘釋放rs對象實例 set cnn=Nothing ‘釋放Connection對象實例
? 刪除數(shù)據(jù)庫記錄前應(yīng)先找到(查詢)待刪除的記錄項(通過rs.Open來實現(xiàn))。
方法2:使用Connection對象的Execute方法(要求使用者要熟悉SQL命令)例如:如果要將數(shù)據(jù)庫“成績.mdb”中的名字為“學(xué)生情況表”的數(shù)據(jù)表中,學(xué)號為'07001'的記錄刪除,可通過下列方法來實現(xiàn)。
Dim cnn As New ADODB.Connection ‘創(chuàng)建Connection對象cnn,關(guān)鍵字new用于創(chuàng)建新對象 cnn.Open “Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=ACCESS
數(shù)據(jù)庫文件.MDB”
‘打開到數(shù)據(jù)庫的連接
sql=“delete from學(xué)生情況表where 學(xué)號='07001'”
‘拼寫delete語句,以便進行刪除
cnn.Execute strSQL
'執(zhí)行elete語句實現(xiàn)刪除 …….cnn.Close
‘關(guān)閉與數(shù)據(jù)庫的連接
set cnn=Nothing ‘釋放Connection對象實例
附:分頁簡介---使用記錄集
一、.原理:
分頁其實是將數(shù)據(jù)庫中的記錄分割成若干段,并將各段記錄放在同一個“邏輯頁面”上“分屏顯示”出來,其實顯示的“邏輯頁面”只有1頁,只是每次顯示的頁面記錄不同罷了。通過控制各頁中數(shù)據(jù)庫顯示記錄的不同,來刷新頁面的顯示內(nèi)容。
二、用到的幾個記錄集屬性
rs.pagesize:定義一頁顯示記錄的條數(shù); rs.recordcount:統(tǒng)計數(shù)據(jù)庫記錄總數(shù); rs.pagecount:統(tǒng)計總頁數(shù);
rs.absolutepage:將數(shù)據(jù)庫指針移動到當前頁要顯示的數(shù)據(jù)記錄的第一條記錄;比如有20條記錄的一個數(shù)據(jù)庫,我們分為一頁顯示5條記錄,如將AbsolutePage屬性設(shè)為2,則當前記錄指針移至第2頁第1條記錄,也即將指針移動到第6條記錄處,依次類推....(AbsolutePage 屬性是以 1 為起始的)
第二篇:操作數(shù)據(jù)庫小結(jié)
一.查詢操作
對數(shù)據(jù)進行查詢操作時,有兩種情況:一是查詢單個值,二是 查詢?nèi)舾蓷l記錄。
1、查詢單個值
需要使用Command對象的ExecuteScalar()方法:步驟如下:(1)、創(chuàng)建Connection對象(數(shù)據(jù)庫連接對象)。(2)、創(chuàng)建查詢用的SQL語句。(3)、利用SQL語句和Connection對象創(chuàng)建Command對象。(4)、打開數(shù)據(jù)庫連接,調(diào)用Connection對象的Open()方法。(5)、調(diào)用Command對象的ExecuteScalar()方法,返回一個標量值。(6)、操作完成后關(guān)閉數(shù)據(jù)庫連接,調(diào)用Connection對象的Close()方法。
2、查詢?nèi)舾蓷l記錄
需要使用Command對象的ExecuteReader()方法:步驟如下:(1)、創(chuàng)建Connection對象(數(shù)據(jù)庫連接對象)。(2)、創(chuàng)建查詢用的SQL語句。(3)、利用SQL語句和Connection對象創(chuàng)建Command對象。(4)、打開數(shù)據(jù)庫連接,調(diào)用Connection對象的Open()方法。(5)、調(diào)用Command對象的ExecuteReader()方法,返回一個DataReader對象。(6)、調(diào)用DataReader對象的Read()方法逐行讀取記錄,如果讀到記錄返回Ture,否則返回False.(7)、使用(type)dataReader[列名或索引]的方式讀取這一行中某一列的值。(8)、關(guān)閉DataReader對象(9)、操作完成后關(guān)閉數(shù)據(jù)路連接,調(diào)用Connection對象的Close()方法。
二、非查詢操作
對數(shù)據(jù)庫執(zhí)行非查詢操作時,包括增加,修改,刪除數(shù)據(jù),都使用Command對象的ExecuteNonQuery()方法,步驟如下:
(1)、創(chuàng)建Connection對象(數(shù)據(jù)庫連接對象)(2)、創(chuàng)建增刪改用的SQL語句。(3)、利用SQL語句和Connection對象創(chuàng)建Command對象。(4)、打開數(shù)據(jù)庫連接,調(diào)用Connection對象的Open()方法。(5)、調(diào)用Command對象的ExecuteNonQuery()方法執(zhí)行命令,返回受影響的行數(shù)。(6)、操作完成后關(guān)閉數(shù)據(jù)庫連接,調(diào)用Connection對象的Close()方法。
本章總結(jié)
1、使用DataReader查詢數(shù)據(jù)記錄,通過Command對象的ExecuteReader()方法返回一個DataReader對象。
2、使用DataReader讀取數(shù)據(jù)室每次調(diào)用Read()方法讀取一行數(shù)據(jù)。
3、DataReader使用完后要調(diào)用它的Close()方法關(guān)閉。
4、使用Command對象的ExecuteNonQuery()方法對數(shù)據(jù)進行增刪改的操作。
5、ExecuteNonQuery()方法返回受影響的行數(shù)。
6、ListView(列表視圖)控件有5種視圖模式,重點是Details 列表視圖的Items屬性表示包含在空間中的所有項的結(jié)合,每一個項都是一個ListViewItem,使用Items.Add()方法向列表視圖中添加一項 調(diào)用列表視圖項的SubItems.AddRange()方法添加它的子項
ListViewItem lviStudent = new ListViewItem(loginID);創(chuàng)建一個ListView項 lviStudent.Tag=(int)dataReader[“StudentId”];lvStudent.Items.Add(lviStudent);//向ListView中添加一個新項 lviStudent.SubItems.AddRange(new string[] {studentName,studentNo,userState});//向當前項中添加子項
7、ContextMenuStrip(快捷菜單)控件可以與其他控件結(jié)合使用,通過設(shè)置控件的ContextMenuStrip屬性來指定它的快捷菜單。
想鼠標右鍵單擊文本框時出現(xiàn)快捷菜單,就選中文本框?在屬性窗口中找到它的ContextMenuStrip屬性,選擇已有的右鍵菜單控件 txtLoginId.Focus():?
下拉列表:
創(chuàng)建Command對象?調(diào)用Command對象的ExecuteReader()方法創(chuàng)建DataReader對象(sqlDataReader dataReader=command.ExecuteReader())?使用DataReader的Reader()方法逐行讀取數(shù)據(jù)(放回bool類型)?讀取當前行的某列的數(shù)據(jù)(cboGrade.Items.Add(dataReader[“列名”]))?關(guān)閉DataReader對象,Close()方法
向數(shù)據(jù)庫中添加數(shù)據(jù):
創(chuàng)建Connection對象?定義要執(zhí)行的SQL語句?創(chuàng)建Command對象?執(zhí)行ExecuteNonQuery()方法?根據(jù)返回的結(jié)果進行后續(xù)的處理
雙擊顯示出ID:
MessageBox.show(dataGridView1.SelectedRows[0].cells[“ColID”].value.ToString());
刷新:
1,BindStudentByLoginID(txtBox.Text)2,listView.Items.RemoveAt(Listview1.SelectedIndices[0])//只能刪除選中的行(選中第幾個)
第三篇:VC++中MFC用Ado連接數(shù)據(jù)庫小結(jié)
VC++中MFC用Ado連接數(shù)據(jù)庫小結(jié)
VC++中使用MFC通過ADO連接數(shù)據(jù)庫方法小結(jié)(不包括異常的捕捉)這里主要講MFC與SQL2000數(shù)據(jù)庫的連接。1.在StdAfx.h頭文件中加入此句子
#import “c:program filescommon filessystemadomsado15.dll” no_namespace rename(“EOF”,“adoEOF”)2.在App類的InitInstance()函數(shù)中加入 ::CoInitialize(NULL);//表示com庫的初始化
鼠標右鍵點擊App類名添加虛函數(shù)ExitInstance(),在其中加入代碼 ::CoUninitialize();//釋放com庫。3.獲取連接字符串。
最簡單的方法就是新建一個.txt文件,將其后綴名改為.udl,雙擊它,在“提供程序”標簽頁中選擇“Microsoft OLE DB Provide fo Sql Server”,然后在“連接”標簽頁選擇填寫服務(wù)器、數(shù)據(jù)庫、登陸方式等信息,最后按“確定”。連接完成之后,將其用寫字板打開,第三行信息,如“Provider=SQLOLEDB.1;Integrated
Security=SSPI;Persist
Security Info=False;Initial Catalog=RuleDB_Data;Data Source=PYE”即為連接字符串。注意,若數(shù)據(jù)庫位于本機,在選擇填寫服務(wù)器一欄可直接填寫(local),記得一定要加括號。4.連接數(shù)據(jù)庫
在這里引入一個編寫好的封裝類:ADOConn。該類封裝了連接數(shù)據(jù)庫,對數(shù)據(jù)庫進行添加、刪除、修改操作及獲取查詢記錄集操作的方法。用戶可直接使用,這個類的頭文件和cpp文件內(nèi)容將在本文最后給出。
在一個工程里加入該類的方法為:把該類的頭文件和cpp文件拷貝到工程所在的文件夾里。然后在工程的工作區(qū)選擇Project->Add to Project->Files,將這兩個文件選擇加入。之后,就可以在程序里應(yīng)用這個類了。
首先在要用到數(shù)據(jù)庫的類的頭文件里設(shè)一個該類的對象,即加入代碼:ADOConn m_Ado;注意:記得要先在最前面加入#include “ADOConn.h”。
在應(yīng)用這個對象對數(shù)據(jù)庫進行操作之前,先對其初始化: m_Ado.OnInitADOConn(strConnect);其中strConnect即為上面獲取的連接字符串。
若要獲取數(shù)據(jù)庫中的部分記錄集,用m_Ado.GetRecordSet(strSql);其中strSql中存放查詢語句,查詢結(jié)果存放于m_Ado.m_pRecordset中,然后可用GetCollect()函數(shù)挨個獲取所有符合條件的記錄的各個字段的值。用完后記得用m_Ado.m_pRecordset.Close()關(guān)閉記錄集。
添加、修改、刪除操作,均用 m_Ado.ExecuteSQL(strSql);語句完成。
此外,若同時需要多種記錄集,則還需在要用到數(shù)據(jù)庫的類的頭文件里添加記錄集的對象,即_RecordsetPtr m_pRecordset;m_pRecordset在用之前也需初始化,初始化語句為: m_pRecordset.CreateInstance(__uuidof(Recordset));,同樣的,每回記錄集用完之后也得用Close()函數(shù)關(guān)閉。5.若在數(shù)據(jù)庫應(yīng)用程序編譯時遇到102個錯誤,則可把Debug文件夾刪了重新編譯即可。ADOConn類的頭文件:
#if!defined(AFX_ADOCONN_H__2B491720_FA04_4800_B616_219E55ABEA46__INCLUDED_)#define AFX_ADOCONN_H__2B491720_FA04_4800_B616_219E55ABEA46__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 class ADOConn : public CObject { public: //添加一個指向Connection對象的指針: _ConnectionPtr m_pConnection;//添加一個指向Recordset對象的指針: _RecordsetPtr m_pRecordset;char error[1024];public: _ConnectionPtr& GetConnPtr(){return m_pConnection;} _RecordsetPtr& GetRecoPtr(){return m_pRecordset;} public: //事務(wù)回滾
BOOL RollbackTrans();//遞交 事務(wù) BOOL CommitTrans();//事務(wù)開始 BOOL BeginTrans();BOOL adoBOF();//頭 BOOL adoEOF();//尾 BOOL MoveNext();//下一個 BOOL CloseTable();//關(guān)閉表
BOOL CloseADOConnection();//關(guān)閉連接
BOOL GetCollect(LPCTSTR Name,CString &lpDest);//獲取某個字段的值 //執(zhí)行SQL語句 包含update delete insert BOOL ExecuteSQL(LPCTSTR lpszSQL);//初始化連接數(shù)據(jù)庫
BOOL OnInitADOConn(LPCTSTR ConnStr);// 執(zhí)行select語句 獲取記錄集
_RecordsetPtr& GetRecordSet(LPCTSTR lpszSQL);ADOConn();virtual ~ADOConn();};#endif //!defined(AFX_ADOCONN_H__2B491720_FA04_4800_B616_219E55ABEA46__INCLUDED_)class CADOException : public CException { public: // Constructor CADOException(char* pchMessage);public: ~CADOException(){} CString m_strMessage;virtual BOOL GetErrorMessage(LPTSTR lpstrError, UINT nMaxError, PUINT pnHelpContext = NULL);private: int m_nError;};ADOConn類的cpp文件: #include “stdafx.h” #include “ADOConn.h” #ifdef _DEBUG #undef THIS_FILE static char THIS_FILE[]=__FILE__;#define new DEBUG_NEW #endif ////////////////////////////////////////////////////////////////////// // Construction/Destruction ////////////////////////////////////////////////////////////////////// ADOConn::ADOConn(){ memset(error,0,1024);} ADOConn::~ADOConn(){ } ////////////////////////////////////////////////////////////////////// // CADOException Class ////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////// // Construction/Destruction ////////////////////////////////////////////////////////////////////// CADOException::CADOException(char* pchMessage){ m_strMessage = pchMessage;m_nError = GetLastError();} BOOL CADOException::GetErrorMessage(LPTSTR
lpstrError,UINT nMaxError,PUINT pnHelpContext /*= NULL*/){
char text[200];if(m_nError == 0){ wsprintf(text, “%s error”,(const char*)m_strMessage);} else { wsprintf(text, “%s error #%d”,(const char*)m_strMessage, m_nError);} strncpy(lpstrError, text, nMaxError-1);return TRUE;} BOOL ADOConn::OnInitADOConn(LPCTSTR ConnStr){ ::CoInitialize(NULL);try { // 創(chuàng)建Connection對象
m_pConnection.CreateInstance(“ADODB.Connection”);// 設(shè)置連接字符串,必須是BSTR型或者_bstr_t類型 _bstr_t strConnect
=
_bstr_t(ConnStr);//“Provider=SQLOLEDB;Server=127.0.0.1;Database=EventLogg;uid=event;pwd=event;”;m_pConnection->Open(strConnect,“",”“,adModeUnknown);return TRUE;} // 捕捉異常 catch(_com_error e){ // 顯示錯誤信息 TRACE(e.Description());// sprintf(error,”連接數(shù)據(jù)庫失敗 請檢查連接字符串rn當前連接字符串為:%s“,ConnStr);// throw new CADOException(error);throw new CADOException(”連接數(shù)據(jù)庫失敗“);} } //執(zhí)行SQL語句 包含update delete insert BOOL ADOConn::ExecuteSQL(LPCTSTR lpszSQL){ // _variant_t RecordsAffected;try { // Connection對象的Execute方法:(_bstr_t CommandText, // VARIANT * RecordsAffected, long Options)
// 其中CommandText是命令字串,通常是SQL命令。// 參數(shù)RecordsAffected是操作完成后所影響的行數(shù),// 參數(shù)Options表示CommandText的類型:adCmdText-文本命令;adCmdTable-表名
// adCmdProc-存儲過程;adCmdUnknown-未知
m_pConnection->Execute(_bstr_t(lpszSQL),NULL,adCmdText);return true;} catch(_com_error e){ TRACE(e.Description());// sprintf(error,”t執(zhí)行SQL語句失敗rn SQL語句為:%s“,lpszSQL);// throw new CADOException(error);throw new CADOException(”執(zhí)行SQL語句失敗“);} } //執(zhí)行SELECT語句,獲得結(jié)果集,結(jié)果集放在m_pRecordset中 _RecordsetPtr& ADOConn::GetRecordSet(LPCTSTR lpszSQL){ try { // 創(chuàng)建記錄集對象
m_pRecordset.CreateInstance(__uuidof(Recordset));// 取得表中的記錄
m_pRecordset->Open(_bstr_t(lpszSQL),m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);} // 捕捉異常 catch(_com_error e){ // 顯示錯誤信息 TRACE(e.Description());// sprintf(error,”t執(zhí)行SELECT語句失敗rnSELECT語句為:%s“,lpszSQL);// throw new CADOException(error);throw new CADOException(”執(zhí)行SELECT語句失敗“);} // 返回記錄集 return m_pRecordset;} //獲取某個字段的值
BOOL ADOConn::GetCollect(LPCTSTR Name,CString &lpDest){ VARIANT vt;try { vt = m_pRecordset->GetCollect(Name);/* _bstr_t bstr =(_bstr_t)vt;if(lpDest!= ”“){ strcpy(lpDest,bstr);}*/ if(vt.vt!=VT_NULL)lpDest=(LPCSTR)_bstr_t(vt);else lpDest=”“;} catch(_com_error e){ TRACE(e.Description());sprintf(error,”獲取字段:%s值失敗“,Name);throw new CADOException(error);} return TRUE;} //關(guān)閉數(shù)據(jù)庫
BOOL ADOConn::CloseADOConnection(){ try { m_pConnection->Close();} catch(_com_error e){ TRACE(e.Description());sprintf(error,e.Description());throw new CADOException(”關(guān)閉數(shù)據(jù)庫失敗“);} return TRUE;} //關(guān)表
BOOL ADOConn::CloseTable(){ try { m_pRecordset->Close();} catch(_com_error e){ TRACE(e.Description());sprintf(error,e.Description());throw new CADOException(”關(guān)閉表失敗“);} return TRUE;} //下一個
BOOL ADOConn::MoveNext(){ try { m_pRecordset->MoveNext();} catch(_com_error e){ TRACE(e.Description());sprintf(error,e.Description());throw new CADOException(”結(jié)果集移向下一個失敗“);} return TRUE;} //尾
BOOL ADOConn::adoEOF(){ return m_pRecordset->adoEOF;} //頭
BOOL ADOConn::adoBOF(){ return m_pRecordset->BOF;} //事務(wù)開始
BOOL ADOConn::BeginTrans(){ try { m_pConnection->BeginTrans();} catch(_com_error e){ TRACE(e.Description());sprintf(error,e.Description());throw new CADOException(”事務(wù)開始失敗“);}
return TRUE;} //遞交事務(wù)
BOOL ADOConn::CommitTrans(){ try { m_pConnection->CommitTrans();} catch(_com_error e){ TRACE(e.Description());sprintf(error,e.Description());throw new CADOException(”遞交事務(wù)失敗“);} return TRUE;} //事務(wù)回滾
BOOL ADOConn::RollbackTrans(){ try { m_pConnection->RollbackTrans();} catch(_com_error e){ TRACE(e.Description());sprintf(error,e.Description());throw new CADOException(”回滾事務(wù)失敗");} return TRUE;}
第四篇:《數(shù)控車削編程與操作訓(xùn)練》之G70、G71指令教案
《數(shù)控車削編程與操作訓(xùn)練》
------G71、G70復(fù)合固定循環(huán)指令教案
授課章節(jié): G71、G70復(fù)合固定循環(huán)指令 教學(xué)重點:G71、G70指令
教學(xué)難點:G71、G70指令格式、粗精加工輪廓定義 使用教材:《數(shù)控車削編程與操作訓(xùn)練》高等教育出版社、機械工程部《數(shù)控車削與編程》集體教案
一、復(fù)習舊識:
G90簡單固定循環(huán)指令:用于單一形狀固定指令 格式:
圓柱面車削循環(huán):G90X(U)-----Z(W)-------F------;
圓錐面車削循環(huán):G90 X(U)-----Z(W)-------R-----F------;
(各參數(shù)含義)
優(yōu)點:對于加工余量較大的毛坯,刀具反復(fù)執(zhí)行相同的動作,用G90指令簡化了許多相同或相似的程序段,縮短了編程時間,提高了工作效率。
缺點:車削過渡尺寸較大的階梯軸時,有些多次重復(fù)進行的動作,使用G90指令編程仍然比較麻煩。
如圖1:(P33 例2—7)(請同學(xué)們思考用G90指令編寫該零件的程序)
二、導(dǎo)入新課:
車削過渡尺寸較大的階梯軸時,有些多次重復(fù)進行的動作,使用G90指令編程仍然比較麻煩,用G71、G70等復(fù)合循環(huán)指令更能簡化編程,數(shù)控系統(tǒng)能自動地計算出加工路線和進給路線,控制機床自動完成工件的加工。
三、新課講解:
1.分析G71、G70指令格式: A.G71 外圓粗車循環(huán)指令
指令格式:
G71 UΔd Re F S T ; G71 Pns Qnf UΔu WΔw;
式中:△d-背吃刀量;
e--退刀量;
ns--精加工輪廓程序段中開始程序段的段號; nf--精加工輪廓程序段中結(jié)束程序段的段號;
△u--X軸向精加工余量; △w--Z軸向精加工余量; 2.分析與G90的區(qū)別:
G90粗車循環(huán)留X向余量,Z向不留余量;
G71外圓粗車循環(huán)X向、Z向均留余量,精加工與粗加工偏移X向Δu/2,Z向△w余量。
圖2-21外圓粗車循環(huán)
A為刀具循環(huán)起點;A’---B為精加工路線
B.G70 精加工循環(huán)指令
G70 P(ns)Q(nf)
3.教學(xué)難點分析:
分析G70、G71指令格式
G71 U(Δd)R(e)F S T ; ⑴
G71 P(ns)Q(nf)U(Δu)W(Δw); ⑵ N(ns).....; ........; ....F; ....S; .... ⑶
N(nf).....; G70 P(ns)Q(nf); 【難點分散一】
由指令的第⑶部分(ns~nf程序段)給出的工件精加工軌跡,精加工軌跡的起點(即ns程序段的起點)與G71的起點、終點相同,簡稱A點; 【難點分散二】
粗車輪廓:精車軌跡按精車余量(Δu、Δw)偏移后的軌跡,是執(zhí)行G71形成的軌跡輪廓。精加工軌跡的第一段(ns程序段)只能是X軸的快速移動或切削進給,ns程序段的終點簡稱B點;精加工軌跡的終點(nf程序段的終點)簡稱C點。精車軌跡為A點→B點→C點。4.示例講解: 教材P33 例2—7(分析粗加工、精加工走刀路線)5.課堂練習:
P56 2.6(視學(xué)生掌握情況可再多作講解)四.作業(yè)布置:
斯沃仿真練習:P56 2.6、2.7、2.8(將毛坯改為Φ60的棒料)五.課堂小結(jié): 在復(fù)合固定循環(huán)中,對零件的輪廓定義之后,即可完成從粗加工到精加工的全過程,使程序得到進一步簡化。
1.這些復(fù)合循環(huán)指令的精車軌跡的功能有哪些? 2.G70指令的是怎么執(zhí)行的?
3.這些復(fù)合循環(huán)指令各參數(shù)的含義是什么?
第五篇:數(shù)據(jù)庫應(yīng)用基礎(chǔ)(第二版)第二章數(shù)據(jù)庫的基本操作實驗2.2之實驗報告
四、實驗2-2報告
1.通過上述實驗,請回答下列問題
(1)LIST ____RECORD____=DISPLAY,而DISPLAY____ALL____=LIST。
(2)執(zhí)行了LIST命令后,EOF()=___T__。
(3)執(zhí)行了GOTOP命令后,BOF()=.T.,對嗎?為什么?
答:不對,因為執(zhí)行了GO TOP命令后,記錄指針移動到表文件的第一條記錄上,爾BOF()是測試記錄指針是否在文件頭的函數(shù),首記錄和文件頭并不是同一個位置。
(4)如何用LIST/DISPLAY命令顯示備注字段內(nèi)容?
答:LIST是是滾動顯示當前表中的指定記錄,如果要顯示備注型字段的內(nèi)容,則必須在LIST命令中指定備注型字段名;DISPLAY分屏顯示當前表中的指定數(shù)據(jù)。
(5)你認為用REPLACE對表文件記錄進行修改,與用BROWSE命令修改有什么不同?
答:REPLACE命令是成批修改表字段值的非全屏幕編輯命令;而BROWSE命令具有現(xiàn)實和修改表內(nèi)容的功能。
(6)SET DELETED ON/OFF語句對被邏輯刪除的記錄有何影響?
答:此語句制定標有刪除的記錄是否參與其他命令的處理。SET DELETED ON表示邏輯刪除標志有效,既有刪除標記的記錄不參與處理;SET DELETED OFF表示邏輯刪除標志無效,既有刪除標記的記錄參與處理。
(7)通過實驗,請你歸納當EOF()為.T.時,RECNO()為多少?當BOF()為.T.時,RECNO()為多少?
答:當EOF()為.T.時,RECNO()為末記錄;當BOF()為.T.時,RECNO()為文件頭。
(8)用SORT命令建立排序文件后,緊接著用LIST命令卻看不到排序結(jié)果,為什么?
答:因為還沒有使用use打開對應(yīng)文件
(9)建立索引文件時,有一個可選參數(shù)[UNIQUE],它有什么意義?你能舉例說明嗎?
答:[UNIQUE],當多個記錄的<索引表達式>值相同時,只有其中第一個記錄的值記入索引文件。
(10)請總結(jié)一下表的排序與表索引有什么不同。
答:索引是表記錄排序的一種方法,同時生成一張索引表,而表的排序沒有生成其他文件。
2.實驗完成情況及存在問題