PLM之家PLMHome-工业软件与AI结合践行者

[原创] vb操作access数据库

[复制链接]

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

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

15757753770 楼主

2016-12-11 15:03:17

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

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

x
c# c++ vb 是可以互相调用的9 R( Q" C- B4 u& P2 m& }$ E; B

3 l5 T' J( X' p8 Lvb操作access数据库 的方法) y! k2 n) h! r; E
& |+ G2 `5 D$ k  n  |! b, g% x! ]
首先要安装  Office2003sp2 ; ]8 H# Z+ [- m  d
/ [6 T( T7 a0 s+ o% J7 }
列子:读写数据库(.mdb)
# [" s) ~, V! ^) n+ N- y) s. N; j- p: t1 o1 T: b4 o" w+ U3 o
1.创建 mdb& B' H3 Q7 g+ p7 x
开始->所有程序->Office2003->Access 2003  新建一个空数据库 保存位置C:\report.mdb  ( G; p- ], q2 m% k6 F
创建一个表格 并重新命名为test          (操作和Excel类似)
) @1 p& R$ e. J: q* Q* i  w  o& G% V5 v  J4 g) P1 Z; p" D5 B: e
注意 表格名称 和源代码要对应, M) N5 u2 |0 a* |# h( i
. V) S& X6 F! ~

+ {% R/ J' U" ]  O2.注册数据源(代码中已经注册)和写代码" ]  n9 ^, p. B
1 \3 o- o$ |) i* g0 G( ?

( v  \( Y1 z1 c4 X5 {$ s; I在新建工程时工具箱中是没有Adodc控件和MSHFlexGrid控件的,: x0 _( t: m+ ]. g& u
我们必须点击菜单中的【工程】-【部件】,
8 y' s+ b) g2 F2 {9 f在对话框中勾选“Microsoft ADO Data Control 6.0 (SP6)”和% n6 t1 D- `, j" s1 t* f7 |& U9 e" {
“Microsoft Hierarchical FlexGrid Control 6.0 (SP4)”,
% Y& A$ K2 p; J9 f最后点击【确定】,这样Adodc控件和MSHFlexGrid控件就已经放置在工具箱中了
( c0 z5 M$ y8 \* Y
. w2 M9 q4 _: n( a4 _
2 {# C+ D" ]7 Q* t6 K1 T; n( P添加4个文本控件  Text1 和 Text2  和 Text3 和 Text4
& ~, s& c) ~8 Q$ c1 B添加一个按钮 ID修改成 “保存” 7 W* Q' l; L2 c  D# Z( F
添加一个 List1
) ~9 K; v$ G8 F) o: o
5 i- s& M8 ]& A; u代码如下2 c; ]1 ~; m' |$ e/ [0 b$ k

