PLM之家PLMHome-国产软件践行者

[原创] vb操作access数据库

[复制链接]

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

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

15757753770 楼主

2016-12-11 15:03:17

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

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

x
c# c++ vb 是可以互相调用的
- P; o" O# S1 s/ }' [+ c2 f/ z) t; ]7 _6 g2 @' v: G
vb操作access数据库 的方法
' ?7 Y/ `0 }  c" R
$ ]/ D5 E( j# M  u) k1 M首先要安装  Office2003sp2 % v9 c, Z" ]" T/ Z

3 x0 t  z" F6 X" U列子:读写数据库(.mdb)8 _' l2 C5 M. s

- _6 M4 x7 n1 i7 j9 `5 C1.创建 mdb  n4 ~+ w; |, p( L
开始->所有程序->Office2003->Access 2003  新建一个空数据库 保存位置C:\report.mdb  ' A7 F5 B! o' \
创建一个表格 并重新命名为test          (操作和Excel类似)
) }& O/ a2 D* k6 K: I. d1 r  ^$ C: R6 q3 h! K) l) H
注意 表格名称 和源代码要对应* \7 n4 x# u2 {$ D
. X; w+ t& F; f$ ~4 s& Z

4 |/ k5 M( i6 W% b" c  S* h2.注册数据源(代码中已经注册)和写代码0 W* u" e% V, L/ [! t& a
! P4 W! m. x% Y/ g8 p. N+ e2 r
9 \4 Y; i( F& t' A5 X: V; Q& f
在新建工程时工具箱中是没有Adodc控件和MSHFlexGrid控件的,
7 L% ]* l8 I4 x- Z+ ]我们必须点击菜单中的【工程】-【部件】,
5 _) e9 F; }; @& z1 P/ S在对话框中勾选“Microsoft ADO Data Control 6.0 (SP6)”和2 k5 J5 l& i4 G2 W* j8 B) q4 K
“Microsoft Hierarchical FlexGrid Control 6.0 (SP4)”,
/ F  {8 g' z* G" Q3 S最后点击【确定】,这样Adodc控件和MSHFlexGrid控件就已经放置在工具箱中了! H! n5 H7 ~* |6 O4 N# K6 G+ |4 f) k

& V" A- p$ i* x" |1 G7 L2 c: ^% t: e& j) [
添加4个文本控件  Text1 和 Text2  和 Text3 和 Text4
/ \. n) c# c, r4 \8 W$ X3 V添加一个按钮 ID修改成 “保存” ' i2 d, r2 w3 A- U
添加一个 List1
& N+ U' D2 d6 _% I' l: F; _8 G* X- T, x0 E( [; f: Q
代码如下
5 z7 x$ j: x4 @, x2 @) {/ W7 S7 `* x: ~* {" I+ s0 A. W
% }" V# P  N( L, T' V$ j) e+ V7 W
Public conn As New ADODB.Connection     '标记连接对象
: L# x. Z, G  X2 _Dim sql As String4 h4 B$ V& `. u: k. X
Dim rs_maxcut As New ADODB.Recordset# K1 c  K  @* B: K
Dim str As String# f$ ], B0 g/ e* c  _
Dim aa As Double, bb As Double: R9 d) }- T- _0 b+ }0 z
Dim mbd As String
; j1 B/ s* _' s7 c9 s: ]9 @Dim 总页数 As Integer, 行数 As Integer, 列数 As Integer
3 y; s2 W' f) B# s5 J, W- ]Dim 内容(999, 999) As Double: F$ k3 U  L$ P* O5 r
9 w( Q, A. {' N' C9 f5 {5 G
Public Function cnn() As String2 P$ T7 C0 k  H$ H0 c# C
    cnn = "rovider=Microsoft.Jet.OLEDB.4.0;Data Source=" & mbd & "ersist Security Info=True;Jet OLEDBatabase Password=123"% y2 G, h3 Y- O+ s; j, _# d
End Function
( g+ y6 N- J" r: [% ^, ~6 m' e+ e# P- p8 D
Private Sub 保存_Click()
2 M  ?, u7 p0 e) e0 o: l* J: \
' J5 w" z$ V8 A0 n7 D writeDatabase# N. U# q. T0 M( a# D7 E
    End; x$ \4 A$ X! A
End Sub) X) _' r8 W9 N9 n& k* {# _

) i$ N* X! A8 }% HPrivate Sub Form_Load()
; @* P$ a. ^! |( {0 f* U) |& s3 a( @
mbd = "D:\UG_OPEN\ini\数据库.mdb"- |1 a, y' K+ A3 X* `% F* [
7 d4 n  h- O9 `/ p
    conn.Open cnn '连接数据库: @. E$ M4 U  z
    readdatabase
2 ]% W3 L5 @4 O6 L% P/ X. I    Me.Text1.Text = "行数" & 行数
* M5 C6 J" e* ~    Me.Text2.Text = "列数" & 列数
! I! u% s$ |. {; y. [5 n; bMe.Text3.Text = aa* [! w+ v6 u* B
Me.Text4.Text = bb
- Q7 z4 t* \  U9 ^' O. [End Sub2 n3 |6 ?7 o; W# ~5 g" K+ z8 V7 \

+ ~4 k3 ^( f! f: |; ]: S3 [5 Y3 f# t- FPublic Sub readdatabase() '读数据 (读数据和保存数据实际上是一样的操作方法)$ \2 q" v2 C% ]& P
    Dim i As Long
) a8 G- M! P6 l( S3 P    sql = "select * from test"
& r& K: O8 s" X9 r; r6 K    rs_maxcut.Open sql, conn, adOpenKeyset, adLockPessimistic  '打开记录集' n: _. h7 e- D6 A6 Y% s  B; U

' T/ v( f2 E' j( q  ], H* Z
" J( q& p* X5 c; n, U4 P. k总页数 = rs_maxcut.PageCount  '页大小rs_maxcut.PageSize$ \: _9 t4 j+ q/ N. t
行数 = rs_maxcut.RecordCount  '行数 (排除标题)
) L3 y8 r2 W/ U" I/ f列数 = rs_maxcut.Fields.Count - 1 '列数 (排除标题)9 b1 P% A7 N% T$ h! G. |

8 G# l; q; s! e# k    If rs_maxcut.EOF = False Then
) i) N6 |( u7 q+ v0 S: F9 e" F        i = 0' P" p0 \4 `5 X7 I
        Do While rs_maxcut.EOF = False& A6 u  w, V4 [8 m9 v2 {! m, x' }2 E! `
           i = i + 1' j, K% b% y9 H0 s8 r
5 o+ z2 V! u0 m; g5 ?; c
           ' If i = 0 Then str = rs_maxcut.Fields(0).Name & rs_maxcut.Fields(1).Name '读标
9 K7 F4 z7 ~/ s* J) s- d" t, Q- ?# b5 G; h6 j2 f8 C' D# O
            '第一行  或者  第一列的内容 他们属于标题 所以不管是行列我们都是重第二行或列开始的% R1 i1 e0 @! y0 p" R9 u7 ?% X/ P
7 Q4 Z' l5 _1 c% K7 w  ?

+ [) X$ o: p8 f8 [8 k# ?( [       If i = 1 Then aa = rs_maxcut.Fields(1).Value '除去标题后的,第1行第1列1 q' X9 ?: t7 \5 t6 Q
        If i = 2 Then bb = rs_maxcut.Fields(1).Value  '除去标题后的,第1行第2列
# p; J' }8 o2 v6 D. B* f& n+ w7 \" d5 \9 V# j! `4 Y$ _" h+ ^
        '读所有内容到数组, Q6 l) C) ?0 V
        For j = 1 To 列数% J% R$ E4 {/ i$ h; L0 x
        内容(i, j) = rs_maxcut.Fields(j).Value9 v- a% \7 H1 \' U" ^% s3 S; p; z& u
        Next8 L) ]' P5 T4 J% Q$ g0 v
6 S% r+ ~: `9 f5 b2 S
        rs_maxcut.MoveNext '下一行4 E1 c; x- o! {. c- d
        Loop0 M& S) v# w- n' }( [0 r! _
       rs_maxcut.Close '关闭
) S: y0 R" }' C, u+ e( t# ~7 T! q" I" Z4 J, c
, {3 u. \& Y. y. [( a( w
        List1.Clear
0 @' L1 z  Y/ o4 W- J        For i = 1 To 行数
1 Y3 u+ D* s4 N& U$ V* M3 q        For j = 1 To 列数2 e% @: C7 L4 l3 D
        If j = 1 Then
8 j( U. Q3 Z* A7 [; l/ P+ F) ^& [        str = 内容(i, j)
" L# f  G0 K+ ^        Else
0 w, I/ A( t( W+ p. m        str = str & " , " & 内容(i, j); S* f6 {. [/ \: x* u& e6 m
        End If% S: I/ K# i" d5 e
        Next
4 `% S8 x* v9 S2 v2 A        List1.AddItem str) Z; G1 F" D3 f
        Next
! E: C8 k) ]) w+ L3 P
3 S5 t+ D. A) H2 C1 a    End If$ G5 K8 d  g! ?: R; y  W' y

