|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
c# c++ vb 是可以互相调用的
: k2 @7 ~. x w; |5 @
* D3 e4 X. R% o3 H" `: P uvb操作access数据库 的方法
: _' P. Q+ i- t4 B; G6 @/ ^3 G- l$ M2 G2 W5 r. Q8 x9 Q# Y
首先要安装 Office2003sp2
1 T7 d* S) K8 {6 {& f2 ^2 X, [! s& k9 Y" s# B
列子:读写数据库(.mdb)% S. c0 A. S6 z* B* m
8 I' J6 S" X4 j* g& H/ K
1.创建 mdb5 v7 N) B: A7 Y7 c: r; k- O
开始->所有程序->Office2003->Access 2003 新建一个空数据库 保存位置C:\report.mdb 7 b8 O, P5 X) X& V f7 W
创建一个表格 并重新命名为test (操作和Excel类似)
% F2 u8 X; a0 D) d
|8 o K4 l" G$ o7 R0 ~" G0 W注意 表格名称 和源代码要对应5 x8 U- }4 w. A
5 D* f) C* Y! O3 i) N/ S
: p( b2 Q4 z6 |! M
2.注册数据源(代码中已经注册)和写代码
$ h6 @! K3 S6 D4 F: w
" |8 c3 h1 l& ~" V; w% ?* V1 O8 ?& s+ @. \* {! W: y
在新建工程时工具箱中是没有Adodc控件和MSHFlexGrid控件的,
# g; f% f/ h$ J我们必须点击菜单中的【工程】-【部件】,7 `! f( [5 N! i" n) [# h
在对话框中勾选“Microsoft ADO Data Control 6.0 (SP6)”和) q% I& `9 N2 d7 o% P/ j
“Microsoft Hierarchical FlexGrid Control 6.0 (SP4)”,6 O& b1 l, a3 I- I
最后点击【确定】,这样Adodc控件和MSHFlexGrid控件就已经放置在工具箱中了5 |5 R! W7 `" ^6 F7 j) p6 H5 I
! L v) ?6 Q" V/ X7 l/ {0 }
6 T& d8 ]: C, n# v* u2 V% m$ y/ _
添加4个文本控件 Text1 和 Text2 和 Text3 和 Text4
( o( K- G Q8 x# d5 v% h添加一个按钮 ID修改成 “保存”
( \! j5 ?8 d& c9 u7 l添加一个 List1- y' P+ A3 U; r6 `" z' h
8 t3 L; w4 X2 f$ O代码如下
; v& m& w0 q6 w. g' D& H, ?
4 a8 D7 U7 J) Z0 i- H- ]; V v9 E4 l' L3 I
Public conn As New ADODB.Connection '标记连接对象
( ?) z/ u/ H+ G# ?; pDim sql As String
* P# d% W$ `0 b' eDim rs_maxcut As New ADODB.Recordset
3 x! ~' M2 k/ r2 FDim str As String
$ \' j+ v; M% W) `# q7 hDim aa As Double, bb As Double
% h- T; o) N. p/ RDim mbd As String; l- J. e+ X/ M0 F5 I! n
Dim 总页数 As Integer, 行数 As Integer, 列数 As Integer
& @5 I- n, x/ n ~Dim 内容(999, 999) As Double
f6 x, _9 h5 e1 ] m; [# k! j4 B
Public Function cnn() As String
) ?; f7 w2 ^$ {7 U2 N/ U- b: t: o cnn = " rovider=Microsoft.Jet.OLEDB.4.0;Data Source=" & mbd & " ersist Security Info=True;Jet OLEDB atabase Password=123"4 N. m* ^1 {8 P( Y( Z) d3 X9 s
End Function1 q# N8 M2 s- j& Z6 j
2 `, j5 p; ]2 k9 K7 o6 b
Private Sub 保存_Click()
+ r, @0 Y5 A1 V+ O' D- t6 l7 [* J, p0 q9 |2 X4 R* N F
writeDatabase, t9 n+ M3 d. t; k
End
+ y; }: C) A5 B9 T& ^3 `0 KEnd Sub) N9 i( B6 z5 ] ?' m" x3 x
5 W% l# @1 n0 h* J4 L" ]" E
Private Sub Form_Load()( b& S. @! S3 j! R6 U# Z
, a0 v+ O6 x' T
mbd = "D:\UG_OPEN\ini\数据库.mdb"+ w) Z+ E( e z) d$ l( b% x% ?6 A
: G. m: F6 O' O0 b1 u! e% Z/ g
conn.Open cnn '连接数据库5 b+ A/ J6 E( [( ]5 T
readdatabase
; w5 ?: `$ T/ L3 C" v& q5 e, I! X( |. G Me.Text1.Text = "行数" & 行数
( e8 N Z5 p" ?; N1 h5 ] Me.Text2.Text = "列数" & 列数
& H* W' a8 M3 i# W. iMe.Text3.Text = aa
- f3 b" n1 G- ^( f) YMe.Text4.Text = bb
/ K4 @! G9 A' c `6 w, p2 p! vEnd Sub
/ _5 C( t1 p- E/ J3 c4 D$ l9 M& j6 e+ z$ q' Y& q
Public Sub readdatabase() '读数据 (读数据和保存数据实际上是一样的操作方法)2 ~, @0 a* |' M2 F
Dim i As Long, q0 A8 c. v! Y( K- {* O
sql = "select * from test"
" ?" }# k1 p8 N0 H9 Y7 P rs_maxcut.Open sql, conn, adOpenKeyset, adLockPessimistic '打开记录集
5 }2 g" a( w% c) ^* g) \3 H f1 j1 K, r! P5 `
' u6 h% y; M# c1 x) A- _总页数 = rs_maxcut.PageCount '页大小rs_maxcut.PageSize+ d9 L* H4 H8 r; j7 Q
行数 = rs_maxcut.RecordCount '行数 (排除标题)4 n, @; Q( E6 m8 l! c; q5 r
列数 = rs_maxcut.Fields.Count - 1 '列数 (排除标题)4 {" s1 G) y: t; T |) W
5 y3 L% e0 y8 ?5 v
If rs_maxcut.EOF = False Then
( [6 \: N0 x0 ]% s) J% T: N i = 0
; }) ?& m. ?" f9 w Do While rs_maxcut.EOF = False3 Y8 b3 N# r$ h- H/ O4 s$ u
i = i + 1' S. e7 k6 Z$ Y+ E- w
% G0 |6 n# L, x* V
' If i = 0 Then str = rs_maxcut.Fields(0).Name & rs_maxcut.Fields(1).Name '读标
q1 Y5 x. y' G9 m0 p) Z& ]. H/ n# Z$ t) Z
'第一行 或者 第一列的内容 他们属于标题 所以不管是行列我们都是重第二行或列开始的2 J$ `7 `& f; s
" C8 b0 v$ B/ H# N0 ^
& j+ b9 R/ u; L If i = 1 Then aa = rs_maxcut.Fields(1).Value '除去标题后的,第1行第1列
4 C* J0 r6 @# U+ p) c$ q% B If i = 2 Then bb = rs_maxcut.Fields(1).Value '除去标题后的,第1行第2列" \( }0 _" U& y1 ]
" t N+ u) L. ?8 Y6 ~ v '读所有内容到数组
3 m( \; V& i; V ~: N2 S For j = 1 To 列数* b& S, {' K& ^5 R
内容(i, j) = rs_maxcut.Fields(j).Value; Z% I o4 |8 Q5 R" B
Next0 C, U1 r$ N7 A
! g$ F4 A! Q* q/ q5 ~! L; a& t
rs_maxcut.MoveNext '下一行
+ J* B* M. S6 X Loop
. @6 D* w9 ^; ]9 }- D0 M3 R+ i rs_maxcut.Close '关闭
- K0 {1 m. D+ K+ l2 d" B- t' ]; M; y2 r |/ K2 M) k% c. `
1 s! q* ?- ]! n7 r2 \1 v
List1.Clear! `, X a% Z; S- }6 g
For i = 1 To 行数9 u& P- g; _# ^* A
For j = 1 To 列数
0 `7 J" _/ O9 V5 m; d% P If j = 1 Then
5 d% Z! {8 L5 [2 x c. x6 P6 A str = 内容(i, j)
# o. N1 g- x M& b+ m Else; i) Q8 _0 s& c1 v; k- z4 V
str = str & " , " & 内容(i, j)
* g" b I# J7 a- |" ^) {, f End If& k, g3 A1 P8 u& E4 Y
Next
$ L3 L9 A! r4 ?8 L! S List1.AddItem str, i# a; g. h) H/ {. E- W' C
Next# g7 m l5 e2 C. B0 |
' z U! F* b4 K+ {$ D End If( e& m( z/ u0 [
& b# |& p: `9 d1 ~
; X) O$ z8 L8 h$ c! d' Z, H. A! FEnd Sub
% o' z8 k* \8 u& e- Z2 }' t9 z3 {5 }& q
Public Sub writeDatabase() '保存数据(读数据和保存数据实际上是一样的操作方法): c2 [ q" D9 t
On Error Resume Next, w* P+ M, ]" M0 Z1 P+ F8 i) j
Dim i As Long
/ ^/ U$ X/ Q5 H' h7 S2 l8 k: _ i = 0" u. M, q$ } `0 Q" {8 @, d
( l0 S: W" V8 c5 B+ z0 W
conn.Open cnn '连接数据库' I% R: j1 i2 D& H# |
7 _& l1 S6 r+ `. R! t" A6 L( g7 _
'sql = "select * from test"$ F1 \ d; l7 k; N+ J
9 N! w- i7 e% \ rs_maxcut.Open sql, conn, adOpenKeyset, adLockPessimistic '打开记录集& }( P* u, O6 m9 S3 X
9 g! r0 D$ S/ ` If rs_maxcut.EOF = False Then8 f$ W8 I2 Y# z4 U
- n, M0 a4 }0 y6 u& a) r8 H3 D/ N Do While rs_maxcut.EOF = False7 i8 \7 m9 ~3 k& M! W0 t" p
i = i + 1
2 A: W6 q, R" I" ]( R' W+ z/ _6 F1 M* S+ o. x! Z
'不要去修改 第一行 或者 第一列的内容 因为他们属于标题8 g/ T: E0 _. M
1 m" s' ~) m/ P* b! g$ Y8 \( X
If i = 1 Then rs_maxcut.Fields(1).Value = Val(Text3.Text) '编辑第2行第1列
3 o" B4 v4 H) ~* _: L) k; H1 y0 U; U0 ~ J+ r
If i = 2 Then rs_maxcut.Fields(1).Value = Val(Text4.Text) '编辑第2行第2列2 |9 q- c; }( n/ i
3 {( O1 Q" w1 [$ O' s
rs_maxcut.MoveNext4 ] w" g3 H& P% \- D3 U! a& W
. B. @3 M9 T; F8 s& J1 {( q Loop6 C% F/ V5 ?% ]! U+ D
+ ]1 B7 _! F: W2 b4 Q
rs_maxcut.Update3 H- \) `4 V+ S P% I1 z& F5 N; S5 K
rs_maxcut.Close
8 g( f# x, u+ v1 w$ G4 r
" S8 N9 l0 |* A' |2 s6 L End If
$ M: W0 g8 j4 I2 C5 z. B* \$ |) b3 G2 S! w+ g, @8 g. D5 ]
End Sub6 G& c* {0 { B: C2 V
$ [ ?% C2 k# [% c1 h0 H! k }# s: @4 R1 v3 d/ @* N
( z, o+ M0 r$ i& }" v; e O+ J) k& m" r' n! b" a$ @* z. k
|
|