PLM之家PLMHome-工业软件践行者

[原创] vb操作access数据库

[复制链接]

2016-12-11 15:03:17 2679 0

8

主题

10

回帖

146

积分

注册会员

积分
146
QQ
发表于 2016-12-11 15:03:17 | 显示全部楼层 |阅读模式

请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!

您需要 登录 才可以下载或查看,没有账号?注册

x
c# c++ vb 是可以互相调用的
: k2 @7 ~. x  w; |5 @
* D3 e4 X. R% o3 H" `: P  uvb操作access数据库 的方法
: _' P. Q+ i- t4 B; G6 @/ ^3 G- l$ M2 G2 W5 r. Q8 x9 Q# Y
首先要安装  Office2003sp2
1 T7 d* S) K8 {6 {& f2 ^2 X, [! s& k9 Y" s# B
列子:读写数据库(.mdb)% S. c0 A. S6 z* B* m
8 I' J6 S" X4 j* g& H/ K
1.创建 mdb5 v7 N) B: A7 Y7 c: r; k- O
开始->所有程序->Office2003->Access 2003  新建一个空数据库 保存位置C:\report.mdb  7 b8 O, P5 X) X& V  f7 W
创建一个表格 并重新命名为test          (操作和Excel类似)
% F2 u8 X; a0 D) d
  |8 o  K4 l" G$ o7 R0 ~" G0 W注意 表格名称 和源代码要对应5 x8 U- }4 w. A
