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

巧用VB的ADO處理各類數據庫故障解析

2017-03-15 12:51:20馬亮
電腦與電信 2017年6期
關鍵詞:數據庫

馬亮

(甘肅省天水市職業技術學校,甘肅 天水 741000)

巧用VB的ADO處理各類數據庫故障解析

馬亮

(甘肅省天水市職業技術學校,甘肅 天水 741000)

操作系統從W in7開始變成了64位系統,導致VB下基本的界面操作都變得很卡,原先提供的眾多命令、函數等不能正常運行。幸好快捷而且強大的數據庫連接工具ADO依然正常,但操作系統、數據庫版本、鏈接庫版本、數據庫信息量都會對數據產生影響,教程的理論分析與實際情況往往存在差異,對此本文主要分析筆者在編寫程序時遇到的實際問題、困惑以及解決方法。

VB;ADO;數據庫;故障

1 引言

隨著各類數據庫版本的不斷升級,VB的功能不斷遭到拋棄。Access、VB默認版本是97,Excel版本不能超過2003。尤其操作系統從Win7開始變成了64位系統,導致VB下基本的界面操作都變得很卡,原先提供的眾多命令、函數等不能正常運行。幸好快捷而且強大的數據庫連接工具ADO依然正常,但理論和實際往往差別很大,操作系統、數據庫版本、鏈接庫版本、數據庫信息量都會對數據產生影響,教程一般使用幾條信息演示處理過程,而實際情況卻千差萬別,以下就是作者在編寫程序時遇到的實際問題、困惑以及解決方法。

2 數據庫的基本操作

2.1 讀寫數據庫準備工作

(1)引用

M icrosoftActiveX Data Objects2.5 Library

M icrosoftDAO 3.6Object Library

M icrosoftData Formatting Object Library

(2)添加控件

MSHFlexGrid1’表格_控件

Time1 ’計時器_控件

ProgressBar1’進度條_控件

(3)變量定義

Public Cn As New ADODB.Connection

Public RsAsNew ADODB.Recordset

Public路徑As String’數據庫文件的存放位置

2.2 鏈接數據庫

(1)打開Excel文件,擴展名xls

Cn.ConnectionString="Provider=M icrosoft.Jet.OLEDB.4.0; Persist Security Info=false;Data Source="&路徑&";Extended Properties='Excel8.0;HDR=Yes'" ’路徑字符串變量表示數據庫文件存放位置

Cn.Open

Rs.Open"select*from["&表冊&"$]",cn,adOpenKeyset,adLockOptim istic’表冊字符串變量表示Excel文件包含表冊(Sheet)的名稱

(2)打開Vf文件,擴展名mdb

cn.ConnectionString="provider=msdasql;DRIVER=M icrosoftVisual FoxPro Driver;UID=;Deleted=yes;Null=no;

Collate=Machine;BackgroundFetch=no; Exclusive=No; SourceType=DBF;SourceDB="&路徑&";"

cn.Open

Rs.Open"select*from"&路徑&"",cn

(3)打開Acess文件

Cn.open"Provider=M icrosoft.Jet.OLEDB.4.0;Data Source=" &路徑

strSQL="SELECT*FROM"&表冊名rs.Open strSQL,conn,3,3

也可直接使用Data控件就可實現操作。

注:以上過程只是打開或鏈接數據庫文件,并非讀取數據。

Excel因其易學、操作簡單,所以用戶量很大,但Excel算不上數據庫軟件。Excel2003以下版本數據量只有6萬多條(65536)。Excel2007數據量可達1百萬(1048576)。

Vf屬于專業數據庫軟件,信息量可到10億條,但使用者并不太多。

Access讀寫最為簡潔、方便,但目前已被大家遺忘。

2.3 讀取數據庫信息

(1)一次性讀取到表格中

SetMSHFlexGrid1.DataSource=Rs

優點:操作簡單、讀取速度極快,即便用戶對該數據庫內容一無所知,也不影響數據的讀取。

缺點:每一列數據類型必須保持一致,不然會出現信息缺失,且只顯示信息的前2048條。(解決方法將在后面敘述)

