|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
c# c++ vb 是可以互相调用的; n* H% ^4 Y" k! W
@/ j, ?- P6 \# t& v& H% M
vb操作access数据库 的方法
8 }3 t0 x0 @4 J/ ^5 n, B% a+ b& `) ^1 l- R+ F: `# V% ^; i% Y
首先要安装 Office2003sp2 , d: f3 \" L: Z$ K5 y
2 B/ Z1 P) c- e/ w7 X# }2 q4 d
列子:读写数据库(.mdb)2 b& E7 {+ E ~! v
: t4 P% G/ Q- g+ D; w
1.创建 mdb% J1 s% M# ^0 r' y: L9 L: J
开始->所有程序->Office2003->Access 2003 新建一个空数据库 保存位置C:\report.mdb
5 u- l: x; ?7 i" ~( j6 B创建一个表格 并重新命名为test (操作和Excel类似)
+ F; m! ~; K4 D4 F6 |( w2 }6 E9 P" a( z7 E: l
注意 表格名称 和源代码要对应; d M$ D: q5 W5 T$ t- J
r2 K% j. W/ Z
/ ?4 ^0 z( q' g, D$ @2.注册数据源(代码中已经注册)和写代码/ n& K2 g4 D. c# s$ r& {- N
& Q ~, e" Q: M' D5 X
3 X! q$ a2 ~4 {
在新建工程时工具箱中是没有Adodc控件和MSHFlexGrid控件的,0 p9 p4 w7 p4 Q4 I3 y$ X( H
我们必须点击菜单中的【工程】-【部件】,
4 |4 I8 e9 d+ Y+ v4 \在对话框中勾选“Microsoft ADO Data Control 6.0 (SP6)”和
4 u, W, ]. q, D“Microsoft Hierarchical FlexGrid Control 6.0 (SP4)”,
' W' D' ]6 q' t+ Q- F+ P最后点击【确定】,这样Adodc控件和MSHFlexGrid控件就已经放置在工具箱中了
/ h! M; \1 f u# K; o. F, N+ f
* j" O1 B2 h2 ?+ D- W6 }; Y- H) w- c4 c+ b
添加4个文本控件 Text1 和 Text2 和 Text3 和 Text4
! ~% P4 b$ @" n" B, f添加一个按钮 ID修改成 “保存”
5 X Q/ D- L; A添加一个 List11 ~+ Q: W4 |8 y2 Q+ @
/ G& M' A+ V% ?4 Y代码如下2 Y, W* ^% |2 [. X' E z
) A( g2 H' O% F, M* N
$ c' F5 s% u% T5 S& SPublic conn As New ADODB.Connection '标记连接对象2 _: `% c3 S3 c. F4 c/ ]
Dim sql As String
7 X, }1 E, S& s5 l! `, _ F! M$ r$ IDim rs_maxcut As New ADODB.Recordset4 U# O6 u) @5 t8 |
Dim str As String
" \1 z: g; p2 c; Z" ODim aa As Double, bb As Double" ?8 }! n4 a2 |* |/ p; v5 L9 Z" z
Dim mbd As String
$ m, T) G% |$ E6 ^5 c( DDim 总页数 As Integer, 行数 As Integer, 列数 As Integer+ |. G, \7 ]( {( }5 w" y
Dim 内容(999, 999) As Double
# Y) }6 }) k) P5 A1 ?
+ J8 A3 _0 ^% a: s+ n+ J$ |0 P* yPublic Function cnn() As String
) \ o) @% S& e cnn = " rovider=Microsoft.Jet.OLEDB.4.0;Data Source=" & mbd & " ersist Security Info=True;Jet OLEDB atabase Password=123"
0 Y8 t0 I$ h4 s3 C AEnd Function
7 _$ P: J& u) F+ `$ h! e" s t( ]& |( Q
Private Sub 保存_Click()$ Y7 ~2 Z; e9 t$ M
: b5 O6 K0 t7 g2 K! r- i$ f) Y writeDatabase7 c; J3 L- ^& A5 w. j
End
9 G2 L! A4 t, M0 B0 @: M- ~End Sub
/ d! G' K+ N- }- @( C; p- @
& U! J( A: V( k( dPrivate Sub Form_Load()
0 M- p. M7 F% Q k- v: N1 T6 o- l$ t' f" o0 s' c& m
mbd = "D:\UG_OPEN\ini\数据库.mdb"( D. K* I( z: [) V
7 {- |; G4 \! g9 P
conn.Open cnn '连接数据库
. s! W* F' a2 }5 z readdatabase3 W4 D! g1 C! h; a7 _; h3 o2 [
Me.Text1.Text = "行数" & 行数0 F: Q* |9 S: o2 B6 B, n7 h7 n
Me.Text2.Text = "列数" & 列数
* _* l( T# A, m EMe.Text3.Text = aa3 C' B, M4 q# D/ |
Me.Text4.Text = bb
) N- R/ V/ k* ]( W: \End Sub
4 y' g0 I5 `- J _& |
# M+ K# t1 p) ZPublic Sub readdatabase() '读数据 (读数据和保存数据实际上是一样的操作方法)6 y4 y& h! u0 [& n8 w
Dim i As Long
+ q: _4 r' g. o. Y/ q sql = "select * from test"- D) J! _4 L2 o; e9 q
rs_maxcut.Open sql, conn, adOpenKeyset, adLockPessimistic '打开记录集
$ Y8 J+ B. [ ^# U( d9 i$ _1 ^8 |! o" d7 y# b
3 |* Z1 H, R' y' r, v. B6 Y. l( V( C
总页数 = rs_maxcut.PageCount '页大小rs_maxcut.PageSize
7 `4 j9 M/ g4 C5 m8 u0 E2 i行数 = rs_maxcut.RecordCount '行数 (排除标题), L8 w& ]7 u7 I
列数 = rs_maxcut.Fields.Count - 1 '列数 (排除标题)7 K6 m& |: O9 h4 Z; G; q! ?+ D
" c, ?3 I% j: q+ D, G0 T If rs_maxcut.EOF = False Then
6 b7 v6 o4 f: d F7 Q i = 0
, t' O8 S) R5 c6 i Do While rs_maxcut.EOF = False% k+ {, y- Z4 H: W( z
i = i + 1
& N4 ? W8 I5 c9 f9 @, T4 C2 ?- V. U
: Z, P- C/ B) K& g ' If i = 0 Then str = rs_maxcut.Fields(0).Name & rs_maxcut.Fields(1).Name '读标
6 e5 C$ `7 i* H0 @+ p' `
, O* x1 l' f+ \! U '第一行 或者 第一列的内容 他们属于标题 所以不管是行列我们都是重第二行或列开始的
) P$ _( q: L( |. b9 K$ F' `; H) a
; E7 [# P- g$ k4 p) i6 A% `) ~3 {; w6 b7 L# j; W
If i = 1 Then aa = rs_maxcut.Fields(1).Value '除去标题后的,第1行第1列
( C6 A" F S9 O4 x5 a) j' Q If i = 2 Then bb = rs_maxcut.Fields(1).Value '除去标题后的,第1行第2列
' e' o& `. F* i; p3 m- {/ P7 x- _7 [$ m
'读所有内容到数组
9 }/ u3 A' E' @. `( { For j = 1 To 列数
; K; q8 M/ p' O/ H 内容(i, j) = rs_maxcut.Fields(j).Value2 [& T2 s& m0 ]5 m2 f) i
Next
- Z" s$ f$ X& w _3 U# q* \0 \* b7 G, v P
rs_maxcut.MoveNext '下一行. u ` N( G7 K5 r# H
Loop4 R; L7 ]: ]7 V
rs_maxcut.Close '关闭- h4 H Y% W* a& m' c# l
- p8 ?7 J* G t, H1 t
7 j8 d% |( S7 W; d0 J List1.Clear* d1 S+ G: ^+ g
For i = 1 To 行数
+ P, g# F. k: P$ u" |) U* ?. N4 r For j = 1 To 列数: S% w) R! Z N3 m2 R
If j = 1 Then& G. Y0 N# \% z) E
str = 内容(i, j)) V0 p, f9 ~! l5 C# E. o& T f
Else
" y/ k- L: H3 |1 m7 E* A3 E9 D6 l str = str & " , " & 内容(i, j)7 L) @5 J" N& _( w# a
End If
6 v& B% {% v7 L, I Next
5 W- T8 u3 t, Z2 ^& n1 y List1.AddItem str+ }8 a3 |& ~7 G* Y
Next4 n7 T4 T1 R. F8 x* x. [1 C
0 P$ d% d G2 [! [5 @ End If o0 m! o4 X' ]) e3 W" p; z* b; E) ?
/ a4 K7 S/ F& J9 u4 l( k, P; S% S0 \5 d% r5 C J- j
End Sub
3 K+ C+ F" L9 h4 E$ B+ f( B; Q
& ~7 x5 E! C& [# V6 ~Public Sub writeDatabase() '保存数据(读数据和保存数据实际上是一样的操作方法)7 ^. [- O6 D' T% T5 {' ~
On Error Resume Next
& e+ Y! a4 D3 [3 X2 o& f: c Dim i As Long3 }* V: F! }3 g g3 Y
i = 0
: O9 `, w5 x7 w) l& n; {! ]! f+ D' l0 u+ y% x& |
conn.Open cnn '连接数据库
: v/ j$ `$ Z0 _1 M8 q( d5 c* F# b. ]9 l7 [# P5 T. Y
'sql = "select * from test"7 A7 L# x1 w9 r0 _- v* o
( z* Y3 D8 G; m- ] I rs_maxcut.Open sql, conn, adOpenKeyset, adLockPessimistic '打开记录集
: {3 t" r) |5 ]; n8 o9 M; [' z1 r( [2 `% v* B, Y; [
If rs_maxcut.EOF = False Then
" G5 q h6 |( s3 c. C5 _
4 o' x) y8 e$ ^" |( s1 G7 e" D1 h- y Do While rs_maxcut.EOF = False
7 @( E! J9 O& z$ a3 F0 } i = i + 1
+ n+ ?. e1 L9 T! E+ t5 w3 D
+ }$ k9 q9 `% {4 R- P }3 \: w) Y '不要去修改 第一行 或者 第一列的内容 因为他们属于标题
; _8 v# G) l1 p6 T" x% J4 Z M5 u8 C, ?) T% w6 a1 M
If i = 1 Then rs_maxcut.Fields(1).Value = Val(Text3.Text) '编辑第2行第1列* t; U8 N% `, h" u
+ ^" l) o: E. o& r: b r
If i = 2 Then rs_maxcut.Fields(1).Value = Val(Text4.Text) '编辑第2行第2列$ }% c5 E) w7 ^/ h' ?
5 @# L! L# W/ R: ~) x7 _& Z
rs_maxcut.MoveNext7 L: Q9 E' e4 p) q
; y/ I+ o" @/ G Loop) y" C6 Z4 `' `* }' x
y$ o/ p0 q$ J. f" z4 y( { rs_maxcut.Update# w! ]# H. }3 Q1 [
rs_maxcut.Close
6 F& |* w: S9 u2 z: \: y9 l g3 y# C7 ?7 D8 X$ G: m( N+ h) y
End If
0 I. L y1 ~. H( B, j* Q8 m# \
& C1 N# l# {8 r9 e8 VEnd Sub
# F% k+ @- ^: M1 L+ ]0 O4 m+ A/ [, i: r! ] m" x
+ y$ \8 o5 O# _" F/ q0 y
" H+ S1 a* Y0 H. U8 x
8 E/ F' ~. d# ^) u) _7 r, |9 J9 u9 Q* X5 @7 C |
|