|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
c# c++ vb 是可以互相调用的
$ l3 U8 |8 S# a- c3 P+ |: j
) t) Y! k0 `+ E9 O. D+ @3 @vb操作access数据库 的方法
6 y0 V; j/ o3 y5 Y5 u( r
[/ s& t# T5 S* e首先要安装 Office2003sp2
: B/ h) p9 `/ I+ T5 a1 T, _7 ^; I. t1 I5 ?/ o9 O' t
列子:读写数据库(.mdb)% m* T1 W) ^2 P5 Y! z: I2 w
* H E: Y5 H+ G: w1.创建 mdb
8 r/ x, y6 b$ m) W3 q# m9 {" s开始->所有程序->Office2003->Access 2003 新建一个空数据库 保存位置C:\report.mdb ( w, w' r5 i% p+ R, ?( u9 u
创建一个表格 并重新命名为test (操作和Excel类似)& V9 |6 x8 O6 \, U1 P a* i
8 V; }7 g& ?2 A1 [6 h+ v0 B注意 表格名称 和源代码要对应
! l6 m6 r& H6 d0 e# a
: x+ j3 n- [; Y( ]0 s, ^+ }6 \. W& ^! S
2.注册数据源(代码中已经注册)和写代码& C( B+ u8 B$ X6 ]+ x9 [
( K" p _# u9 Z8 V
3 {: T& h0 _5 h6 Z L! c1 g在新建工程时工具箱中是没有Adodc控件和MSHFlexGrid控件的,+ ^- ^& v. p8 w' ~% p" @+ l
我们必须点击菜单中的【工程】-【部件】,
q0 E# H' a) P在对话框中勾选“Microsoft ADO Data Control 6.0 (SP6)”和5 _1 y7 H J; B2 V% k
“Microsoft Hierarchical FlexGrid Control 6.0 (SP4)”,
1 r! A. A9 q* W! u6 @最后点击【确定】,这样Adodc控件和MSHFlexGrid控件就已经放置在工具箱中了
+ f5 X+ e% L4 J0 x9 e- Y+ q2 O! K" C5 g/ n0 Y+ ^3 H
4 R! A% k, h# ^' o添加4个文本控件 Text1 和 Text2 和 Text3 和 Text4
9 j4 V8 I3 P K( ^4 x添加一个按钮 ID修改成 “保存”
7 |3 H' {; j7 Y, Q3 S添加一个 List1
2 r6 S4 U! N# f$ m
t' K, O/ W* Y% c$ U9 s7 s代码如下
' l4 k2 K$ I, o- u. ]. C
! G. C) E D4 r* J% @4 }6 A
, W# ?: O/ C9 h9 y4 f PPublic conn As New ADODB.Connection '标记连接对象0 ^" g5 q0 _8 d
Dim sql As String
: Y; D% a* N3 ? `% a' sDim rs_maxcut As New ADODB.Recordset
" Y% g: g3 J* R9 iDim str As String! u. O8 e. N$ o; u4 O6 @* V
Dim aa As Double, bb As Double: z* G7 M; t" ]5 }" K
Dim mbd As String8 L: R# C) c) U' E# \4 i* I# e
Dim 总页数 As Integer, 行数 As Integer, 列数 As Integer
9 E+ z5 u/ [3 CDim 内容(999, 999) As Double1 W7 d$ R- T0 F3 s$ ^# q0 A) T
$ C' G: r) ~1 RPublic Function cnn() As String
9 v2 O! v3 ^2 S. j. G- k cnn = " rovider=Microsoft.Jet.OLEDB.4.0;Data Source=" & mbd & " ersist Security Info=True;Jet OLEDB atabase Password=123"/ R, \9 u( V( S9 P1 a7 _1 v; Q3 z
End Function* z$ i% ~# G4 @$ G' s
! I8 d# X& A6 a7 P/ qPrivate Sub 保存_Click()0 ?5 `+ R1 s6 X L
x5 Z! C% O3 Q
writeDatabase1 c7 `; }! p6 b0 s
End. Z& t; ~! _) i' p2 H
End Sub4 n& f [6 L1 C1 E
7 {6 P( D- q' L4 o
Private Sub Form_Load()
3 n) ` o" a0 i) O l9 u* j2 @1 Q, z
mbd = "D:\UG_OPEN\ini\数据库.mdb"
( G0 f" z; X( x0 Q7 [, o, R( B3 D+ x* {1 [, h, G
conn.Open cnn '连接数据库- g$ l: ] A/ W9 g; p
readdatabase4 e9 ~3 j( @' K+ y* i, V
Me.Text1.Text = "行数" & 行数
& V2 x& x. ?& R: A Me.Text2.Text = "列数" & 列数: ~5 u Q1 H6 i0 X5 q% }; Y3 h5 R
Me.Text3.Text = aa
1 e+ B/ Y' G8 v# B, n9 JMe.Text4.Text = bb
2 y4 k3 e: E/ t o- ~5 CEnd Sub
. p' s0 o& V$ V
9 \ f+ }8 ]% ?' T5 f5 P9 l, h' JPublic Sub readdatabase() '读数据 (读数据和保存数据实际上是一样的操作方法)2 H( c* E! Q3 R0 X, F% ^0 i
Dim i As Long
2 h* }& p3 k1 `2 U sql = "select * from test"! ]" V1 B4 P- P
rs_maxcut.Open sql, conn, adOpenKeyset, adLockPessimistic '打开记录集" }4 L' D. Z5 S1 }2 R ?9 r v
: y; H/ M) K# p _% |" J; y7 r5 A/ L. i
总页数 = rs_maxcut.PageCount '页大小rs_maxcut.PageSize
% H. @, t; ?- Z行数 = rs_maxcut.RecordCount '行数 (排除标题): B% v* o N+ _4 l2 |5 ?6 o
列数 = rs_maxcut.Fields.Count - 1 '列数 (排除标题)
5 U" K+ ?6 P) B& J
& x# i8 g8 |4 Y9 [ If rs_maxcut.EOF = False Then9 b3 P! E5 {+ i1 |% z4 [
i = 0- f4 A* f/ P) u2 Y* I: L4 f" _4 {
Do While rs_maxcut.EOF = False
0 L2 j M7 T+ a, _) x i = i + 1) ~3 O8 }0 w' t: l% e" ^
2 z, l7 c% @' K$ L
' If i = 0 Then str = rs_maxcut.Fields(0).Name & rs_maxcut.Fields(1).Name '读标4 k5 s$ W5 ]2 |) [2 q6 c) }
6 N7 |! N0 U) e% o '第一行 或者 第一列的内容 他们属于标题 所以不管是行列我们都是重第二行或列开始的
6 x6 V1 W! T; I
- w# n& b- H2 j3 u
: r( O5 U( ]0 Q$ h If i = 1 Then aa = rs_maxcut.Fields(1).Value '除去标题后的,第1行第1列
' J( k1 X4 m& t5 T# S L If i = 2 Then bb = rs_maxcut.Fields(1).Value '除去标题后的,第1行第2列6 R9 m7 l: f3 X
) f k" q8 E9 ]' n8 p, ~8 ~ '读所有内容到数组# T8 A, @2 Y5 v4 E3 }
For j = 1 To 列数
' ?4 b9 `) W: V' x) r' t 内容(i, j) = rs_maxcut.Fields(j).Value
, z8 { J1 p0 d/ W% H6 z Next) c& ^) y9 x3 R; Y
& D( l/ T, G7 A
rs_maxcut.MoveNext '下一行, W3 F% j8 f& Z$ j/ l" u7 R0 ~/ L
Loop: {3 M! i! w7 }+ _
rs_maxcut.Close '关闭
6 i0 s: b5 g% D& P
6 ~+ P4 ^& m' X! J! K9 H9 D. y% D1 @6 T2 P. ]5 e
List1.Clear" p5 Y' c J; [+ O% m4 F
For i = 1 To 行数
2 T" t/ L9 @# L; Z2 y) X For j = 1 To 列数
6 U* W1 D- Q- s0 E# \ If j = 1 Then
. F* u. O+ J. u$ a# h9 ? str = 内容(i, j)
2 K! e% f" T/ x, N2 q Else: a" r* \9 _; [, p2 u# Z- l
str = str & " , " & 内容(i, j)
' q6 B* V" d! u4 O End If' n8 }3 Y% s/ B, I; N& e
Next: U9 F! a' i$ x) `/ O9 d1 X
List1.AddItem str2 Y @( \0 C+ n+ i) v' A& q
Next
0 W5 o& K' z* ? a# j" B" G9 n
( d6 e7 G7 F' \ End If
3 Q- H4 K. ^0 M5 p2 t
* [, q% `( I, T, p/ o: P+ l
5 A7 ~( t- N" g3 {+ g' vEnd Sub
( R% r3 a7 Y f2 A; Y4 |/ Q& |0 u! `+ N# j4 z& o! Q! m9 r1 p
Public Sub writeDatabase() '保存数据(读数据和保存数据实际上是一样的操作方法)$ w9 _: |* U# q! H7 X
On Error Resume Next
, l+ X3 u+ u, | z Dim i As Long
9 ~" p2 O% q, S6 d/ ~ i = 0
; T9 ?% t' v* d, m& e, ?2 @7 Y& k2 P; [# q
conn.Open cnn '连接数据库
- R2 ^0 X! H# z" }2 i# O$ Y# {2 M, ^1 D) e% m- v0 o! F' [
'sql = "select * from test"
6 e/ W, T! ~( f3 ?0 S. d j8 \6 C
rs_maxcut.Open sql, conn, adOpenKeyset, adLockPessimistic '打开记录集
0 `5 W s/ k A* B& X3 r4 u7 s0 Y1 y; G w& u
If rs_maxcut.EOF = False Then$ ?+ C0 w) Z8 p9 g! P7 P. Q8 W& o
7 t; ~4 k X, n. I/ S
Do While rs_maxcut.EOF = False$ H6 g7 @4 O* f- }3 \; f) \0 H! [
i = i + 1
2 Y( l- l# R/ l& k+ X5 p
, M+ [. I! K5 ^6 o8 u5 L, \ '不要去修改 第一行 或者 第一列的内容 因为他们属于标题4 ]. r6 b8 i% c9 ]
& k# t+ a9 Z1 a5 F; s6 j" d* k
If i = 1 Then rs_maxcut.Fields(1).Value = Val(Text3.Text) '编辑第2行第1列
: u) x. J: E% I1 X6 D
3 N0 _9 g, c6 x# } If i = 2 Then rs_maxcut.Fields(1).Value = Val(Text4.Text) '编辑第2行第2列1 U; f+ u, v1 m8 \
7 U! }" S# Q& q rs_maxcut.MoveNext
3 @; W/ p+ R) I6 F1 S' F5 U- \' Y: b1 l! i: N( t" G5 y
Loop2 ~( x, D9 j Q2 t
8 ?; T( ?( K& [) {0 g t1 V* f$ N rs_maxcut.Update
5 M% }" P; O9 V3 H rs_maxcut.Close' i% f$ R( h H
2 I& j8 R% K+ n( K; M$ w- P End If
% K. u2 f* p# |9 i* u! o8 V& ~9 i) d2 v9 W( s9 P& G0 O& I( N/ W. `
End Sub
" ~$ g& z% j6 J6 j% O9 p
! \4 D- A0 |) c' p$ a2 b, i. A( p* x- U: t% U/ o6 c
' ^3 u$ T) L) F, h+ w: K" f4 @$ Y2 W
- N/ Q' Q# U7 E' Y
|
|