6 G- R9 e; g$ J4 k, p1 i5 K; o! V4 J6 o
Public conn As New ADODB.Connection     '标记连接对象2 o! o* u$ O2 n# J! ~
Dim sql As String
- ?) ]( X) F0 eDim rs_maxcut As New ADODB.Recordset
; i# w' b& M% y7 I/ l# TDim str As String  T* D* n  n% x* g5 B! E
Dim aa As Double, bb As Double
- r* v$ M$ {4 ?- TDim mbd As String
; f. ]5 W9 h1 d( k& A2 G+ {) IDim 总页数 As Integer, 行数 As Integer, 列数 As Integer. G- b- G. v4 O7 v) \. `1 \- x
Dim 内容(999, 999) As Double9 a( ~' q- p4 f  U/ X

$ q" v2 E# ?  l) H9 kPublic Function cnn() As String0 q2 v% W7 s0 Q/ r& ^* f
    cnn = "rovider=Microsoft.Jet.OLEDB.4.0;Data Source=" & mbd & "ersist Security Info=True;Jet OLEDBatabase Password=123"0 N9 q, }& ~" q) P
End Function4 _3 y! i' M/ K" }  O$ |

/ h( h# \  R* H0 q1 ?  tPrivate Sub 保存_Click()- c1 B# T7 x! t. k% T6 A
/ V* P& V8 E" T; [3 B: u
writeDatabase
* n4 w+ J! |8 \7 q# K: h5 K; {    End
& ^  p& B% x+ I/ @4 a0 ^End Sub
6 Y5 G- s& g5 R6 A# V
7 D8 ^  ?/ X6 r+ v* X/ }Private Sub Form_Load()
# Z( X- P1 e, }
) |, I1 f! d5 T, F$ C% }/ G mbd = "D:\UG_OPEN\ini\数据库.mdb"# N5 j/ O: o' \
% i1 ~+ h0 m/ m8 |# N- ~! x9 o
    conn.Open cnn '连接数据库
5 m! {1 I* \- q    readdatabase8 f6 t5 u2 t: Y% C/ t" p# e
    Me.Text1.Text = "行数" & 行数
2 X( z* G6 F# D6 A# |1 ?/ a( ]+ j3 u    Me.Text2.Text = "列数" & 列数
& y. R, ~  W9 T8 b- N- L& wMe.Text3.Text = aa
( y0 Z5 ^& f" `1 p9 IMe.Text4.Text = bb# A3 y2 G1 q" L
End Sub, |( o9 x7 |- @  J" Z. D

( H% E/ l% A. w* Q" V; S( H0 U% uPublic Sub readdatabase() '读数据 (读数据和保存数据实际上是一样的操作方法)& c8 \6 c; v& s0 {: t: c
    Dim i As Long
2 J6 ~' u0 ~, _    sql = "select * from test"
  S: X( E( c4 S- v8 a4 T4 {" @. M    rs_maxcut.Open sql, conn, adOpenKeyset, adLockPessimistic  '打开记录集
. Q" P+ k8 q6 S9 j9 {/ Q' w7 t# T, T3 c4 N5 `% r

' e# k$ I5 c* d9 y7 p7 [+ h总页数 = rs_maxcut.PageCount  '页大小rs_maxcut.PageSize
: k# N& i1 T" h- h- r1 p行数 = rs_maxcut.RecordCount  '行数 (排除标题)( H% u% }  r2 {, I( `3 S
列数 = rs_maxcut.Fields.Count - 1 '列数 (排除标题)4 {' F2 S8 t$ g) E2 G) S& ~

- y, W9 C5 Y* w+ V2 r/ ?9 y2 G    If rs_maxcut.EOF = False Then$ ~* W  r: \6 C' n, _+ o
        i = 0: t/ }2 q1 C9 r2 a
        Do While rs_maxcut.EOF = False
8 H4 h4 l$ f: v( x  E: X7 n5 u! s           i = i + 1! m9 J% a8 ]1 u: d4 H# [* c

% A* Z- @. A( i- n+ Q           ' If i = 0 Then str = rs_maxcut.Fields(0).Name & rs_maxcut.Fields(1).Name '读标
( l3 {8 e2 n$ i0 n
0 o; _; ]% ]( i4 q  G            '第一行  或者  第一列的内容 他们属于标题 所以不管是行列我们都是重第二行或列开始的
; U8 a. H  j* k  v( g% P) {) P6 S( z* z) q- g+ o% x1 Q$ h

8 A) w2 S- r: b! z  s/ }9 Y1 h       If i = 1 Then aa = rs_maxcut.Fields(1).Value '除去标题后的,第1行第1列
3 |1 O* H9 P8 k- \4 A# a        If i = 2 Then bb = rs_maxcut.Fields(1).Value  '除去标题后的,第1行第2列
! `7 f5 j7 [' I/ r, K' L1 @, L# v
6 `: ^( ^. T; m        '读所有内容到数组+ B+ v6 ^, o4 t8 ~3 ?
        For j = 1 To 列数7 E- Z% s$ W$ c- i
        内容(i, j) = rs_maxcut.Fields(j).Value: L2 X2 @# B; x7 i( n% r
        Next
7 q/ |7 G5 `' Q" @6 |, `# W
: e4 |- R7 t! l9 W! i4 ?4 M0 t. L        rs_maxcut.MoveNext '下一行
4 t2 @7 t9 V+ ?: D" k, a& p        Loop! c& k+ x! b) @  O, p
       rs_maxcut.Close '关闭
6 m+ W% j' J* @' H3 |# Z1 `4 o1 \3 L& `- R2 `

. h8 Z' l- X' `* ~7 h& ]2 i        List1.Clear
& E& t2 G* |* E: ~  `* u) p. E        For i = 1 To 行数
9 v% E# K, b' L* T# F9 H        For j = 1 To 列数
. T2 r9 L' o( V! S3 S6 u' o        If j = 1 Then
0 C  x/ v, W8 n# P/ V( m        str = 内容(i, j)8 G+ v: |% Z' H+ }1 `% z! G
        Else
' I, s. P" I8 x/ V7 f0 k        str = str & " , " & 内容(i, j)9 l; M% X! K( E! H
        End If
1 l6 D+ D# b( q, L1 Q: q        Next$ `2 ^7 T/ z3 F% L/ p
        List1.AddItem str
8 V) d$ I0 _, Z! N# I# V* d        Next
' O% U5 c/ H; O% ?6 E+ s+ m4 k1 R9 s) g; C  M. h' [" V
    End If( [, `" P3 g: u+ f! |7 u! Y6 K, X1 \: X% f

7 o' N  X9 Y+ W2 F' q( a
9 m% j0 C. s) ?; q5 sEnd Sub
0 g0 s6 i7 c! |  u+ H1 ^% [* H6 b: j- T: R6 K
Public Sub writeDatabase() '保存数据(读数据和保存数据实际上是一样的操作方法)
5 ]0 M& r* w4 `: u% O    On Error Resume Next
. E" k1 e+ ?, q# @    Dim i As Long0 y5 r# W/ h3 z
    i = 0
* i7 O" p9 v- g* I
# E1 o8 C/ @5 Z1 ]4 s4 C7 uconn.Open cnn '连接数据库
1 r* L/ j" d% J6 q: l- z' l6 p* o3 j' q% {
'sql = "select * from test"
- ~: l( ]: s0 |& g: i  V; W( @* ]8 b: U: }2 H% n! V0 R, Z
  rs_maxcut.Open sql, conn, adOpenKeyset, adLockPessimistic  '打开记录集
" a( m( \4 M4 r& u) H
  p" }/ c% T+ A+ W; G4 k. d    If rs_maxcut.EOF = False Then
4 {6 r* U$ E. R# Y
5 A5 b2 b1 B" L, W" R) y  O        Do While rs_maxcut.EOF = False
3 ?% g5 P5 Y8 A: v9 @5 p" j          i = i + 1: v# d7 I1 F" N" b

: t; Q( b8 G3 V" @$ v% I            '不要去修改 第一行  或者  第一列的内容  因为他们属于标题
8 i8 ]. d. `5 \- }! C& f% ~; ^8 ~5 p. R* ^8 Y0 k3 _$ K9 R  z; w: B7 c4 P4 }
            If i = 1 Then rs_maxcut.Fields(1).Value = Val(Text3.Text) '编辑第2行第1列. l0 E* i1 H" A9 X% q$ M

) I% ?( v) d  v1 ]# k            If i = 2 Then rs_maxcut.Fields(1).Value = Val(Text4.Text) '编辑第2行第2列
( x: M) d5 J' z4 g# Q" B
+ X. O+ X5 K, P: [              rs_maxcut.MoveNext
+ R/ H) n! t, c# D$ `# P# ]
( t6 R6 ^7 J4 C/ z/ I9 N& b        Loop5 W" Z# K  N) W  x8 o3 [
2 |* U2 i8 _2 i; z& n/ @" u, D; X
       rs_maxcut.Update0 A5 _0 [  c8 U. y- u0 T) x
    rs_maxcut.Close
  \1 k6 S4 T4 f& \4 q* m
7 c/ v$ Y/ I" v1 g- p, r7 V    End If
; U- c) y1 i' \
$ p  L0 \$ H3 y5 `" z. w0 bEnd Sub2 v2 h3 \* j9 O7 p. V( O, _

& I1 R0 o8 K- q" t6 h- a
+ V' R: g& D* ~' I& y8 ?: i& D
( R! ~. A6 N  x5 L- j) B9 V7 t6 q0 C2 a' f0 q" ^3 g2 Y
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了