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

[原创] vb操作access数据库

[复制链接]

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

15757753770 发表于 2016-12-11 15:03:17 |阅读模式

15757753770 楼主

2016-12-11 15:03:17

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

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

x
c# c++ vb 是可以互相调用的8 t  A! E- I9 P9 n! ]) t7 R3 D: F
4 v3 O5 F6 e0 u' N0 i2 d1 M
vb操作access数据库 的方法9 S1 z, G% y! X9 L6 q

4 N' v1 l% o9 t: m6 \$ U+ O首先要安装  Office2003sp2 0 O5 ?( w9 B) v6 D! K
2 c& e' U  ?. e% L3 c. K
列子:读写数据库(.mdb)* h4 k% A6 E' Y6 x

$ X) I9 ?: y% j1.创建 mdb
4 {' x) d1 s( z6 p2 ~7 ^, V) [( G开始->所有程序->Office2003->Access 2003  新建一个空数据库 保存位置C:\report.mdb  + S2 [+ G- K$ E# [) U
创建一个表格 并重新命名为test          (操作和Excel类似)
3 w8 R4 |+ o' Z0 `- x: K$ `" I3 X2 C! U$ I5 p8 N+ R- `( K8 E" _. F/ ?& m
注意 表格名称 和源代码要对应
* b$ Q* ~; ^. k  l& ~0 [6 R, J/ }% R; L0 r

/ ]+ h: m  m# Y4 J7 D2.注册数据源(代码中已经注册)和写代码
& Q/ r7 u, J4 e" q/ R: o% |% o
9 K" H( C8 S% E# I
. o& R) H4 h( X& {$ x在新建工程时工具箱中是没有Adodc控件和MSHFlexGrid控件的,
# c( K# Y. W# Z我们必须点击菜单中的【工程】-【部件】,
$ r* L3 j2 P+ w+ J6 l$ y$ C. H在对话框中勾选“Microsoft ADO Data Control 6.0 (SP6)”和
( {8 j  e; P6 g" C+ w, `3 o* g“Microsoft Hierarchical FlexGrid Control 6.0 (SP4)”,
! ^9 o2 V# ~; H3 ]% W+ |" q最后点击【确定】,这样Adodc控件和MSHFlexGrid控件就已经放置在工具箱中了, n% i3 w# ~; L) k. O7 y8 O+ M- ]2 @

' w& C7 N6 V$ ~% u# b, c( D
  l9 s1 E4 H0 S0 U添加4个文本控件  Text1 和 Text2  和 Text3 和 Text4 " z0 Q( H( i1 k1 B4 J$ n: m
添加一个按钮 ID修改成 “保存”
9 j9 A' _" m# P8 |, b添加一个 List1* U* S' n& B' z6 X( h/ E4 t* x, V
0 ?, L6 h: l+ m
代码如下1 x0 I9 X( L) k
! m1 \% z8 O3 S+ k
( v, t- a  x! y  B4 x  x0 k8 X
Public conn As New ADODB.Connection     '标记连接对象
* j; t8 _, A% _% {Dim sql As String+ t( [' F( P. k
Dim rs_maxcut As New ADODB.Recordset
6 M- }8 {* h5 gDim str As String- G/ q) J8 w  B5 Y# q6 }1 B) m
Dim aa As Double, bb As Double( l+ H0 B  ], J, V/ j
Dim mbd As String
5 m7 j2 `( ]5 L6 \1 X* |Dim 总页数 As Integer, 行数 As Integer, 列数 As Integer$ _3 t& P$ z  V4 z" K" ?% q! b
Dim 内容(999, 999) As Double( d) I, S- y" U- A  z
8 d$ e- ?$ |% b. M" w
Public Function cnn() As String
: i4 [7 b- k& P    cnn = "rovider=Microsoft.Jet.OLEDB.4.0;Data Source=" & mbd & "ersist Security Info=True;Jet OLEDBatabase Password=123"
3 }4 C& Z5 A' ^% F. O- _End Function8 E3 w  n- ^5 Q) M* y- t0 ~$ B! D9 F6 l

; b4 o) D: B! p- j  v: j0 kPrivate Sub 保存_Click()" I& J, e, z  s4 S$ X0 w

# q2 h7 J7 w& I7 m! Z+ Y' b1 h4 O writeDatabase( _8 d( k) e  e2 M
    End
( v& o0 o/ o; V; F6 X: p9 eEnd Sub) W! y. c" B6 l3 e: B

! U" o& g/ b% y- K9 D4 nPrivate Sub Form_Load()
4 b+ l- |/ Q1 T' i0 I9 k* Z, a9 K' _4 @6 p$ Q- Q6 }. @
mbd = "D:\UG_OPEN\ini\数据库.mdb"* \1 @8 @, j* K+ w4 P8 O
4 B& G; R* L1 ]$ E- T4 _/ d
    conn.Open cnn '连接数据库
. J5 W5 j) S$ _# Z: z    readdatabase6 y* I% ?' {0 }1 Y4 Y; @
    Me.Text1.Text = "行数" & 行数
" ]. z7 j; T3 O9 x! `' G    Me.Text2.Text = "列数" & 列数
+ D6 g, s2 N" E+ K8 EMe.Text3.Text = aa
$ M+ ^  s9 i- L1 [, jMe.Text4.Text = bb
! b' K; `3 o' v7 K. O1 w, a8 rEnd Sub
/ P- i% b# ~3 f& S! x+ h  @' y4 c
; N4 J2 C/ Z$ f7 B4 |: f' xPublic Sub readdatabase() '读数据 (读数据和保存数据实际上是一样的操作方法)
/ ~6 f  G& g' s+ p    Dim i As Long
% |4 |$ ]3 E4 {9 A    sql = "select * from test"
* o2 Q/ P6 l/ R) f2 A    rs_maxcut.Open sql, conn, adOpenKeyset, adLockPessimistic  '打开记录集
) |2 H( ^1 Q# \
4 L/ a( H, m" r% ]7 w1 ~
) D' b* R. J$ \$ d+ O总页数 = rs_maxcut.PageCount  '页大小rs_maxcut.PageSize
2 M1 f$ C" L( M+ O6 X; G行数 = rs_maxcut.RecordCount  '行数 (排除标题)0 N1 w6 z) B6 G% o. J  u0 M
列数 = rs_maxcut.Fields.Count - 1 '列数 (排除标题)3 \2 Z. G/ M+ @% Z, t% p
( h. n3 ?2 K* Y3 H6 I3 s
    If rs_maxcut.EOF = False Then
6 I/ j7 }5 F7 W0 a) I1 u# ]& p/ i; V5 A! @        i = 0% m/ _0 M6 h. u' Y$ F. W1 U
        Do While rs_maxcut.EOF = False3 V. H" O8 r: ~" [2 V
           i = i + 1' d, m2 U' D8 q2 E# L0 L+ G

, V& h$ a8 x, w1 Y           ' If i = 0 Then str = rs_maxcut.Fields(0).Name & rs_maxcut.Fields(1).Name '读标2 @2 X" k# @2 s* E

9 c' |& U6 m, e9 J* l2 r9 s! W$ Q            '第一行  或者  第一列的内容 他们属于标题 所以不管是行列我们都是重第二行或列开始的
# t% `1 Q2 b; o3 i$ }( _2 \8 p9 }( Q$ z! Z+ K) g8 q, B$ g

, n$ b, D/ q* @       If i = 1 Then aa = rs_maxcut.Fields(1).Value '除去标题后的,第1行第1列9 w* A5 d: t7 z8 ?6 P0 ], {% B
        If i = 2 Then bb = rs_maxcut.Fields(1).Value  '除去标题后的,第1行第2列
* Z* Q& B% d3 h; d% X2 h7 m
2 u% `4 L6 F# ^( U        '读所有内容到数组: m4 g' J/ o& P
        For j = 1 To 列数
8 B& I2 d$ v4 R        内容(i, j) = rs_maxcut.Fields(j).Value
0 F; r2 x% T: [/ ^# u* ?) @- \        Next
, B6 ?% q; c9 b: V! C  h1 t- p3 D$ }# p% V+ [
        rs_maxcut.MoveNext '下一行, b& Q/ J) |* t/ ~4 t, B9 {7 f- _
        Loop5 t1 Y: h' J  Z# Q5 O. X
       rs_maxcut.Close '关闭; `5 R2 O* [# t5 k0 p

# N0 O, S: O- o% E. R1 e! O- [$ `6 c
        List1.Clear
5 A0 l$ t1 \* V, \9 \$ ]( D        For i = 1 To 行数( Z: {- ~- m5 k2 a& }
        For j = 1 To 列数# x4 F2 f$ v$ {' S) u/ ?
        If j = 1 Then
4 M' z" m; F) x6 \% C) H' h3 Q        str = 内容(i, j)
+ Q& }% d, Q: ~, j7 o* e* T. g3 Z! n        Else+ ?& b$ f# z; V1 |8 a
        str = str & " , " & 内容(i, j)) N/ J6 z2 F3 Q- X' Z( ]
        End If, F2 w' i/ s7 U6 G6 p2 I
        Next
- `3 Q  T3 O# r; V! Q+ N        List1.AddItem str
3 |  q9 J2 R& \4 ~        Next2 h, ?' J. w8 W- b
0 x5 ?$ S0 a4 q
    End If
6 E  C4 a! \9 \1 R2 Q& ]7 U/ D; D( Q7 {" S2 L
6 X# l/ o" f0 _% ~1 t: q5 x2 S- @
End Sub
5 b7 q! w7 c" [$ t
$ u1 B& L$ `) v) J5 W3 JPublic Sub writeDatabase() '保存数据(读数据和保存数据实际上是一样的操作方法)! v% N# o' l7 Z! I- b, ]/ `6 z
    On Error Resume Next0 N& L7 G0 G; j3 Q5 t6 d: [0 ]- ^& d
    Dim i As Long6 i5 Z; o9 C- y& p. A
    i = 0
% u* N# C  N0 R" N: j  s, j( ]8 c* Q
conn.Open cnn '连接数据库* N6 I1 t8 j* L+ _3 s$ t' S2 }

" U: V5 M& X# I+ T'sql = "select * from test". x0 Q5 V% @6 {* R( ~# x
$ @# M; ~# @# j6 b" V1 E2 u
  rs_maxcut.Open sql, conn, adOpenKeyset, adLockPessimistic  '打开记录集
0 d; o" x1 E' o. p8 C1 h0 \
1 B" P9 F& l# D  j; m8 |5 F5 |( I) h+ P0 g    If rs_maxcut.EOF = False Then
6 w# W, z. u# f( c; F7 q( I$ a+ ]4 q" }$ l- w
        Do While rs_maxcut.EOF = False8 ~9 L4 S7 ~8 d- n; P
          i = i + 12 I9 q7 j4 A! i! i! Y

/ L- K6 B' k& i: A: ~            '不要去修改 第一行  或者  第一列的内容  因为他们属于标题: Y/ M) W" u0 v8 l$ w

7 q7 I# ~$ k# d6 i            If i = 1 Then rs_maxcut.Fields(1).Value = Val(Text3.Text) '编辑第2行第1列+ b- E5 ]! }  [8 d; ]( o

8 C( n6 D% l! S- R# Z1 k( e            If i = 2 Then rs_maxcut.Fields(1).Value = Val(Text4.Text) '编辑第2行第2列
$ |3 f* u9 C& [! [* h! M! e0 f+ C( p
              rs_maxcut.MoveNext
7 }* y; I) h+ {
0 k% n; y* v( r" `2 z- N        Loop
6 l, D4 d* R$ L, C8 m) j' V- Q( b6 a) m6 i# q/ \
       rs_maxcut.Update2 n8 X0 o3 {2 Z) W/ L$ d
    rs_maxcut.Close7 [7 j) _8 }$ s. V/ Y6 f# Y3 Y
& _' k% ?; O% K8 v
    End If7 R5 l' E- z9 z1 b, ?7 Z  d

7 I+ h, i: y: z, QEnd Sub; \) |& [  F6 i. c8 O: c- p# r

, B# t) t& u$ e8 u! `
7 d9 Y" d0 Y, C4 O0 o: U
2 g/ O8 f* d) `: ?' D. Z/ y0 y4 N# z, @! ?/ }1 B+ Q! n
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.diantuankj.com/ doTeam.tech
回复

使用道具 举报

发表回复

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

返回列表 本版积分规则

  • 发布新帖

  • 在线客服

  • 微信

  • 客户端

  • 返回顶部

  • x
    温馨提示

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

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

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

    我知道了