|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
c# c++ vb 是可以互相调用的
4 S) Y* {, Z; `/ e( D. t: x- y. X" p* U
vb操作access数据库 的方法4 u* A c* @, U& f1 _; h
' Y2 i* m- j. [' N
首先要安装 Office2003sp2 5 E( m( _7 n. x- w
# r$ \7 T) E# y' f列子:读写数据库(.mdb)
+ ~: W: Y' ]5 h) H1 u
! V) [0 p5 p0 H% c* q1 {% v& E% G1.创建 mdb& ]% J; @- I/ l$ G4 i# M
开始->所有程序->Office2003->Access 2003 新建一个空数据库 保存位置C:\report.mdb * T# j) J" G/ [: d1 P6 |
创建一个表格 并重新命名为test (操作和Excel类似)
* U4 ~2 |" o6 w3 \1 J8 L
4 x4 G& P+ i" f3 ^5 e4 X注意 表格名称 和源代码要对应
- l* l( t4 ~3 o; P, C6 O2 D5 ]( `
$ ^% k5 f6 L- u* z* p) z
2.注册数据源(代码中已经注册)和写代码
( T) N6 M. R! U2 }9 x) H
" F$ [% a; ]4 ~# d1 `- f" A
& r/ H7 T$ Y" k1 @4 }7 Z% j2 B在新建工程时工具箱中是没有Adodc控件和MSHFlexGrid控件的,
1 I. Q' I( f# ?8 b* c我们必须点击菜单中的【工程】-【部件】,3 T: i# H _& w% r! l0 t, A
在对话框中勾选“Microsoft ADO Data Control 6.0 (SP6)”和. U9 R7 X3 }4 @7 Q* G
“Microsoft Hierarchical FlexGrid Control 6.0 (SP4)”,
! b- l7 D3 D/ L) B# v. x: @最后点击【确定】,这样Adodc控件和MSHFlexGrid控件就已经放置在工具箱中了
( a: b' ]: Z% o
|6 _4 T6 ]( K% b9 r3 U; r- }; K$ h$ j: A' g
添加4个文本控件 Text1 和 Text2 和 Text3 和 Text4
4 p; O) [5 u4 L# W8 ]1 M添加一个按钮 ID修改成 “保存” ) a1 U( \: }( q. I
添加一个 List17 V/ R7 F2 V, t2 G) J8 V
) W- v) d6 {% g代码如下2 O/ Q6 Y1 H( q, n; d6 B4 d
7 d3 @/ V7 E, q% P0 [" E5 x$ t/ }2 R" L# G# F5 `2 t
Public conn As New ADODB.Connection '标记连接对象
# K8 i/ y+ N9 I0 O; d: t* cDim sql As String
( _2 |, \% w' \" lDim rs_maxcut As New ADODB.Recordset
4 M6 U! G6 O4 x" |5 wDim str As String
]' |$ p# O' k+ n' E0 u9 YDim aa As Double, bb As Double
2 p; ?, O) w$ n+ p6 CDim mbd As String# Q/ `! q; g! L0 S2 N; X
Dim 总页数 As Integer, 行数 As Integer, 列数 As Integer3 Y8 l$ x; m V2 L8 u* G
Dim 内容(999, 999) As Double7 A0 l$ E: K) b
7 e1 @7 f& ?) o$ ~& F
Public Function cnn() As String
: x* ~$ u7 V: s) U" B3 I3 n4 | cnn = " rovider=Microsoft.Jet.OLEDB.4.0;Data Source=" & mbd & " ersist Security Info=True;Jet OLEDB atabase Password=123"- L* |+ u- q6 l( b( `1 _1 E
End Function
& V' v: o. {! W) Y, ]& s( W3 ]$ \ D2 C( p
Private Sub 保存_Click()
1 V3 q: a" W4 F' `$ {3 p: j- ?. m! i. }9 r0 c% J$ r: {
writeDatabase- {( z) s8 \- b" S: |
End
9 S/ b& n2 x9 w. i4 CEnd Sub
8 ~2 U+ G6 R9 y+ p2 _7 p( f# Q7 V1 Z& c$ |5 j x3 B) a7 i, d
Private Sub Form_Load()
% x: J7 ?8 ?3 V- Z4 M$ o: }/ V, f3 R$ H. [5 @
mbd = "D:\UG_OPEN\ini\数据库.mdb"
/ R6 S% c* I7 ]2 F% {; `! c* }) N- `! S2 T
conn.Open cnn '连接数据库# t( D7 \& t0 P4 Z2 a- q
readdatabase/ V9 P% ` I9 J- w& q/ M
Me.Text1.Text = "行数" & 行数) _- G+ _4 I; D; Y/ q" q" B
Me.Text2.Text = "列数" & 列数, j" X$ v! d+ |2 D
Me.Text3.Text = aa+ e* W! x: i' d6 y& l. M& n3 ~
Me.Text4.Text = bb$ P5 z" @6 z6 D+ @2 n' x/ |8 g8 r
End Sub( \% ]8 [% A& c5 J2 H& [" L
0 g V, K0 O0 a4 p( @
Public Sub readdatabase() '读数据 (读数据和保存数据实际上是一样的操作方法)
" N" ]* n; g, G; K Dim i As Long
% B- L& M8 Z$ S: |* \$ j sql = "select * from test"
0 p& {* K! W7 v/ u# h. Y rs_maxcut.Open sql, conn, adOpenKeyset, adLockPessimistic '打开记录集" Q1 k8 l5 r5 X
4 B& x# c. g4 P1 t% N% T" n: r& k
" t5 X0 r6 Q# t. s5 [ n+ X总页数 = rs_maxcut.PageCount '页大小rs_maxcut.PageSize
$ U) j8 l% A# j# ~9 o行数 = rs_maxcut.RecordCount '行数 (排除标题)# f E7 f2 s+ p' Z
列数 = rs_maxcut.Fields.Count - 1 '列数 (排除标题)
+ |. F5 x3 ] x% Y* o. O3 V5 v5 J) B* I& I4 C2 \, R0 F) W
If rs_maxcut.EOF = False Then. l9 x, S+ z5 ~
i = 05 \) }; B+ R' x% K
Do While rs_maxcut.EOF = False
( k9 N/ r, w" i, P2 x i = i + 1
7 X# z1 O: G* S5 _6 G9 }3 ]
. Z+ L9 d, ]0 n" s ' If i = 0 Then str = rs_maxcut.Fields(0).Name & rs_maxcut.Fields(1).Name '读标6 S& Y$ z, V [! w
5 K- B. X [' j0 r! p7 C '第一行 或者 第一列的内容 他们属于标题 所以不管是行列我们都是重第二行或列开始的% U1 S# c4 _& `, ~( t
9 d- F' I! g6 T! u* V* E0 Y0 F- J9 f: i: d9 A
If i = 1 Then aa = rs_maxcut.Fields(1).Value '除去标题后的,第1行第1列2 Z( H. |8 ~. [) m* s- `- i2 d5 \
If i = 2 Then bb = rs_maxcut.Fields(1).Value '除去标题后的,第1行第2列
& T' T" g. h# N& Q" d0 Z- {5 a7 W: d" d
'读所有内容到数组
/ h5 f' I: P$ ]9 j For j = 1 To 列数
- _% u( ^" e( t: _3 o$ F+ M 内容(i, j) = rs_maxcut.Fields(j).Value ]1 c7 S2 y8 _' M) l; \% M& p$ k
Next' O9 H; ^0 Q5 n
3 f9 R5 L4 C1 J8 e6 M rs_maxcut.MoveNext '下一行; Y; b$ h8 W L$ `9 u$ h# N% y8 o
Loop/ {( S* p% _9 @$ J
rs_maxcut.Close '关闭5 I/ L! U9 b) L& r4 m7 _
2 P' H! m b1 l
+ A6 i" p: j1 W }# l G5 _! R5 P
List1.Clear' T6 v( o1 Z2 o. W) ^
For i = 1 To 行数
$ }) n; I& J3 l! t, t For j = 1 To 列数) [+ V2 o! Y1 V0 p( Z" z7 { R
If j = 1 Then
$ R# z1 Y& K) c0 O& ] str = 内容(i, j)! o k6 |: c8 v+ E
Else
" C& D# }/ `- S# W& s5 d- @8 S str = str & " , " & 内容(i, j)
' E- z6 F5 `, A" Y3 L9 m3 g End If5 [/ _; d- l4 W
Next/ }/ ]- E* e" b# A0 X4 }
List1.AddItem str
+ x: X7 D. |5 _1 s0 c2 K Next
2 ]" M7 K" j- g) F. x, S/ k& O) T9 H9 p8 b |5 @8 \
End If
4 @4 c/ o) Q1 u: ~/ J( A! |& V9 D5 |! \5 Z F1 Q9 e% u$ N
& h: ~ H3 y tEnd Sub# _0 {+ R! T7 A$ Y. R
+ U7 V5 ?" B+ H" C7 g
Public Sub writeDatabase() '保存数据(读数据和保存数据实际上是一样的操作方法)" M) V! |+ R I4 ?$ o
On Error Resume Next
. t5 j) m j- j5 }4 x Dim i As Long+ @( I* Q/ K, h7 P3 g' T5 {% I
i = 0
9 s6 T. e8 N, P5 x$ k+ s- U: L9 b8 Q4 `4 w$ q/ \1 d
conn.Open cnn '连接数据库: {- D+ o5 K& e% @4 W: I: x
# [+ U8 k) B! T7 M) _! |
'sql = "select * from test". }! j. q% W `( t
+ F3 b0 T& _1 l9 E1 j
rs_maxcut.Open sql, conn, adOpenKeyset, adLockPessimistic '打开记录集* |* t8 f; f% M5 w& E( H3 j
& H& |1 y2 s* ?: ?
If rs_maxcut.EOF = False Then% w) z% w+ V& G( @, o$ T4 d
6 w. W9 R% m6 t. B" C0 B Do While rs_maxcut.EOF = False
' O. m( R Y3 s- t3 b- [! k' X0 a8 V i = i + 1; S8 h" L# E2 g, [3 S& m5 p
+ g7 m/ P8 v- _ `; O
'不要去修改 第一行 或者 第一列的内容 因为他们属于标题
6 {8 K( X& ~0 Z" ~" k9 u/ R0 [* A1 Q4 q l* J
If i = 1 Then rs_maxcut.Fields(1).Value = Val(Text3.Text) '编辑第2行第1列
- w( z0 \) P. }' R
" X3 ?' `' n0 o& }9 P7 ~( f$ ?2 Y If i = 2 Then rs_maxcut.Fields(1).Value = Val(Text4.Text) '编辑第2行第2列9 P# e- z1 z8 ~% ?, A; t& X
- v% e7 ^# L) ]( G rs_maxcut.MoveNext3 x" \ L* r4 c+ \2 @
5 N8 I, K( Q4 y- e) s4 M8 X! C
Loop
5 p& {8 U$ p( {* i. R; N k
4 ] }* G L( S( m, k5 H' _ rs_maxcut.Update1 M- t/ l6 x8 X- F6 y$ F/ c! F
rs_maxcut.Close
$ d4 l! Q5 l! c$ L2 M @: h6 {0 c1 ^0 v1 ~+ ?
End If
! D( N: B- z9 _5 ^5 C. I4 S
3 j+ l8 C# O2 x, S" B0 z; X/ q1 rEnd Sub# e3 E; p- e9 n
6 c, R3 `; N5 T, O, Z8 I0 {
5 ^0 ~4 n; h+ a: N; W3 m
% h9 v- I+ M5 _: [
( M8 h: C3 e: c& t* N& q
|
|