|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
c# c++ vb 是可以互相调用的
# m8 O5 F7 l+ T% X0 W# j4 }. |2 l/ Q3 W% K2 s8 v- {
vb操作access数据库 的方法
7 A9 a5 S+ @8 ^; s0 ] [2 E
3 r! d5 [# p( C首先要安装 Office2003sp2
5 |' r5 H4 e, i, g0 V0 l6 p8 D( O, o7 c- Y) N$ B) Q
列子:读写数据库(.mdb)
; ]) }9 I ~8 p2 U7 x
& W) V& Z) N! ]7 W1.创建 mdb* L0 }" p$ M# _+ W' a' z# H
开始->所有程序->Office2003->Access 2003 新建一个空数据库 保存位置C:\report.mdb
6 j4 k+ c$ |, Z2 }0 r3 F创建一个表格 并重新命名为test (操作和Excel类似) k1 E0 _: b8 I% E+ S
- q7 E. f9 M! n9 q t注意 表格名称 和源代码要对应3 L4 b }. U" T" l2 T3 A
: e. i5 g1 x ^2 P" y* [
: x2 d* {/ K' l! A2.注册数据源(代码中已经注册)和写代码5 @5 c2 w# ~: I- j
9 p/ C' U( q8 R$ O, e( v
4 {0 ]8 U; m H. k! ^8 Q: ]& H
在新建工程时工具箱中是没有Adodc控件和MSHFlexGrid控件的,
) U7 F7 a; F7 ^0 e) ^* D, v我们必须点击菜单中的【工程】-【部件】,2 i5 E; O0 b% S
在对话框中勾选“Microsoft ADO Data Control 6.0 (SP6)”和
3 }$ K* j# x- @7 E/ N“Microsoft Hierarchical FlexGrid Control 6.0 (SP4)”,7 W0 @9 K/ _) p2 y5 v$ T
最后点击【确定】,这样Adodc控件和MSHFlexGrid控件就已经放置在工具箱中了
4 |3 c3 w: x3 ?) t. T8 ~% t$ h. x% u$ \ `, Y
. c: t! G& @; V z- k添加4个文本控件 Text1 和 Text2 和 Text3 和 Text4
: c: E! r5 W! _. ~添加一个按钮 ID修改成 “保存” i1 ^- \9 N5 k5 e: B. d
添加一个 List1
0 o' \9 }7 @9 J# B/ N" m
" n& f: O! ? I0 t/ V( D3 I& F0 f" r: |代码如下% b9 {" V+ @* d8 ]0 i* ?
/ m$ u; ]$ f8 u V; m$ _. v
4 S% `+ ?) M' o
Public conn As New ADODB.Connection '标记连接对象0 |6 @7 ~7 [9 ^5 q0 [
Dim sql As String% i9 s" J6 K( X
Dim rs_maxcut As New ADODB.Recordset
# d& E* e: r% i; ~* w0 ?8 T6 r, GDim str As String
: @; h @+ j; G$ w) EDim aa As Double, bb As Double- X# r& w% k: n1 }
Dim mbd As String
3 q) a( H) t T8 t2 G1 w! mDim 总页数 As Integer, 行数 As Integer, 列数 As Integer0 Q% M* q: {: v# k6 B* z) y
Dim 内容(999, 999) As Double+ |0 I& S+ C L5 q% v/ h! g! |: _
' y2 Y2 ?3 \! m. O/ r* j
Public Function cnn() As String
; z7 P* T# q; { cnn = "rovider=Microsoft.Jet.OLEDB.4.0;Data Source=" & mbd & "ersist Security Info=True;Jet OLEDBatabase Password=123"
5 n0 |7 S0 L4 H; y" g; H: l5 sEnd Function/ L0 X7 X1 H H7 k$ W
7 s. k, _5 |4 Y* o7 n7 d2 e
Private Sub 保存_Click()
+ V5 U% s5 \/ x" d# ^0 Z1 {# j, E' z5 u: f$ O/ X
writeDatabase
) O/ m9 Y, W. m End1 V. x( j" I* S: R
End Sub
- [9 m2 v9 L% G8 b5 f8 ~! G- D, T8 D# X7 m; X/ ~2 d
Private Sub Form_Load()
' ^2 d5 ^9 M" Z) {
4 B5 a. x3 O/ P9 u* o8 s0 y mbd = "D:\UG_OPEN\ini\数据库.mdb"; t+ ~; g- W2 a) j9 \+ G" r
2 J: @* `( c( Y conn.Open cnn '连接数据库7 l4 B3 z0 M% Z/ q; P
readdatabase
4 ?# u+ [% E8 D! ~1 {. ] Me.Text1.Text = "行数" & 行数
6 V* N5 N& p- M2 z8 q Me.Text2.Text = "列数" & 列数" }7 Y4 q/ N8 Y5 x% _! q
Me.Text3.Text = aa
) O6 _# Q7 t4 sMe.Text4.Text = bb
, I! s$ I# h) u3 wEnd Sub; W" Y. c8 c, l
f) b1 @" ]* c3 d9 K8 O
Public Sub readdatabase() '读数据 (读数据和保存数据实际上是一样的操作方法)
6 ~; `- E4 n, h' |; j Dim i As Long
7 ~0 J1 i, s3 m. l0 r* ]# I sql = "select * from test"
# t: Y5 A% s, E; p* i rs_maxcut.Open sql, conn, adOpenKeyset, adLockPessimistic '打开记录集
% r. A t3 K/ ~! N+ Q2 N
8 z, e {9 P4 D8 Y" U4 f) ^
a3 D4 s0 B5 V' X$ O# J) J8 o总页数 = rs_maxcut.PageCount '页大小rs_maxcut.PageSize
/ P0 r: i) T, _8 c7 n) s行数 = rs_maxcut.RecordCount '行数 (排除标题)
2 o2 _1 m6 v; I; f- `! {列数 = rs_maxcut.Fields.Count - 1 '列数 (排除标题) ?9 Z" E" E- }3 B2 M8 S
! ]( f% E& b# g
If rs_maxcut.EOF = False Then- z5 h B' V& n! z( H/ h
i = 0
0 b- d) E4 G2 ? Do While rs_maxcut.EOF = False
& h3 {3 v; W* w% r9 G" g2 S i = i + 1
% d- `7 J4 i2 C& X7 ], H2 c: r( m6 p; ?$ w
' If i = 0 Then str = rs_maxcut.Fields(0).Name & rs_maxcut.Fields(1).Name '读标
6 k5 ]: W! ?; m+ F# B
, v, ^, ]- n' P& [) s. c '第一行 或者 第一列的内容 他们属于标题 所以不管是行列我们都是重第二行或列开始的
8 p0 ^. f, B! [% v( }6 B, w+ ?! j+ c, U: S$ c
& L/ T9 S8 y3 s/ b8 [
If i = 1 Then aa = rs_maxcut.Fields(1).Value '除去标题后的,第1行第1列
' F7 ~1 @2 N* r- ?' m- C5 x5 d% l If i = 2 Then bb = rs_maxcut.Fields(1).Value '除去标题后的,第1行第2列2 I+ {) x/ m1 l' l3 J" P
) v* J/ g0 j& G. d$ y4 e' Y
'读所有内容到数组7 V. | e6 w- m
For j = 1 To 列数
$ Q$ m/ O% U! x6 g. O# B 内容(i, j) = rs_maxcut.Fields(j).Value2 m! S$ }1 x; }( n& U+ Z
Next
1 i1 ~# M+ L H( E4 I2 b `& G7 D- L7 i7 R1 g
rs_maxcut.MoveNext '下一行- |& N) i& O; r# E- o
Loop
0 a9 x4 z: ?. n" o% J7 r rs_maxcut.Close '关闭
: ^& D9 `" D" t
$ I. B% R9 A& I( O3 p( P# \) b4 ]: n3 _& x! L$ o
List1.Clear
& _6 X5 n5 [% ~' ] For i = 1 To 行数
+ w& r8 O) o6 m+ B' c. G, [ For j = 1 To 列数; v- B0 z3 z- ?6 Z U
If j = 1 Then; { X& ^+ _% _& k5 ^0 o0 V% B% W
str = 内容(i, j)% G8 m* f. P/ ~/ Q
Else8 s- q5 V9 T5 P; O2 `. {- m" s* A0 i) g
str = str & " , " & 内容(i, j)
6 b J3 W+ p! H End If
k" T1 Y, ]' h- | Next
& j5 ^$ q1 p) m# ~ List1.AddItem str f% e1 [/ a4 @" }( d& I. }/ s
Next
T2 o0 ]! [+ D6 c' H# e" l5 }# `4 U' \- v# L1 D
End If
6 v" c& V% d9 J& ], l3 M
4 k @" C5 q6 \
" |; X/ f3 e3 UEnd Sub
: ]$ t1 M h& C4 n
# P" d& U0 f2 n0 J K: |2 oPublic Sub writeDatabase() '保存数据(读数据和保存数据实际上是一样的操作方法)
+ J: h/ b' R m `# b+ s5 ]6 z On Error Resume Next
% T3 B( Q! b: v8 a4 l3 R6 z Dim i As Long7 c2 U6 G8 n+ @6 d8 a8 v/ M/ Y2 E
i = 05 Q a( ]- Z! I, c4 G; o% q
, }8 W7 |2 t- o2 F" S, _7 M- `% z& a4 cconn.Open cnn '连接数据库* x* e2 q/ ^4 `0 F
6 G2 ~, Y6 g2 O+ G6 ]'sql = "select * from test"
$ j4 N) h0 J! q
' L/ O9 l+ c3 _ k0 w ? rs_maxcut.Open sql, conn, adOpenKeyset, adLockPessimistic '打开记录集$ H, m+ | ]% c; X( }2 W9 p
% C% A& X J5 y" u" t& R9 N: ~
If rs_maxcut.EOF = False Then
1 F9 O* m3 k/ j5 ~2 r/ p/ s: T5 m
Do While rs_maxcut.EOF = False
$ A/ ]( r3 E% E7 U* z% h1 P: R i = i + 1
( r1 {9 u/ H0 K2 f' P: C' C# a% K. h2 B
, k0 I: @3 Y% }( Y' e '不要去修改 第一行 或者 第一列的内容 因为他们属于标题
* Y1 H: L5 `' B& X6 m
8 s2 T# C3 n: }% d9 {8 o- S3 g If i = 1 Then rs_maxcut.Fields(1).Value = Val(Text3.Text) '编辑第2行第1列
2 J4 k, x0 A: z9 _* ]+ n" d" _/ L
+ ?, ?+ S+ o) P) q. C1 L* _ If i = 2 Then rs_maxcut.Fields(1).Value = Val(Text4.Text) '编辑第2行第2列2 b* g& A/ R' \* D0 k4 w
C. S3 z8 |5 V7 M+ }! T$ Q
rs_maxcut.MoveNext- S, m% n u4 I
0 S. Y% G$ N/ u, V m
Loop1 M# P8 Z0 G J, O4 k
& j* y) G1 m0 o- S, v! h. m' u rs_maxcut.Update
+ H% R6 [4 x0 q6 P) t* l rs_maxcut.Close
+ v7 e$ f. `8 G
# H: z2 X9 ^; d3 L2 w& v9 P' c End If
9 ?. F' _) u5 _' o2 r& G7 E0 b5 u: @- }
End Sub6 |# ?! S( Q5 D. r: b. q
+ {4 e7 C- ~ n2 o! u3 _; d) r2 t# n( U- F
. g; {% J5 ~" M' Z- c b a* X
" k4 } D( U, a" _ |
|