5 D* f) C* Y! O3 i) N/ S
: p( b2 Q4 z6 |! M
2.注册数据源(代码中已经注册)和写代码
$ h6 @! K3 S6 D4 F: w
" |8 c3 h1 l& ~" V; w% ?* V1 O8 ?& s+ @. \* {! W: y
在新建工程时工具箱中是没有Adodc控件和MSHFlexGrid控件的,
# g; f% f/ h$ J我们必须点击菜单中的【工程】-【部件】,7 `! f( [5 N! i" n) [# h
在对话框中勾选“Microsoft ADO Data Control 6.0 (SP6)”和) q% I& `9 N2 d7 o% P/ j
“Microsoft Hierarchical FlexGrid Control 6.0 (SP4)”,6 O& b1 l, a3 I- I
最后点击【确定】,这样Adodc控件和MSHFlexGrid控件就已经放置在工具箱中了5 |5 R! W7 `" ^6 F7 j) p6 H5 I
! L  v) ?6 Q" V/ X7 l/ {0 }
6 T& d8 ]: C, n# v* u2 V% m$ y/ _
添加4个文本控件  Text1 和 Text2  和 Text3 和 Text4
( o( K- G  Q8 x# d5 v% h添加一个按钮 ID修改成 “保存”
( \! j5 ?8 d& c9 u7 l添加一个 List1- y' P+ A3 U; r6 `" z' h

8 t3 L; w4 X2 f$ O代码如下
; v& m& w0 q6 w. g' D& H, ?
4 a8 D7 U7 J) Z0 i- H- ]; V  v9 E4 l' L3 I
Public conn As New ADODB.Connection     '标记连接对象
( ?) z/ u/ H+ G# ?; pDim sql As String
* P# d% W$ `0 b' eDim rs_maxcut As New ADODB.Recordset
3 x! ~' M2 k/ r2 FDim str As String
$ \' j+ v; M% W) `# q7 hDim aa As Double, bb As Double
% h- T; o) N. p/ RDim mbd As String; l- J. e+ X/ M0 F5 I! n
Dim 总页数 As Integer, 行数 As Integer, 列数 As Integer
& @5 I- n, x/ n  ~Dim 内容(999, 999) As Double
  f6 x, _9 h5 e1 ]  m; [# k! j4 B
Public Function cnn() As String
) ?; f7 w2 ^$ {7 U2 N/ U- b: t: o    cnn = "rovider=Microsoft.Jet.OLEDB.4.0;Data Source=" & mbd & "ersist Security Info=True;Jet OLEDBatabase Password=123"4 N. m* ^1 {8 P( Y( Z) d3 X9 s
End Function1 q# N8 M2 s- j& Z6 j
2 `, j5 p; ]2 k9 K7 o6 b
Private Sub 保存_Click()
+ r, @0 Y5 A1 V+ O' D- t6 l7 [* J, p0 q9 |2 X4 R* N  F
writeDatabase, t9 n+ M3 d. t; k
    End
+ y; }: C) A5 B9 T& ^3 `0 KEnd Sub) N9 i( B6 z5 ]  ?' m" x3 x
5 W% l# @1 n0 h* J4 L" ]" E
Private Sub Form_Load()( b& S. @! S3 j! R6 U# Z
, a0 v+ O6 x' T
mbd = "D:\UG_OPEN\ini\数据库.mdb"+ w) Z+ E( e  z) d$ l( b% x% ?6 A
: G. m: F6 O' O0 b1 u! e% Z/ g
    conn.Open cnn '连接数据库5 b+ A/ J6 E( [( ]5 T
    readdatabase
; w5 ?: `$ T/ L3 C" v& q5 e, I! X( |. G    Me.Text1.Text = "行数" & 行数
( e8 N  Z5 p" ?; N1 h5 ]    Me.Text2.Text = "列数" & 列数
& H* W' a8 M3 i# W. iMe.Text3.Text = aa
- f3 b" n1 G- ^( f) YMe.Text4.Text = bb
/ K4 @! G9 A' c  `6 w, p2 p! vEnd Sub
/ _5 C( t1 p- E/ J3 c4 D$ l9 M& j6 e+ z$ q' Y& q
Public Sub readdatabase() '读数据 (读数据和保存数据实际上是一样的操作方法)2 ~, @0 a* |' M2 F
    Dim i As Long, q0 A8 c. v! Y( K- {* O
    sql = "select * from test"
" ?" }# k1 p8 N0 H9 Y7 P    rs_maxcut.Open sql, conn, adOpenKeyset, adLockPessimistic  '打开记录集
5 }2 g" a( w% c) ^* g) \3 H  f1 j1 K, r! P5 `

' u6 h% y; M# c1 x) A- _总页数 = rs_maxcut.PageCount  '页大小rs_maxcut.PageSize+ d9 L* H4 H8 r; j7 Q
行数 = rs_maxcut.RecordCount  '行数 (排除标题)4 n, @; Q( E6 m8 l! c; q5 r
列数 = rs_maxcut.Fields.Count - 1 '列数 (排除标题)4 {" s1 G) y: t; T  |) W
5 y3 L% e0 y8 ?5 v
    If rs_maxcut.EOF = False Then
( [6 \: N0 x0 ]% s) J% T: N        i = 0
; }) ?& m. ?" f9 w        Do While rs_maxcut.EOF = False3 Y8 b3 N# r$ h- H/ O4 s$ u
           i = i + 1' S. e7 k6 Z$ Y+ E- w
% G0 |6 n# L, x* V
           ' If i = 0 Then str = rs_maxcut.Fields(0).Name & rs_maxcut.Fields(1).Name '读标
  q1 Y5 x. y' G9 m0 p) Z& ]. H/ n# Z$ t) Z
            '第一行  或者  第一列的内容 他们属于标题 所以不管是行列我们都是重第二行或列开始的2 J$ `7 `& f; s
" C8 b0 v$ B/ H# N0 ^

& j+ b9 R/ u; L       If i = 1 Then aa = rs_maxcut.Fields(1).Value '除去标题后的,第1行第1列
4 C* J0 r6 @# U+ p) c$ q% B        If i = 2 Then bb = rs_maxcut.Fields(1).Value  '除去标题后的,第1行第2列" \( }0 _" U& y1 ]

" t  N+ u) L. ?8 Y6 ~  v        '读所有内容到数组
3 m( \; V& i; V  ~: N2 S        For j = 1 To 列数* b& S, {' K& ^5 R
        内容(i, j) = rs_maxcut.Fields(j).Value; Z% I  o4 |8 Q5 R" B
        Next0 C, U1 r$ N7 A
! g$ F4 A! Q* q/ q5 ~! L; a& t
        rs_maxcut.MoveNext '下一行
+ J* B* M. S6 X        Loop
. @6 D* w9 ^; ]9 }- D0 M3 R+ i       rs_maxcut.Close '关闭
- K0 {1 m. D+ K+ l2 d" B- t' ]; M; y2 r  |/ K2 M) k% c. `
1 s! q* ?- ]! n7 r2 \1 v
        List1.Clear! `, X  a% Z; S- }6 g
        For i = 1 To 行数9 u& P- g; _# ^* A
        For j = 1 To 列数
0 `7 J" _/ O9 V5 m; d% P        If j = 1 Then
5 d% Z! {8 L5 [2 x  c. x6 P6 A        str = 内容(i, j)
# o. N1 g- x  M& b+ m        Else; i) Q8 _0 s& c1 v; k- z4 V
        str = str & " , " & 内容(i, j)
* g" b  I# J7 a- |" ^) {, f        End If& k, g3 A1 P8 u& E4 Y
        Next
$ L3 L9 A! r4 ?8 L! S        List1.AddItem str, i# a; g. h) H/ {. E- W' C
        Next# g7 m  l5 e2 C. B0 |

' z  U! F* b4 K+ {$ D    End If( e& m( z/ u0 [
& b# |& p: `9 d1 ~

; X) O$ z8 L8 h$ c! d' Z, H. A! FEnd Sub
% o' z8 k* \8 u& e- Z2 }' t9 z3 {5 }& q
Public Sub writeDatabase() '保存数据(读数据和保存数据实际上是一样的操作方法): c2 [  q" D9 t
    On Error Resume Next, w* P+ M, ]" M0 Z1 P+ F8 i) j
    Dim i As Long
/ ^/ U$ X/ Q5 H' h7 S2 l8 k: _    i = 0" u. M, q$ }  `0 Q" {8 @, d
( l0 S: W" V8 c5 B+ z0 W
conn.Open cnn '连接数据库' I% R: j1 i2 D& H# |
7 _& l1 S6 r+ `. R! t" A6 L( g7 _
'sql = "select * from test"$ F1 \  d; l7 k; N+ J

9 N! w- i7 e% \  rs_maxcut.Open sql, conn, adOpenKeyset, adLockPessimistic  '打开记录集& }( P* u, O6 m9 S3 X

9 g! r0 D$ S/ `    If rs_maxcut.EOF = False Then8 f$ W8 I2 Y# z4 U

- n, M0 a4 }0 y6 u& a) r8 H3 D/ N        Do While rs_maxcut.EOF = False7 i8 \7 m9 ~3 k& M! W0 t" p
          i = i + 1
2 A: W6 q, R" I" ]( R' W+ z/ _6 F1 M* S+ o. x! Z
            '不要去修改 第一行  或者  第一列的内容  因为他们属于标题8 g/ T: E0 _. M
1 m" s' ~) m/ P* b! g$ Y8 \( X
            If i = 1 Then rs_maxcut.Fields(1).Value = Val(Text3.Text) '编辑第2行第1列
3 o" B4 v4 H) ~* _: L) k; H1 y0 U; U0 ~  J+ r
            If i = 2 Then rs_maxcut.Fields(1).Value = Val(Text4.Text) '编辑第2行第2列2 |9 q- c; }( n/ i
3 {( O1 Q" w1 [$ O' s
              rs_maxcut.MoveNext4 ]  w" g3 H& P% \- D3 U! a& W

. B. @3 M9 T; F8 s& J1 {( q        Loop6 C% F/ V5 ?% ]! U+ D
+ ]1 B7 _! F: W2 b4 Q
       rs_maxcut.Update3 H- \) `4 V+ S  P% I1 z& F5 N; S5 K
    rs_maxcut.Close
8 g( f# x, u+ v1 w$ G4 r
" S8 N9 l0 |* A' |2 s6 L    End If
$ M: W0 g8 j4 I2 C5 z. B* \$ |) b3 G2 S! w+ g, @8 g. D5 ]
End Sub6 G& c* {0 {  B: C2 V

$ [  ?% C2 k# [% c1 h0 H! k  }# s: @4 R1 v3 d/ @* N

( z, o+ M0 r$ i& }" v; e  O+ J) k& m" r' n! b" a$ @* z. k
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.doteam.tech
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 注册

返回列表 本版积分规则

  • 发布新帖

  • 在线客服

  • 微信

  • 客户端

  • 返回顶部

  • x
    温馨提示

    本网站(plmhome.com)为PLM之家工业软件学习官网站

    展示的视频材料全部免费,需要高清和特殊技术支持请联系 QQ: 939801026

    PLM之家NX CAM二次开发专题模块培训报名开始啦

    我知道了