(2)按順序逐條讀取

1)讀取第R條(行),第C列數據至變量S中

Dim Sas String

Rs.Move(R)

S=Rs.Fields(C).Value

2)將數據庫中的數據全部讀取到表格MSHFlexGrid1中

假設此數據庫有R條數據,C個字段。

Dim ias Long:dim jas Long

Rs.MoveFirst

For i=1 to R

For j=1 to C

Rs.MoveNext

MSHFlexGrid1.TextMatrix(R-1,C-1)=Rs.Fields(C).Value

Next j

Next i優點:不用將數據庫的全部數據讀取,只選擇所需的數據。

缺點:需要全部讀取且數據庫非常龐大時,非常耗時,還會出現假死或死機的現象。在讀取過程中也不能中斷或取消。(解決方法將在后面敘述)

注:數據庫第一行為字段,并非數據,可不讀取,以下是數據庫操作的幾條常用命令。

Rs.Move(Num)’移動到第Num條信息

Rs.MoveFirst’移動到第一條信息

Rs.MoveLast ’移動到最后一條信息

Rs.MoveNext ’移動到下一條信息

Rs.MovePrevious’移動到上一條信息

(3)按字段讀取

例:讀取“姓名”字段中的前5條數據,保存至List1中

List1.Clear’清空記錄列表

Rs.MoveFirst

for i=1 to 5

list1.AddItem Rs.Fields("姓名"),i

Rs.MoveNext

next i

優點:數據信息與列無關,只要確定字段名稱,就可任意讀取。

2.4 寫入數據庫信息

將MSHFlexGrid1中的所有信息保存在Excel表冊中,且表冊名稱為“數據”,列表中的第一行視為字段名稱。

Dim路徑as String

路徑=“****”’文件存放位置和名稱。例:路徑=“C:data文件.xls”

Cn.Open"Provider=M icrosoft.Jet.OLEDB.4.0;"&"Data Source="&路徑&";Extended Properties=""Excel 8.0;HDR= YES;"""

’------------------如果文件需要新建則加入以下代碼------------------------

cn.Execute"CREATETABLE["&路徑&"]."&表頭Rs.Open"select*from[中考成績庫$]",cn,adOpenKeyset,adLockOptim istic

’---------------------------------------------------------------------其中表頭部分格式包括:字符串chr,數字int

字符串,數字:表示字段名稱,chr表示數據類型為字符型,int表示數字類型,如果有多個字段則用逗號隔開。

2.5 斷開數據鏈接

Rs.Close

Cn.Close

數據讀寫完后要斷開連接,否則后面的程序可能出現不可預料的錯誤。

易出現故障:如果數據沒有正常打開,則關閉時會引發系統故障,所以在關閉前應先判斷數據庫狀態。

3 故障處理

(1)一次性讀取數據時,不能全部讀取

問題敘述:讀取數據時用Set MSHFlexGrid1.Data-Source=Rs命令,方法最為簡潔,但讀取的數據量不能超過2048條(根據系統的不同,數據量也不相同),網上有很多人想了很多解決方法,但均無效果。最終只能采取逐行讀取的方法,費時費力。

解決方法:其實這是VB6.0的一個漏洞,用戶只需打Vb-SP6的補丁即可。

(2)一次性讀取數據時,數據不完整

問題敘述:整個數據一次性讀取時,還有一個錯誤就是數據的缺失,故障原因就是信息的格式不統一,例如,數據庫中某個字段的第一個數據是數字,而后面非數字格式的信息就會變成空字段。

解決方法:在建立數據庫或保存數據庫時將數據格式統一成“字符串”格式。讀取之后根據需要再進行轉換。對于Excel文件,在保存時數據前加一個單引號即可。

(3)數據量過大,讀取時死機

問題敘述:當數據量為幾萬或幾十萬時,讀取過程中可能因硬件原因導致假死或死機現象,即便高配置計算機也會出現卡頓現象,在普通循環命令中這種現象也比較常見,而且中途無法選擇放棄。

解決方法:

方法1:利用控件-計時器,來完成循環命令