* H7 s- ~/ _) ^: R* r9 n
8 R4 n, \! Z; O7 w3 b! q  p9 T/ JEnd Sub
9 _1 P' s) \$ v2 O9 j  z0 W' T! n. G+ o: V. q4 `; s6 A# R
Public Sub writeDatabase() '保存数据(读数据和保存数据实际上是一样的操作方法)7 X4 b' Z! T: B8 S5 B1 J
    On Error Resume Next5 R8 W. Y8 |$ k+ A4 k% ?2 |) {
    Dim i As Long
+ s1 L$ \( \  O1 R: S; e    i = 09 F8 I: r$ Z5 Z! q0 f. H/ J

+ l1 \( Q$ e8 I7 mconn.Open cnn '连接数据库
% B! V! k8 L, p: ~/ l; @& e% u0 a/ c  j. j
'sql = "select * from test"6 t9 b9 @/ p3 L& m$ @1 \

) q( v0 R3 m$ k+ B: q  rs_maxcut.Open sql, conn, adOpenKeyset, adLockPessimistic  '打开记录集
) N# H9 L$ ^4 e$ d+ t* h7 [9 V2 \9 f: `; Y' l
    If rs_maxcut.EOF = False Then
4 l# D; V& F: e9 j
" B) N4 C; p  U; _7 d1 n) [  t        Do While rs_maxcut.EOF = False6 y; k" k& a7 _  i  v
          i = i + 1
