999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

VB系統開發中數據轉換技術的研究與實現

2011-10-12 03:06:26唐淑玲
中國科技信息 2011年4期
關鍵詞:數據庫

唐淑玲

大連職業技術學院

VB系統開發中數據轉換技術的研究與實現

唐淑玲

大連職業技術學院

當前各系統數據之間的轉換已成為各類用戶所關心的問題,文章以大連職業技術學院實踐教學及其設備實時管理系統開發為背景,簡要敘述了VB訪問數據庫的特點,主要探討了如何利用VB實現Excel數據與Access數據之間的相互轉換,具有較強的實用性,減少了工作量,從而進一步推動了數據庫技術和辦公自動化技術的有機結合。

數據庫;VB;EXCEL;ACCESS;ADO技術;數據轉換

1 前言

課題《實踐教學及其設備實時管理系統研究》是2009年度遼寧省教育科學規劃立項課題,該課題以實踐教學資源的科學合理規劃、實施和管理為研究內容,以實踐教學設備管理為研究對象,其主要目標是充分利用現有的軟硬件資源,提高已有設備的利用率,強化高職學生的職業技能訓練。

在對該系統進行規劃時,我們考慮到實訓設備的原始資料、各實訓車間的基本資料、實習教學計劃、各實訓室的教學時間安排等原始資料大多數是以Excel文件形式存在的。為了充分利用原始數據,減少數據錄入的麻煩,實現數據共享,我們設計了一個數據導入導出模塊,主要是將實訓計劃、實習時間安排等Excel文件導入到系統數據庫中來,然后將系統處理完成的數據資料再導出到Excel文件中去,以方便輸出格式靈活的各種數據報表。為實現這一功能,我們決定在Visual Basic6.0、Microsoft Access2003及Excel2003環境下進行系統開發。

2 數據轉換關鍵技術

2.1 AD0技術

在VB中實現Excel與Access之間的數據轉換,依靠的是ADO技術。ADO(Activex Data Object)對象是DAO/RDO的后繼產物,很多開發工具都支持這個對象,比如Visual Basic、ASP。它是Microsoft公司專門為適應網絡數據庫開發和客戶端需求而推出的一種跨平臺遠程數據庫訪問技術。ADO擴展了DAO和RDO所使用的對象模型,它包含較少的對象、更多的屬性、方法和事件,這使得ADO對象更容易使用。ADO通過OLEDB所提供的高性能數據訪問方法,可以方便快速地對各種數據進行訪問和操作。ADO可訪問的數據源包括關系或非關系型數據庫、電子郵件和文件系統、文本和圖形、自定義業務對象,比如SQL-Server、Access、數據庫,Excel、word文檔等。

2.2 使用ADO訪問數據庫的兩種方式

在VB中,使用ADO訪問數據主要有兩種方式,一種是非編程訪問方式,使用ADO Data控件方式,通過對控件的綁定來訪問數據庫中的數據;另一種是ADO對象模型編程訪問方式,通過定義對象和編寫代碼來實現對數據的訪問。

2.3 ADO兩種訪問方式比較

使用ADO Data控件在連接數據庫時,不需要創建連接對象和記錄集對象,直接設置相關屬性就可以了,簡化了編程,但在功能上有所限制,對數據庫的連接在程序運行時難以改變,在訪問大型數據庫時效率比較低。如果通過對象模型編程方式連接數據庫時,則對數據庫的操作非常靈活,效率上也會大大提高。本系統采用的是編程方式。

3 數據轉換方法與步驟

3.1 主窗體設計

3.1.1 界面設計

主窗體上主要包括一個標簽label1和兩個命令按鈕command1、command2控件,如圖1所示。

圖1 主窗體

3.1.2 窗體主要代碼

Private Sub Command1_Click()

Form2.Show

Me.Hide

End Sub

Private Sub Command2_Click()

Form4.Show

Me.Hide

End Sub

3.1.3 公共變量及模塊

首先要引用“Microsoft ActiveX Data Objects2.6 Library” 和“Microsoft Excel 11.0 Object Library”系統庫。

公共變量及模塊設置如下:

Public fn As String

Public fn1 As String

Public fncount As Integer

Public fn1count As Integer

Public conn As New ADODB.Connection

Public cn As New ADODB.Connection

Public Sub mdbcon()

conn.Open "provider=microsoft.jet.oledb.4.0;data source=" & fn &";persist security info=false"