準備工作:加入兩個按鈕:command1、command2,用于循環的開始、暫停或結束的控制。

加入一個計時器控件:timer1,用于代替循環命令。

加入進度條:ProgressBar1,用于查看程序運行進度。

代碼改寫前:

For i=1 to 10000

<循環體>

Nexti

代碼改寫后:

Dim計數as Long’用于控制循環運行次數

Private Sub Command1_Click()’控制循環開始按鈕

Timer1.Interval=10’設置程序運行速度,單位毫秒

計數=1 ’初始循環的次數

ProgressBar1.Max=10000’定義進度條的最大值

ProgressBar1.Value=1’初始進度條進度

Timer1.Enable=True’循環開始執行

End Sub

Private Sub Timer1_Timer() ’計時器控件、放置循環體

計數=計數+1

If計數<10000 then

<循環體>

ProgressBar1.Value=i

Else

Timer1.Enable=False’循環結束

End If

End Sub

Private Sub Command2_Click()’控制循環結束或暫停按鈕

If Timer1.Enable=False then

Timer1.Enable=True

Else

Timer.Enable=False

End If

End Sub

計時器中可放置多個循環體,并不需要建立多個計時器插件。例:

Private Sub Timer1_Timer() ’計時器控件、放置循環體

Selectcase K ’K為循環控制參數

Case0:Call函數A

Case1:Call函數B

……

End Select

End Sub

注:此方法看似多了很多條命令,讓程序變得復雜。但讓程序變得可以控制,可根據硬件配置在<循環體>中加入小的For循環,以減少程序的運行時間。而且進度條也能顯示流暢的進度動畫。

方法2:利用Sleep函數

Public Declare Sub Sleep Lib"kernel32"(ByVal dwM illisecondsAs Long)’函數定義

代碼改寫后:

For i=1 to 10000

<循環體>

Sleep 10’暫停10毫秒

DoEvents’轉讓控制權

Next i

DoEvents的作用是在循環體執行暫停時,可以執行其它命令,例如按下暫停按鈕。但此命令在使用時,需注意數據的嵌套使用,很容易出現未知的數據錯誤。

(4)斷開數據庫時出現異常錯誤

問題敘述:數據庫使用完,必須斷開鏈接。斷開鏈接后不能再次斷開。問題看似簡單,但在使用過程中并非如此,除非程序運行在理想狀態下。數據庫的鏈接、讀取、用戶的誤操作都會產生問題。

解決方法:

使用錯誤檢測跳轉命令:On ErrorGoTo

命令含義:程序運行出現錯誤跳轉到指定的命令行。

程序如下:

On ErrorGoTo結束

K=0’變量,用于測試程序執行到了第幾步出現了錯誤

<鏈接數據庫語句>:K=1

<讀取數據庫語句>:K=2

<關閉數據庫>: K=3

結束:

Select case K’從K的數值就可看出程序從哪個階段產生的跳轉

Case 0:<程序>’數據庫打開錯誤

Case1:<程序>’數據庫讀取錯誤

Case2:<程序>’數據庫沒有正常關閉

Case 3:<程序>’數據庫操作正常

End Select

注:錯誤檢測跳轉命令(On ErrorGoTo)會忽略程序產生中所有的錯誤,使用過程中要謹慎。

(5)判斷數據庫字段和數據量

問題敘述:在讀取數據庫數據時,如果對內容一無所知就必須先判斷字段和數據量以及字段名稱,不然一定會產生錯誤。

解決方法:

判斷數據條數,使用軟件自帶命令Rs.Fields.Count即可。

判斷字段數量,此數據不可遇見,只能一一測試,就利用上述的錯誤檢測跳轉命令。

添加下拉列表控件List1,用于記錄所有的字段名稱。

Dim Ias interge:i=0’計算字段序號和統計數量

List1.Clear’清空記錄列表

On ErrorGoTo結束’循環體語句出現錯誤時跳出

Do’字段數量未知,所以需要一個無限的循環

i=i+1

list1.Add Item Rs.Fields.Item(i).Name,i’將讀取到的字段名稱記錄到列表中

Loop

結束:

