|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
c# c++ vb 是可以互相调用的* a3 a; W0 ~2 y
7 E4 k4 _- `2 S( h8 tvb操作access数据库 的方法; t& r. }! K# C7 [) a
7 t2 y* C0 d+ R% U' V
首先要安装 Office2003sp2
' E+ e4 t2 ?) s3 ^
( R2 w1 K$ V7 O, O, k列子:读写数据库(.mdb), f$ ^, F2 }; h$ Y6 d: l9 W4 c1 v+ ?
$ z% l, n& z" y3 W3 b' G1.创建 mdb
4 L% ]. l; n* p8 D( i* F' ^ r开始->所有程序->Office2003->Access 2003 新建一个空数据库 保存位置C:\report.mdb
1 v9 }5 s' M' r创建一个表格 并重新命名为test (操作和Excel类似)
* l9 I7 n0 s0 x
6 \- c3 C, }) _3 D8 G注意 表格名称 和源代码要对应
) x$ b5 I. y5 d5 G4 P2 m$ F7 }0 a0 y5 \2 V( k; f& b* }
, z8 R9 h( {/ X3 m, `$ S2.注册数据源(代码中已经注册)和写代码
: T; Y5 V& X0 v" ]4 J7 X D' l: L( q% {* \5 l
' b, c6 A u6 Q9 F2 Q. p, _
在新建工程时工具箱中是没有Adodc控件和MSHFlexGrid控件的,* y# e- U4 } d
我们必须点击菜单中的【工程】-【部件】,
; \7 F- ?, n5 x% [8 ^* o8 C在对话框中勾选“Microsoft ADO Data Control 6.0 (SP6)”和. c2 e, X$ G( ?5 `1 F, e" `* {
“Microsoft Hierarchical FlexGrid Control 6.0 (SP4)”,
1 L0 o B/ [) _" u7 P8 C最后点击【确定】,这样Adodc控件和MSHFlexGrid控件就已经放置在工具箱中了
" z3 c! J% A/ q4 r; @8 {3 q: |, F* S e: `8 I
% @$ |6 F* Q' f6 v) r o' Y添加4个文本控件 Text1 和 Text2 和 Text3 和 Text4
2 U" l$ t( J/ l0 x( z# ?添加一个按钮 ID修改成 “保存”
: o7 {7 O, ]" Z+ \3 ~ T添加一个 List1
+ U! g9 R9 L A, _: h. x$ D! Y
; h: `' i8 y3 Y9 Z代码如下* a4 Y0 T1 X+ S- A- d! k
7 T, K' Y5 M9 P7 H7 y4 R
+ L4 k' }9 Q v. n% q
Public conn As New ADODB.Connection '标记连接对象
( E' q" Y; O: A3 u# b4 L+ _Dim sql As String
w1 {/ ?$ [, T" i+ a0 @: j4 cDim rs_maxcut As New ADODB.Recordset
! ^% ]% }: i6 C5 p% b) H$ yDim str As String$ ` l8 P0 h& f, Y
Dim aa As Double, bb As Double
: W( ~5 \4 t1 u7 R5 j6 ?Dim mbd As String
6 r3 y/ ^" q: c2 [8 MDim 总页数 As Integer, 行数 As Integer, 列数 As Integer
4 `; I H$ {- Y) V- @4 GDim 内容(999, 999) As Double
: O; ~9 w2 s1 r7 x( k* E
% j" l# t9 j4 z$ @Public Function cnn() As String) i( Z) q# y. V5 }( |
cnn = " rovider=Microsoft.Jet.OLEDB.4.0;Data Source=" & mbd & " ersist Security Info=True;Jet OLEDB atabase Password=123") n. S- h# x* y. S- l
End Function c5 {+ [0 l5 r1 I+ o8 f3 l5 j1 D+ R
3 u: p: a9 T: b+ u1 L
Private Sub 保存_Click()
# e3 f+ v, c0 @. @9 b7 T8 `2 d. Y( m6 q5 ~
writeDatabase [/ O( a; a+ R
End
: D8 o" J" s' }. y' q. kEnd Sub: l$ `2 r6 w% _5 S
2 i/ C, V0 e" O. d' b5 y$ b# P
Private Sub Form_Load(). p+ P! c& N3 [8 z
% r) M7 Z0 R% Z0 W6 z" g: J. \ mbd = "D:\UG_OPEN\ini\数据库.mdb", {6 g l+ X; E, Z5 g e% G. k
1 u0 E# t$ V# S( a, Y5 i w conn.Open cnn '连接数据库
" t- x5 C( N8 h$ b- c3 G7 a readdatabase
; B4 R k$ {% ]! _# x9 ~( n Me.Text1.Text = "行数" & 行数$ `+ W {! m. D0 e
Me.Text2.Text = "列数" & 列数
6 F" D% A I8 ]: F5 F! d! YMe.Text3.Text = aa6 b: S5 S! r; E y0 `% k
Me.Text4.Text = bb! |1 o2 T7 G q2 P; s$ w; z" c
End Sub
$ {# _* x% ~1 z$ [ |( T5 z, Y2 M
Public Sub readdatabase() '读数据 (读数据和保存数据实际上是一样的操作方法)
; b1 E% J) |; {1 p6 S; g Dim i As Long
" g4 A& Q) I+ e+ V: Y/ A sql = "select * from test"
6 o4 l; j" ? I& b4 o rs_maxcut.Open sql, conn, adOpenKeyset, adLockPessimistic '打开记录集# Z3 m6 ^5 T) ?( V
6 @; v' [* T8 |" r
5 D }7 z. C; ~! q" N' z h
总页数 = rs_maxcut.PageCount '页大小rs_maxcut.PageSize6 _' j6 K; K1 j4 A" s4 |" G
行数 = rs_maxcut.RecordCount '行数 (排除标题)
& q) k& G0 N( ~列数 = rs_maxcut.Fields.Count - 1 '列数 (排除标题)( p/ y9 B+ J8 |- A( {/ z h( N
0 I% G# i0 O0 x- H5 n: l If rs_maxcut.EOF = False Then+ q6 A2 k2 d4 v) _: I
i = 0) }4 ^; D$ c: Z! K
Do While rs_maxcut.EOF = False5 l+ r! W, A- [# u
i = i + 1% j: V- x- u0 _% J
- G3 [' O K8 e
' If i = 0 Then str = rs_maxcut.Fields(0).Name & rs_maxcut.Fields(1).Name '读标6 a; d& f, ? d! R- h) h& n9 l1 e
8 H. M0 \5 G1 \ t- z
'第一行 或者 第一列的内容 他们属于标题 所以不管是行列我们都是重第二行或列开始的8 o2 Z4 j* \, |( I$ n. e v
2 o; L9 `, G9 F9 T2 O/ f
" V2 j$ o/ E1 T3 l" g If i = 1 Then aa = rs_maxcut.Fields(1).Value '除去标题后的,第1行第1列
* q7 D% Z! Y3 ?4 r" u If i = 2 Then bb = rs_maxcut.Fields(1).Value '除去标题后的,第1行第2列
, y5 J u* ~2 ]. G/ [4 R5 f) f4 R9 r7 B3 A* v0 o& v; K
'读所有内容到数组
f# p+ t* ]( M# I- g3 T For j = 1 To 列数
. d% V/ O0 d% K* k3 g6 y 内容(i, j) = rs_maxcut.Fields(j).Value; \. V, t! r1 F0 e$ Z: p
Next
8 [7 s( p% d8 [2 x+ ^: u, s
) U. T7 K+ A) }" d1 c" }8 J- N rs_maxcut.MoveNext '下一行# I) T: I9 g- ~( c1 H; v
Loop
8 z" o% t: |5 \* v rs_maxcut.Close '关闭
( A5 O b! v( h( p9 V
; h2 T, Y+ Y) \( j2 C f
& H2 k) i0 [4 @9 @$ l' O @ List1.Clear
; P# u1 ^ V7 D. @% c" G For i = 1 To 行数
& m2 ^" M1 u4 A% i/ V8 x* I For j = 1 To 列数
4 f5 C% V' W( j3 U6 H If j = 1 Then
& Q' F5 {& L O str = 内容(i, j)
& @ W4 |* N4 I; G. C1 \3 T3 ` Else
; ^" H$ ~7 m- M. l$ I2 J) j0 N str = str & " , " & 内容(i, j)) L" E7 N% \6 [7 I# {. {, _0 `
End If5 i5 z& F; F, K$ H6 @% G
Next
. a$ M: E% V( | List1.AddItem str
! U, Z6 K4 {1 I8 C- k Next
) a7 ?+ s$ i; u4 D7 ^' ^1 S+ _% h7 g5 T2 o; j' V2 V1 q4 K
End If
$ Z9 v( |( U# s' n$ o! t- P. M, U. o" s" A
! w% ]& r$ g. {! d5 E! L* X# @End Sub2 B3 ^% @% H S2 ~
- T$ D: i2 y: X1 t+ V- G6 y- a P
Public Sub writeDatabase() '保存数据(读数据和保存数据实际上是一样的操作方法)
/ K3 ^% \" K' W0 y On Error Resume Next+ Y+ J4 y+ P6 E
Dim i As Long
# V2 K7 X7 I1 P3 G) L i = 0
( }9 v5 w" n5 @( [
6 g' K) D# L$ \# [7 n1 jconn.Open cnn '连接数据库8 u: u. d* i4 L. m5 q
6 r6 a! n+ ]& v) O/ a
'sql = "select * from test"2 D+ y! h- q; ~5 ~# o& c2 d5 E
" E( |- k) b0 G& ]4 H9 [' e- r' v rs_maxcut.Open sql, conn, adOpenKeyset, adLockPessimistic '打开记录集
. Y2 c* V; H) ^7 T0 C/ @3 r# s- I d O2 ?
If rs_maxcut.EOF = False Then- f% k) `# S2 }/ K
2 m3 y. ]* O2 k7 l( ^, M
Do While rs_maxcut.EOF = False% D1 C, {4 i) M* o% O
i = i + 1
. R: z6 I( V. v) D& O) P4 }. j5 e% m1 M* o& J
'不要去修改 第一行 或者 第一列的内容 因为他们属于标题
8 W3 M( c% E* d: @% S
3 e# [* l7 i* |+ ]% u: s9 v W! ` If i = 1 Then rs_maxcut.Fields(1).Value = Val(Text3.Text) '编辑第2行第1列
: E w! M6 p0 S" r1 a* F' V# E
+ ]; \, Q$ O- b' V1 g5 L If i = 2 Then rs_maxcut.Fields(1).Value = Val(Text4.Text) '编辑第2行第2列( K4 H! o$ L. E. l! ]0 y
* l2 [* f4 k$ {' X rs_maxcut.MoveNext
" H Y `# Q1 o- [
; c% d, o/ z/ {5 O9 g- _' i- g, g: Q Loop
0 g1 n6 A/ U: Z8 e
' ^! a# M- V2 z. u/ D/ j1 s3 K rs_maxcut.Update
* X+ t9 x* S9 S: J M: _+ w/ { rs_maxcut.Close5 _0 Q6 n0 N8 M
8 N- k/ ]! W0 P, W: x
End If
+ _/ {3 W% c. F* n" i9 a6 l1 Y6 q8 v* \6 @; q8 T) _
End Sub
6 v h3 E1 _$ ]4 B- I0 G
# l n$ r5 s* y C& J
! n/ H/ n) I1 `$ C3 n
/ S' C! n& I+ [! Z: E1 i( x
& W, H s3 N" x% l# c% O4 n |
|