conn.CursorLocation =adUseClient

End Sub

Public Sub xlscon()

Set cn = New ADODB.Connection

With cn

.Provider = "microsoft.jet.oledb.4.0;"

.ConnectionString = "data source=" & fn1 & " ;" & "extended properties= excel 8.0;"

.CursorLocation = adUseClient

.Open

End With

End Sub

3.2 Excel數據轉換成Access數據設計

3.2.1 打開Excel文件的窗體設計,如圖2所示。

圖2 打開Excel文件窗體

3.2.1.1 該窗體包括的主要控件有:文本框控件(text1)用于顯示所選文件路徑;圖像控件(Image1)用于打開對話框;對話框控件(cdl1)、組合框控件(combo1)用于顯示表的名稱;網格控件(dg1)用于顯示Excel表中的記錄;命令按鈕(cmd1)用于調用下一個窗體。

3.2.1.2 主要代碼:

Private Sub Image1_Click()

Label3.Visible = False

combo1.Clear

Dim rsxls As New ADODB.Recordset

cdl1.Filter = "Excel文件(*.xls)|*.xls|所有文件(*.*)|*.*"

cdl1.CancelError = True

cdl1.DialogTitle = "打開Excel文件"

cdl1.ShowOpen

fn1 = cdl1.FileName

Text1.Text = cdl1.FileName

If cn.State = adStateOpen Then

conn.Close

End If

Call xlscon

If fn1 = "" Then

MsgBox "請重新選擇Excel文件!", vbInformation + vbOKOnly,"溫馨提示"

End If

Set rsxls = cn.OpenSchema(adSchemaTables)

Do Until rsxls.EOF

combo1.AddItem rsxls!table_name

rsxls.MoveNext

Loop

rsxls.Close

Set rsxls = Nothing

End Sub

Private Sub Combo1_Click()

Dim i As Integer

Set dg1.DataSource = Nothing

dg1.Refresh

Label3.Visible = True

Dim oRS As New ADODB.Recordset

oRS.Open "Select * from [" &combo1.Text & "]", cn, adOpenStatic,adLockOptimistic

oRS.Update

i = oRS.RecordCount

fn1count = oRS.Fields.Count

Label3.Caption = "共有" & i& "條記錄"

Label4.Caption = "共有" & oRS.Fields.Count & "個字段"

Set dg1.DataSource = oRS

dg1.Refresh

Cmd1.Enabled = True

End Sub

Private Sub Cmd1_Click()

Form3.Show

Me.Hide

End Sub

3.2.2 打開Access文件的窗體設計,如圖3所示。

圖3 打開Access文件窗體

3.2.2.1 該窗體包括的主要控件有:文本框控件(text1)用于顯示所選文件路徑;圖像控件(Image1)用于打開對話框;對話框控件(cdl2)、組合框(com1)用于顯示表的名稱; 網格控件(msg1)用于顯示Access數據庫中表的結構信息(字段名稱、字段大小、字段類型):命令按鈕(cmd1)用于執行“導入”命令。

3.2.2.2 主要代碼:

Private Sub Image1_Click()

Dim rs As New ADODB.Recordset

cd1.Filter = "Access文件(*.mdb)|*.mdb|所有文件(*.*)|*.*"

cd1.CancelError = True

cd1.DialogTitle = "打開Access文件"

cd1.ShowOpen

fn = cd1.FileName

Text1.Text = fn

If fn = "" Then

MsgBox "請重新選擇Access文件!", vblnformation + vbOKOnly

End If

If conn.State = adStateOpen Then

conn.Close

com1.Clear

End If

Call mdbcon

Set rs = conn.OpenSchema(adSchemaTables)

Do Until rs.EOF

If Left(rs!table_name, 4) <>"MSys" Then

com1.AddItem rs!table_name

End If

rs.MoveNext

Loop

rs.Close

Set rs = Nothing

End Sub

Private Sub com1_Click()

Dim P As Integer

Dim sr As New ADODB.Recordset

sr.Open com1.Text, conn,adOpenKeyset, adLockOptimistic

Label3.Visible = True

Label3.Caption = "共有" & sr.Fields.Count & "個字段"

fncount = sr.Fields.Count

With msg1

.Rows = sr.Fields.Count + 1

For P = 1 To sr.Fields.Count

.TextMatrix(P, 1) = P

.TextMatrix(P, 2) = sr.Fields(P- 1).Name