- Y! ~; |; b( B2 N
/ I& H, J# h7 `, q! f            '不要去修改 第一行  或者  第一列的内容  因为他们属于标题
$ w2 l8 L( B8 M5 H+ D4 q
# |* q9 t) o' W            If i = 1 Then rs_maxcut.Fields(1).Value = Val(Text3.Text) '编辑第2行第1列- w3 X: M7 D4 Q2 n: u" f; L
# |! o! p8 n( ^1 W+ u' M
            If i = 2 Then rs_maxcut.Fields(1).Value = Val(Text4.Text) '编辑第2行第2列' l8 |5 }7 }- \
: P" I4 b8 f; C  |4 D7 g
              rs_maxcut.MoveNext1 i8 b: ~! o7 R; F5 n

: X% b( }) R5 \  ~        Loop+ s3 c- s  |( i7 z# D

  k# ~7 x: A- R: P       rs_maxcut.Update
/ P$ U( o5 ]" L! M    rs_maxcut.Close8 }- `- a+ l' W/ I* K4 M; S* ~
) ?) F- l: `# P1 C9 P4 w8 _% N6 m
    End If
7 l! u9 K- e8 K9 w" H3 \
! N: c' v8 v: JEnd Sub
! U+ D: p7 N! t* z: t: e2 x/ u8 u9 w7 m: p; x7 F& \1 R' V1 E6 e

. E8 q2 f) x* [' t8 m3 E* ?  I9 O* ~
" K4 C& K4 J3 ?
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了