命令解釋:Rs.Fields.Item(i).Name讀取第i個字段名稱,當出現數據讀取錯誤時,表示字段已經讀取結束。

此時:List1里存放的就是每個字段的名稱,i-1就是字段總數。

4 結束語

本文介紹了如何利用VB的ADO處理各類數據庫的故障問題,有利于提高數據庫的處理速度,以期為相關技術人員提供有價值的參考。

[1]柏建普,杜娟.ADO技術在VB訪問SQL數據庫中的應用[J].電腦知識與技術,2013(29):6481-6485.

Analysison the Resolution of Database FaultsUsing ADO in VB

Ma Liang
(TianshuiVocationaland TechnicalSchoolof Gansu Province,Tianshui741000,Gansu)

The operating system changing from Win7 into the 64 bit system has lead the VB operation interface to be not smooth,and the commandsand functions cannotwork properly.Fortunately,the database connection toolADO is stillnormal.However,operating system,database version,linking library version and database information w illhave an impacton the data.And there are differencesbetween the theoreticalanalysis and the actualsituation of the tutorial.This papermainly analyzes the practical problemsencountered in programming and itssolutions.

VB;ADO;database;fault

TP311.13

A

1008-6609(2017)06-0068-04

馬亮(1977-),男,甘肅天水人,本科,助教,研究方向為計算機應用。

猜你喜歡
數據庫
數據庫
財經(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
主站蜘蛛池模板: 美臀人妻中出中文字幕在线| 99久视频| 国产在线视频导航| 国产精品专区第1页| 伊人久久久久久久| 国产xx在线观看| 亚洲精品无码日韩国产不卡| 亚洲第一页在线观看| 久久这里只有精品66| 白浆免费视频国产精品视频| 精品无码国产自产野外拍在线| 亚洲av无码牛牛影视在线二区| 伊伊人成亚洲综合人网7777| 免费不卡视频| 欧美天天干| 国产一区二区福利| 亚洲AⅤ波多系列中文字幕| 日本欧美一二三区色视频| 国产成人乱码一区二区三区在线| 免费一看一级毛片| 免费高清自慰一区二区三区| 国产三级成人| 华人在线亚洲欧美精品| 亚洲无码高清一区二区| 国产精品欧美激情| 欧美精品在线看| 国产成人无码AV在线播放动漫| 国产69囗曝护士吞精在线视频| 欧美成人二区| 国产成人免费高清AⅤ| 少妇精品网站| 亚洲国产一区在线观看| 久久香蕉国产线看观看式| 视频一本大道香蕉久在线播放| 色欲国产一区二区日韩欧美| 免费在线一区| 丁香五月激情图片| 欧美另类精品一区二区三区| 九九热视频精品在线| 亚洲国产成人久久精品软件| 91亚洲国产视频| 欧美日韩精品在线播放| 秘书高跟黑色丝袜国产91在线| 亚洲熟女中文字幕男人总站| 日韩毛片在线视频| 高清亚洲欧美在线看| 亚洲中文字幕av无码区| 尤物特级无码毛片免费| 另类综合视频| 日本欧美在线观看| 一级在线毛片| AV在线麻免费观看网站| 999福利激情视频| 1024国产在线| 老色鬼久久亚洲AV综合| a色毛片免费视频| 中国特黄美女一级视频| 国产自视频| 91久久性奴调教国产免费| 欧美在线天堂| 亚洲视频四区| 女同国产精品一区二区| 伊人久久精品亚洲午夜| 久久精品91麻豆| 日韩成人在线一区二区| 国产精品原创不卡在线| 91人妻日韩人妻无码专区精品| 欧美一级在线| 97在线碰| a毛片在线免费观看| 午夜不卡视频| 人人妻人人澡人人爽欧美一区| 伊人久久福利中文字幕| 久久亚洲精少妇毛片午夜无码| 91精品情国产情侣高潮对白蜜| a级免费视频| 免费啪啪网址| 午夜国产不卡在线观看视频| 亚洲人妖在线| 欧美激情视频一区二区三区免费| 国产精品任我爽爆在线播放6080| 1级黄色毛片|