.TextMatrix(P, 3) = sr.Fields(P- 1).Type

.TextMatrix(P, 4) = sr.Fields(P- 1).DefinedSize

Next P

End With

sr.Close

Set sr = Nothing

Cmd1.Enabled = True

End Sub

Private Sub Cmd2_Click()

Dim i As Integer

Dim S As Integer

Dim rst As New ADODB.Recordset

Dim rs As New ADODB.Recordset

If fnlcount > fncount Then

rst.Open "Select * from [" &Form2.combo1.Text & "]", cn,adOpenDynamic

rs.Open "select * from " &com1.Text & " ", conn,adOpenDynamic, adLockOptimistic

rs.MoveLast

i = rst.RecordCount

Do While Not rst.EOF

On Error Resume Next

rs.AddNew

For S = 0 To fn1count - 1

rs.Fields(S) = rst.Fields(S)

Next S

rs.MoveNext

rst.MoveNext

i = i - 1

If i = 0 Then

Form3.Caption = "數據導入完畢!"

rs.Update

MsgBox "已成功導入" & rst.RecordCount & "條記錄!",vblnformation, "溫馨提示"

Cmd2.Caption = "關閉"

Else

Form3.Caption = "數據正在導入,請稍候........"

End If

Loop

Else

MsgBox "Excel表數據字段數大于Access表數據字段數!",vbExclamation, " 溫馨提示"

End If

rs.Close

rst.Close

Set rs = Nothing

Set rst = Nothing

Cmd1.Enabled = False

End Sub

3.3 Access數據轉換成Excel數據設計

3.3.1 界面設計,如圖4所示。

圖4 Access數據轉換成Excel數據窗體

3.3.2 該窗體包括的主要控件有:文本控件(text1)用于顯示所選文件路徑;圖像控件(image1)用于打開對話框;對話框控件(cmdg1)、組合框(combo1)用于顯示表的名稱;列表框控件(1ist1)用于顯示Access數據庫中表的字段名稱;命令按鈕(cmd1)用于執行“導出” 命令。

3.3.3 主要代碼:

Private Sub Image1_Click()

Dim rsl As New ADODB.Recordset

Cmdg1.Filter = "Access文件(*.mdb)|*.mdb|所有文件|*.*"

Cmdg1.CancelError = True

Cmdg1.DialogTitle = "打開Access文件"

Cmdg1.ShowOpen

fn = Cmdg1.FileName

Text1.Text = Cmdg1.FileName

If fn = "" Then

MsgBox "請重新選擇Access文件!", vblnformation + vbOKOnly

End If

If conn.State = adStateOpen Then

conn.Close

Combo1.Clear

End If

Call mdbcon

Set rs1 = conn.OpenSchema(adSchemaTables)

Do Until rs1.EOF

If Left(rs1!table_name, 4) <>"MSys" Then

Combo1.AddItem rs1!table_name

End If

rs1.MoveNext

Loop

rs1.Close

Set rs1 = Nothing

End Sub

Private Sub Cmd1_Click()

Dim rst As New ADODB.Recordset

rst.Open "select " & Left(Trim(Text1.Text), Len(Trim(Text1.Text))- 1) & " from " & Combo1.Text &" ", conn, adOpenDynamic,adLockOptimistic

Dim xlsapp As Excel.Application

Dim xlsbook As Excel.Workbook

Dim xlsSheet As Excel.Worksheet

Dim i, j As Long

Set xlsapp = CreateObject("excel.application")

Set xlsbook = xlsapp.Workbooks.Add

Set xlsSheet = xlsbook.Worksheets(1)

On Error Resume Next

j = 1

Do Until rst.EOF

For i = 1 To rst.Fields.Count

xlsSheet Cells(j, i) = rst.Fields(i - 1)

Next i

rst.MoveNext

j = j + 1

Loop

xlsapp.Visible = True

xlsbook.SaveAs App.Path & "導出數據.xls"

Set xlsapp = Nothing

rst.Close

conn.Close

Set rst = Nothing

Set conn = Nothing

Unload Me

Unload fm

End Sub

Private Sub Combo1_Click()

Dim i As Integer

Dim srs As New ADODB.Recordset

List1.Clear

srs.Open Combo1.Text, conn,adOpenKeyset, adLockOptimistic

i = srs.Fields.Count

For i = O To srs.Fields.Count- 1

List1.AddItem srs.Fields(i).Name

