|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
c# c++ vb 是可以互相调用的
/ A/ l7 ?) O0 j7 P4 ~
9 L$ c5 o+ D5 O3 M3 S, o0 H# t1 rvb操作access数据库 的方法
7 n8 R) |) h, }0 x6 U" U2 a
+ b# Z% X* a9 r首先要安装 Office2003sp2
! D& m1 F& g( w1 l8 K% r1 Z1 Z# L0 F5 ]. b) x
列子:读写数据库(.mdb)
& T( Q" v# q' m& p
8 y( T& R- }; o) K @1 ~4 s1.创建 mdb
0 I- _2 i8 j4 f4 o, P+ b4 ?开始->所有程序->Office2003->Access 2003 新建一个空数据库 保存位置C:\report.mdb & n! I6 @8 k: c9 T# n4 i& |
创建一个表格 并重新命名为test (操作和Excel类似)/ z: N, x: q) q; E9 D+ u
! N/ v, v) y9 w
注意 表格名称 和源代码要对应
" P u) u6 r. j3 ~ h5 K6 o
- V8 _; N. n1 L% B* H
( f8 u5 h, c7 M5 ^9 L4 ~( M2.注册数据源(代码中已经注册)和写代码/ u3 X0 o T% V8 b! Q5 _5 [* U# e
( J8 s% U* ~2 q @. k5 X& \; {5 p/ N8 p0 Z$ \1 }4 e8 c
在新建工程时工具箱中是没有Adodc控件和MSHFlexGrid控件的,- a9 i! M/ u) \$ D, h
我们必须点击菜单中的【工程】-【部件】,. ^' O& V# a C) j+ ~5 ~1 ] a. |
在对话框中勾选“Microsoft ADO Data Control 6.0 (SP6)”和
4 ~0 l& T+ R) }) p/ v“Microsoft Hierarchical FlexGrid Control 6.0 (SP4)”,
+ p. w& G2 y3 V最后点击【确定】,这样Adodc控件和MSHFlexGrid控件就已经放置在工具箱中了0 g8 B! B. @( @, D8 k
, \" f. }5 p ]8 W
- i8 {8 Q: n9 i( q2 {: } C+ W2 o' @
添加4个文本控件 Text1 和 Text2 和 Text3 和 Text4 * C3 y4 c }9 Z G* u' D/ A% L
添加一个按钮 ID修改成 “保存” 8 g! \* {! x) t8 ^: V! b6 H
添加一个 List1( d4 u. p' Y9 L- T
& C' f2 C/ O5 b0 S+ R& p3 z& r# \
代码如下& k5 Y! o9 {1 G1 e1 O& d
+ Q# H( G( z& T7 Z
7 S4 k( y5 Z* m& Q. LPublic conn As New ADODB.Connection '标记连接对象7 L* ]; ?5 Y& b) _8 j, q
Dim sql As String
M. q( K: `- H7 c# GDim rs_maxcut As New ADODB.Recordset
; g" |% ~# ~. {+ h+ `Dim str As String
! l3 m/ ~ f; L& ]Dim aa As Double, bb As Double! h! K& {/ o/ J. Y, X+ V
Dim mbd As String
; c! n( r8 t ~2 y, U0 uDim 总页数 As Integer, 行数 As Integer, 列数 As Integer
( G1 _0 n ]3 {5 ?5 x( ZDim 内容(999, 999) As Double3 ]! g4 Z" v4 T: i: ~$ `3 ^- P
; ]. e! G5 b+ v$ `
Public Function cnn() As String4 z* `; H( I, w
cnn = " rovider=Microsoft.Jet.OLEDB.4.0;Data Source=" & mbd & " ersist Security Info=True;Jet OLEDB atabase Password=123"+ A0 U( K7 ~* t5 Z) p
End Function4 q$ c' }' p0 n$ ~4 P! C
; v8 I5 Y9 \% k( {( \
Private Sub 保存_Click()
* v, w1 m9 a2 Z$ x$ v1 m8 k1 P
1 L9 q; @$ _8 y/ M8 O" q0 X writeDatabase
, W% o% R7 Q- D0 k End
2 ?: l# d5 y6 u6 {$ ]End Sub
* n: d' b! [6 S3 K y/ f5 v/ O. Y0 X8 t Y8 z+ m
Private Sub Form_Load()
% A" @" m2 s! k* |' Z2 l! z
& Z; h1 l" l+ h mbd = "D:\UG_OPEN\ini\数据库.mdb"3 m# [5 [ G+ Q% M
/ i/ K, D2 U. L1 ^9 U" s) J* m! b
conn.Open cnn '连接数据库
5 t3 n. v) h* ?$ L0 ^; p' |( l readdatabase
- O2 W! K" k/ Q2 J$ e/ f Me.Text1.Text = "行数" & 行数
7 W% u' T5 }8 O* }5 o4 I2 _) P! u Me.Text2.Text = "列数" & 列数
6 x$ F2 B+ s4 l. q; \! A, NMe.Text3.Text = aa; k6 ?( { s( i# O4 h* I
Me.Text4.Text = bb
( G" o/ `# L1 l6 u: oEnd Sub1 k1 A' V! E/ B$ ?$ b
: g2 X! G. z& S( F; I; ~. w
Public Sub readdatabase() '读数据 (读数据和保存数据实际上是一样的操作方法)
: q6 A+ v6 k c& m6 F Dim i As Long
* b @ W0 \2 n& m sql = "select * from test") d) M. F" e3 o0 |2 q% E
rs_maxcut.Open sql, conn, adOpenKeyset, adLockPessimistic '打开记录集( r/ [0 S3 A# I% T$ l4 P0 p
" v, X, D1 G% S6 j' B1 r0 {+ Q# M" t' Y* v& |
总页数 = rs_maxcut.PageCount '页大小rs_maxcut.PageSize9 `/ D- I6 P+ T# i: m* K
行数 = rs_maxcut.RecordCount '行数 (排除标题)
- {8 X4 }6 e# i, [列数 = rs_maxcut.Fields.Count - 1 '列数 (排除标题)
) x/ X; o7 J2 a9 [* m1 `2 i
4 k5 [5 K; \8 ] If rs_maxcut.EOF = False Then J. u, ?0 N- m: N0 H# ^
i = 0
, H5 K6 C: _4 U+ ~ f4 ?9 o" k! h Do While rs_maxcut.EOF = False7 C- Z1 p# g$ b8 {
i = i + 1
& L/ u0 }( {* U& m% Z: p, p3 {4 H( v% b$ {$ z
' If i = 0 Then str = rs_maxcut.Fields(0).Name & rs_maxcut.Fields(1).Name '读标* P0 P" b0 n3 i8 ]- l
) A, X7 J" ~ ^% J7 n; y
'第一行 或者 第一列的内容 他们属于标题 所以不管是行列我们都是重第二行或列开始的8 b- A3 X# Y u
8 R" k% v. e* G: b: {/ e I5 v6 _* f6 ~, C( G U2 D. I# E
If i = 1 Then aa = rs_maxcut.Fields(1).Value '除去标题后的,第1行第1列
) Z) t8 r4 H) ]: [" y! P( k' ~4 V If i = 2 Then bb = rs_maxcut.Fields(1).Value '除去标题后的,第1行第2列6 W7 ^5 |3 \, a! E1 m1 l8 ]4 W
8 O, p5 g2 v2 A '读所有内容到数组0 u5 Q! u) A) z" Z4 P# x1 T: Q
For j = 1 To 列数2 n- i6 ~) C. Q" e' F# Z
内容(i, j) = rs_maxcut.Fields(j).Value, b% I* E8 H' a
Next
0 P2 P; a* c8 k, V7 c
3 d6 u8 Y5 ~; |) x rs_maxcut.MoveNext '下一行
- |: A8 \7 }$ F: l Loop
' y5 b, b" a2 r% ~7 s rs_maxcut.Close '关闭
% u; W/ ~+ ~' ^2 G6 D! _& t2 l3 |- j% G, o
# H3 E4 V% D' D# h' A# ] H- b List1.Clear- o0 J% ]9 ?$ ~" t$ h
For i = 1 To 行数
) B- X+ c A. _8 p$ } For j = 1 To 列数. g. r7 H9 D+ \: m! _0 M+ Q6 L
If j = 1 Then2 d, F8 _/ \! n9 J: X. X
str = 内容(i, j)% Y: t G3 y, w; a4 r4 P. m: w
Else$ k4 p- A' c2 z9 g7 z/ v
str = str & " , " & 内容(i, j)9 O; y4 ]! ]# k+ \9 q* r( W
End If) s; @- I, d0 q: E6 t# ~7 f
Next
& S8 t$ Q, q8 Y- _5 W List1.AddItem str( b9 O6 z9 F* v: s* n
Next" s( q' C3 Y I' \) W- N0 E
, W& j8 w# S8 @
End If. F9 l+ q" v4 C3 u
. n8 _8 J+ [1 k2 q* j8 J
5 H1 h" d$ e) I/ q3 ?End Sub
' s) R. ^4 w8 Z" T6 ]
! v) o$ j) c2 y ~2 BPublic Sub writeDatabase() '保存数据(读数据和保存数据实际上是一样的操作方法)
2 R4 P) ? ?( T On Error Resume Next
) z$ t6 S+ N' n) h* k7 P. w Dim i As Long
7 F5 H8 I! O; h9 @' R, {0 E# u i = 0. q( K) x6 P% x9 H
3 [4 O* \& L4 l( o+ xconn.Open cnn '连接数据库
9 n5 K9 M: y6 F7 O
$ U! [* @* H6 f `! |+ B'sql = "select * from test"
* Z& S+ B. Z- H% }* \
# W, u2 j0 M4 H8 [! h7 K rs_maxcut.Open sql, conn, adOpenKeyset, adLockPessimistic '打开记录集+ _' u& [# C3 j! M4 F" I
( L7 z- n+ v! o- X If rs_maxcut.EOF = False Then2 L! R; W/ [: u7 y' R
1 u& w) C! i& g7 L% i; S
Do While rs_maxcut.EOF = False& d* C2 z3 g/ R) Y8 ^) ^
i = i + 1# {' X" g8 O2 F$ N8 c5 O* F
z( K- V! @8 Z4 z9 w '不要去修改 第一行 或者 第一列的内容 因为他们属于标题' X: O2 j8 u# ~
J* U) }7 K3 Q! ~/ ~/ y If i = 1 Then rs_maxcut.Fields(1).Value = Val(Text3.Text) '编辑第2行第1列 r4 d0 |- q" h' i" T/ K
1 M% p4 r/ P+ y; i+ T
If i = 2 Then rs_maxcut.Fields(1).Value = Val(Text4.Text) '编辑第2行第2列 N5 I9 k% f+ D
: Y; a9 S* P( z; y7 h1 e' t+ P
rs_maxcut.MoveNext# g2 ?8 H; B. Z4 A/ E8 D; L
: o" q( r n+ f+ ^4 E: s- B4 [7 z
Loop) T0 x' J6 G; U1 ~4 p
2 \0 \& {' D! E: E, B
rs_maxcut.Update& a( g' \9 X. X6 A, I, p
rs_maxcut.Close1 H' X5 S6 q8 e1 Z/ @* ^
- d2 m0 M6 ]- Y End If
5 E, Y4 g ^. L$ a+ H7 k6 r1 d7 Z% z8 H9 A4 v
End Sub
! I8 ^# _8 r9 Q/ ^+ B, {7 Y
1 l, [0 Y0 s# t" S4 j3 h! V5 K; j/ y/ ~9 ~% K
$ E7 |4 M5 I" |& N) S0 J% X, G$ ~
8 Q5 x% `% y& j5 i( b# j |
|