|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
c# c++ vb 是可以互相调用的2 s" F* D: t4 s; f
* E* s2 T5 D, hvb操作access数据库 的方法2 F( ^" W: G7 h0 r: j7 @
; e# n: c5 v) @; l首先要安装 Office2003sp2
9 s* Q' E2 f4 H! ]7 ^1 ?1 X8 C+ q& l2 L/ a, |
列子:读写数据库(.mdb)1 d" i9 n! B: f$ G; u% B" z
7 Y, X. w: e) m3 X+ Z( b; _5 n
1.创建 mdb
! ~8 G2 G8 S/ b. Y' ]: U, D开始->所有程序->Office2003->Access 2003 新建一个空数据库 保存位置C:\report.mdb - q1 q9 c6 A6 [+ {& n
创建一个表格 并重新命名为test (操作和Excel类似)
( g& M8 m: t6 [9 r3 p1 }
& h- _+ \5 o$ L* ^* g9 ]2 B- E, M注意 表格名称 和源代码要对应( @+ w6 e1 R. w3 Y9 y. c0 j4 W% G+ I
+ P; g# Z3 ^' b! ~. {4 c/ R
: Y: I- N& g9 T. {# _2.注册数据源(代码中已经注册)和写代码* d8 [) y8 E2 v& B2 \2 P
6 J: \1 [6 U2 W& e2 g) b$ s2 \' N: F( P/ f2 ~; ~$ `) J
在新建工程时工具箱中是没有Adodc控件和MSHFlexGrid控件的,3 b' l$ D' _! M, W, }- T
我们必须点击菜单中的【工程】-【部件】,
: m0 u: v5 ?) b8 M7 _9 p- p* a在对话框中勾选“Microsoft ADO Data Control 6.0 (SP6)”和
) g j, }3 g' N“Microsoft Hierarchical FlexGrid Control 6.0 (SP4)”,
9 V, A+ R% g3 Q3 C7 x+ c, i最后点击【确定】,这样Adodc控件和MSHFlexGrid控件就已经放置在工具箱中了0 D; D* M0 Q+ X: H( ]
- u6 s/ V6 ?# P c6 p% l. V
' q9 `/ w- o* B6 x1 h添加4个文本控件 Text1 和 Text2 和 Text3 和 Text4
* T5 B* B; S% q5 H+ t8 t添加一个按钮 ID修改成 “保存”
+ g1 V/ B' ]1 c' z7 Q! g* v添加一个 List17 S3 Q0 s/ Y2 }% P+ p
, t3 ~+ L& B3 ^代码如下
1 y. _' I) |) P
6 h& x1 _1 Y+ ?% R+ S* Q' a; L8 q0 B& \& T
Public conn As New ADODB.Connection '标记连接对象5 A/ {3 i6 H8 T' |6 v
Dim sql As String
, \/ i" ~- B# {, j0 ~3 b7 eDim rs_maxcut As New ADODB.Recordset7 `; I3 {( K5 \1 o( O2 v
Dim str As String
% I+ L8 C: x* M3 L: {% vDim aa As Double, bb As Double
6 y+ f. i5 l& Q) MDim mbd As String
9 o: h( e$ h0 ]* LDim 总页数 As Integer, 行数 As Integer, 列数 As Integer) Q$ W5 b2 i" m8 D3 k' _
Dim 内容(999, 999) As Double* \+ p7 K( P! _# E2 D
* Y8 q5 Y& W7 t2 [2 E8 y% `
Public Function cnn() As String: q. b Y2 x# r' y9 l
cnn = "rovider=Microsoft.Jet.OLEDB.4.0;Data Source=" & mbd & "ersist Security Info=True;Jet OLEDBatabase Password=123"0 U( E( a1 H! U1 s8 [% q0 w9 q
End Function
+ ^% p4 l& Z( ]
9 @* `* B( y2 {+ Z2 WPrivate Sub 保存_Click()
6 ], U/ x0 H! \0 }) I( }2 w! z7 s0 ^/ f( \ \. n5 z
writeDatabase
$ D8 H* |$ s3 {1 H% x4 F2 V) j# k End
$ {4 ]% I2 _9 a$ m5 e9 rEnd Sub
8 q2 c5 |% g" h) S( e1 F' O, s) r2 ~0 X8 h# r! S( n& s; y
Private Sub Form_Load(): J9 x7 ^8 m% D i+ w
. H) z2 d b5 k4 `( `$ m m mbd = "D:\UG_OPEN\ini\数据库.mdb"
) x/ B5 r6 v" L, o" Q F9 `$ M7 j9 @
conn.Open cnn '连接数据库
$ ]) V, `, V$ K( @' L readdatabase
$ `7 n$ @, x. N1 r, ~/ W Me.Text1.Text = "行数" & 行数
% {! X% n" V* ? X1 o( ? Me.Text2.Text = "列数" & 列数
$ l$ @$ t p) DMe.Text3.Text = aa
2 k/ L+ [( l" e" }8 `1 |' h* W0 a& ^, O1 hMe.Text4.Text = bb
; r& S$ b2 `- [! S+ z0 g, h# t) r7 JEnd Sub5 |# |; ~* a6 R7 S! e! }
; Y5 H, A+ Y- g) y2 s( B5 V
Public Sub readdatabase() '读数据 (读数据和保存数据实际上是一样的操作方法)/ }* W, I+ b! b, {+ Q& }4 w9 y+ ]% \
Dim i As Long
% A* a* ~! d# f4 W P sql = "select * from test"
. Y7 c& A2 w1 L. u rs_maxcut.Open sql, conn, adOpenKeyset, adLockPessimistic '打开记录集
6 p* f& G+ @# j$ T1 ^3 {5 i
, ^0 W) d% y: J# t+ S) Z& `/ z
1 |6 c. O }6 Z* H$ D, O4 z. A总页数 = rs_maxcut.PageCount '页大小rs_maxcut.PageSize
{1 O/ ]1 S: l, p行数 = rs_maxcut.RecordCount '行数 (排除标题); ?( A" z7 \/ S0 Z8 S/ a
列数 = rs_maxcut.Fields.Count - 1 '列数 (排除标题)* t" ?' [# ]+ ?& |$ r
$ ?/ o& U1 S' o/ O* v( J. j) f If rs_maxcut.EOF = False Then) L8 ?1 y" M- B# H: ~9 o# T) P
i = 0+ n' W6 X& z0 r9 R" J
Do While rs_maxcut.EOF = False2 s7 U* F& Z' B, X7 Z: z6 X2 x. q
i = i + 1
3 [9 y: f6 l) J- ^ u* }/ O4 @+ q
' If i = 0 Then str = rs_maxcut.Fields(0).Name & rs_maxcut.Fields(1).Name '读标6 k" Y6 W3 N Y+ C
" B6 G2 ^) b4 M- M '第一行 或者 第一列的内容 他们属于标题 所以不管是行列我们都是重第二行或列开始的8 }+ R9 M: B6 Y0 f1 J
; Q, V4 j) b+ ^. T4 Q- C0 |
' h7 F, Z0 i( z9 K
If i = 1 Then aa = rs_maxcut.Fields(1).Value '除去标题后的,第1行第1列
! I! X! f% I. \ If i = 2 Then bb = rs_maxcut.Fields(1).Value '除去标题后的,第1行第2列
* R1 x _- Z5 m# z
6 k; k+ m. `1 z% _1 K- j '读所有内容到数组* r- ?% j! o- }' V9 G
For j = 1 To 列数' j/ s! x" Q$ X1 L. O) |) F7 k
内容(i, j) = rs_maxcut.Fields(j).Value) f5 r1 @% o+ O' O* H) h3 D
Next1 f5 o& n& y8 k$ U& U+ _ T
* M( i# x6 d3 d. G0 c+ H/ I5 g4 U rs_maxcut.MoveNext '下一行9 u/ l, i9 d& N3 e# c- x
Loop
# {! K {8 p$ a: e' U rs_maxcut.Close '关闭+ J! J/ g0 D& H7 Z+ G% [: M- M
' j, x9 I0 ~, e5 P3 \" V/ Y3 X
0 H: p* E6 L+ j7 N' j8 U1 D3 A
List1.Clear
; I$ C. t' M! @2 m1 w# T For i = 1 To 行数
* D1 x/ C% g3 w% `" H* ]) [0 c For j = 1 To 列数
* @+ l* |) w% s3 K& c$ [% W If j = 1 Then
+ u5 Y$ H0 g8 g str = 内容(i, j)
8 [* K; {0 ~3 ~& H+ U$ h! _ Else
) ~( z) u9 c; D h# Y# i0 i8 ?: V str = str & " , " & 内容(i, j)
1 f6 ?$ n. x) b c End If1 H+ ?: P) F& {' _: w+ }
Next' M0 N4 S! d& l
List1.AddItem str
4 p) R9 u# M# R2 E! E Next
( a/ }& |+ @5 A0 E( ]& I6 q' h( F* H8 U7 p0 I6 U
End If* [, a) b6 K& l
1 L' q: a% P* @2 f
" u/ S* m. E3 A8 S, h; eEnd Sub
1 @. r0 Q: ~4 j T- j2 W: X) w4 v5 w0 p. p
Public Sub writeDatabase() '保存数据(读数据和保存数据实际上是一样的操作方法)* U9 N8 Y. C9 P. Q3 }. O
On Error Resume Next
8 O% F6 f& J) W% M# K% R Dim i As Long" i; X W1 v! a5 G, L
i = 0
+ s/ @, J+ }1 \& e4 R
2 z% g# C4 H3 Z/ V# bconn.Open cnn '连接数据库: y) y2 G V+ g" Z$ n
; \( e5 U0 }! p4 T' J- G3 `
'sql = "select * from test"
4 V2 m. ~( h) m. P+ w6 i2 J( u! c$ e7 S* A% _: R. m$ f
rs_maxcut.Open sql, conn, adOpenKeyset, adLockPessimistic '打开记录集* n' K/ k, _- a) e5 P* Y
0 A5 f2 a" i; N1 M If rs_maxcut.EOF = False Then0 [) O, |2 G" ?
7 J* U- J8 ^9 f6 V4 d6 [
Do While rs_maxcut.EOF = False
) b- @+ M# R6 y i = i + 1
& f+ U. X& Y u% s; w8 x' I$ M0 v' S4 o. H: E) ]$ x) g; _0 X
'不要去修改 第一行 或者 第一列的内容 因为他们属于标题
. B S5 @- B, a& A
0 C# L9 k- |- i, m If i = 1 Then rs_maxcut.Fields(1).Value = Val(Text3.Text) '编辑第2行第1列1 Z8 m; }2 a! u1 I. n
& c: b9 k7 o; N& r: J5 h V
If i = 2 Then rs_maxcut.Fields(1).Value = Val(Text4.Text) '编辑第2行第2列
3 N- r L' r' R: N7 S1 | Q% w0 J* w* b) E7 I
rs_maxcut.MoveNext
5 m6 u7 M# d$ H8 k# S$ b7 V% h W6 C( @" m$ p6 y' k+ p, C6 l
Loop
( Q: S. ~" V1 {; O% m% Z& Y
$ p* a# l1 E0 n( |. O/ n rs_maxcut.Update
5 J. f# A$ T% r8 C9 D rs_maxcut.Close. K' y3 W) c8 S: _5 G! f) i- m
5 g5 L! v* @3 `% h5 \
End If7 x, P6 j7 T: k# D" F
& v$ k& z. `/ T( \$ S1 gEnd Sub
; J. t* I/ R' T& {
: j# d5 M2 M4 x( E2 V% J1 @7 a% a+ ?
$ n: K' {! b" c2 v1 V
, }' c1 G2 l. C7 m |
|