Next i

srs.Close

Set srs = Nothing

End Sub

4 結束語

從上面的研究中可以看出,利用VB實現Excel數據與Access數據之間的相互轉換,代碼簡單,容易實現,減少了工作量。Access數據轉換成Excel數據時,可通過列表框控件選取需要導出的信息; Excel數據轉換成Access數據時,Excel表中的字段順序要和Access表中的字段順序一致,不能更改Access表中字段的順序。

10.3969/j.issn.1001-8972.2011.04.047

本文是省級立項課題《實踐教學及其設備實時管理系統研究》研究論文課題審批單位:遼寧省教育科學規劃領導小組辦公室

課題批準號:JG09DB288

唐淑玲(1972—),女,遼寧大連人,大連職業技術學院,講師,研究方向為計算機應用。

猜你喜歡
數據庫
數據庫
財經(2017年15期)2017-07-03 22:40:49
數據庫
財經(2017年2期)2017-03-10 14:35:35
兩種新的非確定數據庫上的Top-K查詢
數據庫
財經(2016年15期)2016-06-03 07:38:02
數據庫
財經(2016年3期)2016-03-07 07:44:46
數據庫
財經(2016年6期)2016-02-24 07:41:51
數據庫
財經(2015年3期)2015-06-09 17:41:31
數據庫
財經(2014年21期)2014-08-18 01:50:18
數據庫
財經(2014年6期)2014-03-12 08:28:19
數據庫
財經(2013年6期)2013-04-29 17:59:30
主站蜘蛛池模板: h网站在线播放| 蜜臀av性久久久久蜜臀aⅴ麻豆| 亚洲精品无码高潮喷水A| 色婷婷国产精品视频| 久久黄色免费电影| 自拍欧美亚洲| 久久精品无码一区二区国产区| 亚洲成肉网| 亚洲伊人天堂| 亚洲精品无码AⅤ片青青在线观看| 亚洲欧美不卡视频| 99精品高清在线播放| 国产一级精品毛片基地| 久久香蕉欧美精品| 毛片久久网站小视频| 99在线视频免费| 国产小视频在线高清播放| 国产无人区一区二区三区| 九色免费视频| 在线视频97| 久久国产精品夜色| 久久精品亚洲专区| 伊人久久精品无码麻豆精品| 亚洲最新在线| 丰满的熟女一区二区三区l| 亚洲国产一成久久精品国产成人综合| 夜夜操天天摸| 亚洲视频四区| 看你懂的巨臀中文字幕一区二区| 国产激情无码一区二区三区免费| 沈阳少妇高潮在线| 玩两个丰满老熟女久久网| 国产精品色婷婷在线观看| 国产精品尤物铁牛tv| 国产亚洲欧美日韩在线一区二区三区| 免费无码网站| 久久久久亚洲精品成人网 | 免费国产高清视频| 国产小视频免费| 国产真实二区一区在线亚洲| 欧美人与牲动交a欧美精品 | 亚洲视频二| 亚洲欧美另类久久久精品播放的| 欧美激情二区三区| 中国一级特黄视频| 在线观看精品自拍视频| 老色鬼久久亚洲AV综合| 国产色爱av资源综合区| 中文字幕无码中文字幕有码在线| AV不卡在线永久免费观看| 一级毛片不卡片免费观看| 国产精品无码一二三视频| 国产一区成人| 国产一级毛片yw| 日韩欧美国产成人| 中日韩欧亚无码视频| 国产成人永久免费视频| 四虎精品国产永久在线观看| 尤物午夜福利视频| 欧美亚洲综合免费精品高清在线观看| 日韩中文字幕免费在线观看| 亚洲国产精品美女| 欧美日韩第三页| 亚洲浓毛av| 久久久受www免费人成| 精品欧美一区二区三区在线| 久久国产拍爱| 欧美日韩国产系列在线观看| 午夜福利无码一区二区| 亚洲日本一本dvd高清| 久久午夜夜伦鲁鲁片不卡| 草草影院国产第一页| 无码免费视频| 国产精品亚洲欧美日韩久久| 午夜一区二区三区| 四虎影视永久在线精品| 真人高潮娇喘嗯啊在线观看| 亚洲欧美成人综合| 国产最爽的乱婬视频国语对白| 久久亚洲美女精品国产精品| 免费观看国产小粉嫩喷水| 又爽又大又光又色的午夜视频|