|
|
请使用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 OLEDB atabase 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 ?
|
|