|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
c# c++ vb 是可以互相调用的
" Z) j% ~. H0 P4 n) F$ `7 }. D5 T* E( @0 s, f5 P
vb操作access数据库 的方法1 S1 G, V7 g' c5 R o( D r
+ [ x0 \# \( S/ G2 h( I; [首先要安装 Office2003sp2 T# T; w8 l9 G- ]1 |; ~
$ r) t g( ]* }3 q2 H列子:读写数据库(.mdb). n0 U6 \8 N( E) j- n/ k
: P& }* y: u4 `
1.创建 mdb
6 R+ B! c: ? c( }1 z开始->所有程序->Office2003->Access 2003 新建一个空数据库 保存位置C:\report.mdb
7 s; E* Z. B! z) N3 u* o创建一个表格 并重新命名为test (操作和Excel类似)3 l' F! ], M5 U
* w5 B* z* ^/ b( i+ p: [* D# x' C注意 表格名称 和源代码要对应
( m, T0 s: y( ]; T, x9 |, O- O) X
3 `$ Y" X8 S7 O& i2.注册数据源(代码中已经注册)和写代码% w$ U: Z' P9 l- |0 d3 t! A% h' ^8 A
8 ^- s. S5 R6 O* Q9 V0 I: V5 B+ _! i! p1 g1 l
在新建工程时工具箱中是没有Adodc控件和MSHFlexGrid控件的,
: s+ e# Z+ R: c/ g$ _ t我们必须点击菜单中的【工程】-【部件】,
+ X3 _5 j% o: F8 L: I* _; h+ J在对话框中勾选“Microsoft ADO Data Control 6.0 (SP6)”和
! m9 j: H# M7 R: S“Microsoft Hierarchical FlexGrid Control 6.0 (SP4)”,4 G0 Y/ X8 K; {. P; a4 j9 p
最后点击【确定】,这样Adodc控件和MSHFlexGrid控件就已经放置在工具箱中了
3 O+ F! P5 d) @. _7 `+ g
/ c P* ]0 W; k1 G0 H9 b& |. d# n% p7 A N9 ~ G5 E% V+ E$ @
添加4个文本控件 Text1 和 Text2 和 Text3 和 Text4 % J: q3 @0 c( `6 i; t
添加一个按钮 ID修改成 “保存”
8 A- B Q K7 d- N( c, Z' b添加一个 List1
# {. k- b5 H) Y2 f9 b8 s1 w i4 k" R ]0 m% S# `( J
代码如下9 l4 i1 J( X* J4 a
. J# b0 e( a7 u: R5 [- a6 M8 w+ }1 h
Public conn As New ADODB.Connection '标记连接对象
' {/ R$ H$ e1 W% MDim sql As String
# o/ @" v& y" K) d/ b: [8 {+ Y) p- @Dim rs_maxcut As New ADODB.Recordset$ N9 }6 i. Q( U1 K6 V6 _4 [
Dim str As String
: R1 K# d1 ?; Z7 q' ?; DDim aa As Double, bb As Double+ L7 _" L+ s, q9 T" G" s
Dim mbd As String8 M6 G0 t2 V% a. [5 M
Dim 总页数 As Integer, 行数 As Integer, 列数 As Integer- v7 ~7 ?. b: t; ~
Dim 内容(999, 999) As Double5 m3 L2 D/ c5 p% |1 ]* C8 W
! q( w, `8 Q1 jPublic Function cnn() As String' q" m7 Y4 C# Q6 L( ]2 W1 u. `
cnn = " rovider=Microsoft.Jet.OLEDB.4.0;Data Source=" & mbd & " ersist Security Info=True;Jet OLEDB atabase Password=123"
. W: V# m* T4 z; t7 i( H* L* REnd Function) t: C; }2 c' A- ~2 p
( z0 I2 x* R9 H+ J7 [: q* W& i
Private Sub 保存_Click()
8 ]9 `% V: \1 U7 I1 \3 ^5 j& e" X& q( R3 a1 K
writeDatabase' B1 X9 ~3 N6 x* F
End
4 g+ `8 S9 d8 e, [End Sub! q7 D1 F/ d+ D$ A0 P# `+ N9 z$ q
+ U5 y. v+ G! S3 e
Private Sub Form_Load(), l1 u% t, c0 V' u7 i
) F' B! a# s/ X1 q
mbd = "D:\UG_OPEN\ini\数据库.mdb"5 u) w" O. j8 Z
1 o4 A( U, w e( V7 l6 l5 H. g5 ?
conn.Open cnn '连接数据库: N \* \3 v6 f8 m: W
readdatabase) t0 `, a3 X3 W3 N/ K: o
Me.Text1.Text = "行数" & 行数
& W- ?! q4 V; D* ~0 [; ` Me.Text2.Text = "列数" & 列数2 @8 l- z& i0 \
Me.Text3.Text = aa
3 ~, D4 E- U7 H5 E' x2 @6 C" XMe.Text4.Text = bb
4 |1 H6 _: M, x% x JEnd Sub0 ^5 m/ e' Z/ N/ z8 o. W' y
& A0 p( ~; j0 @( |1 O
Public Sub readdatabase() '读数据 (读数据和保存数据实际上是一样的操作方法)
" f9 p) O, J$ E Dim i As Long
5 f( c, F! {, } sql = "select * from test": G, w g; `# P# T& {% Y
rs_maxcut.Open sql, conn, adOpenKeyset, adLockPessimistic '打开记录集
/ @3 {) U$ b, }; K" }! B0 a
/ K( o, Z8 q" d8 S% `; J1 z, x! _- u6 d9 ~, }4 \7 |3 h
总页数 = rs_maxcut.PageCount '页大小rs_maxcut.PageSize
/ ^% L i1 Y6 d0 [% k6 {5 n行数 = rs_maxcut.RecordCount '行数 (排除标题)
+ s/ F5 k# k/ ^$ @( m列数 = rs_maxcut.Fields.Count - 1 '列数 (排除标题)2 q- ~' ?' I, Z" p- ^& y# i
' d( m; K4 g( P5 t If rs_maxcut.EOF = False Then
) W1 B: Z3 N) n i = 0
) S" T2 D* f. @0 ]- ? \* L Do While rs_maxcut.EOF = False
0 g. _! g9 P: ~5 S% G5 A m& ~( J i = i + 1% f* t% V: q0 k3 o# T0 ~
! b5 B+ N/ P1 s7 C5 L1 G
' If i = 0 Then str = rs_maxcut.Fields(0).Name & rs_maxcut.Fields(1).Name '读标( T: `9 g0 b! b1 j* q3 S7 T% s" O' b7 A
' M# D4 p+ h: V. k
'第一行 或者 第一列的内容 他们属于标题 所以不管是行列我们都是重第二行或列开始的
; s9 H7 D: _5 |" o# D, b, d: F% K* ~7 s- m9 z
8 O- p& N4 W' k S4 S If i = 1 Then aa = rs_maxcut.Fields(1).Value '除去标题后的,第1行第1列: S8 a- f5 F, b) f; B
If i = 2 Then bb = rs_maxcut.Fields(1).Value '除去标题后的,第1行第2列/ b/ Z# L% T# {1 s! U( R; ~
" [1 s# Z) T: D" Z& x
'读所有内容到数组
; U$ c! h8 Q+ g( X6 |% V For j = 1 To 列数. A) p* j+ b+ P$ C5 V* W
内容(i, j) = rs_maxcut.Fields(j).Value/ k7 V6 ?. U9 E& G; C
Next. `1 [0 c: J* w" V2 b3 A! f, A
8 ?0 K% f4 z; l8 O
rs_maxcut.MoveNext '下一行$ k4 Z$ R! M1 t3 @6 A3 X+ z4 }+ D
Loop L: p" s9 j3 W; ~( w5 F3 t
rs_maxcut.Close '关闭! S. Q8 x% J" N* h! I: Y
1 O1 y6 W8 U5 Z
4 J; a2 J5 M+ Q! S C4 f E
List1.Clear2 h. B# k8 X* r
For i = 1 To 行数& q: ^5 f) Y/ X$ ? R
For j = 1 To 列数
& N7 _8 `4 z' B If j = 1 Then4 g+ t1 W/ y9 U; U: T b
str = 内容(i, j)
& F n/ R5 R$ G Else
! ?2 a! h3 A9 v) w/ t) { str = str & " , " & 内容(i, j)4 h' s% ~# i: P7 H! M& k4 j
End If
% z* B2 Z) v1 Z' L4 M Next1 X2 U r8 b8 D. \
List1.AddItem str
% A' o' r+ B7 x( j5 N Next
7 D0 P1 F, v3 O% g5 l2 t9 d0 d2 O* v! i2 s5 H. F# ?" E
End If
9 _) ^( m* w2 s5 o) M3 @+ _
1 V2 P8 p( @! ^0 k# o- k6 j' O& i
End Sub
' ^( l5 c# R' ?, m( W3 ^. ~# A4 v; @+ k; F% k' c% S- p- J/ I" e
Public Sub writeDatabase() '保存数据(读数据和保存数据实际上是一样的操作方法)/ L( r" }* \6 c
On Error Resume Next% v4 X x) c- c6 N8 k6 J# U- I
Dim i As Long
) X" e3 F! W+ m; J$ P0 @ i = 0
4 j8 y( h' x5 T& x! u4 }8 n1 [
; {0 p7 a! v7 G& v. a( Gconn.Open cnn '连接数据库
% U' n$ h$ S; ^# a
! h7 m' X& u: L$ ?: b& [( R'sql = "select * from test"- d7 z! ?/ d x3 l5 j1 X
! C5 W: o# Q8 x) a2 e8 P
rs_maxcut.Open sql, conn, adOpenKeyset, adLockPessimistic '打开记录集) [, v- i" }9 G4 s6 X1 k9 |) r$ L6 [" F
2 ]0 p4 L9 r, R6 t) `+ @ If rs_maxcut.EOF = False Then
S! r! g* z: z1 Z8 P: u9 D" K, j5 y( S8 {
Do While rs_maxcut.EOF = False
0 z5 r: o7 t9 v$ r i = i + 1% P7 p6 u! N$ J0 L) y' r( P5 m2 U
8 `: w$ @2 ^2 l% a
'不要去修改 第一行 或者 第一列的内容 因为他们属于标题
: B6 o7 Q' w$ L5 {- M0 i
. o. b* K9 I: b: C: z, a, U8 x If i = 1 Then rs_maxcut.Fields(1).Value = Val(Text3.Text) '编辑第2行第1列
& O- _$ M* P: R1 R9 Y4 s2 \6 y/ | S7 P* x! \- k! Y
If i = 2 Then rs_maxcut.Fields(1).Value = Val(Text4.Text) '编辑第2行第2列& O0 P$ X# h1 ~0 R9 p% e
4 c1 a- O9 t7 w0 }( K* A& M rs_maxcut.MoveNext7 x: [" V( C" c8 E: j8 ?
1 h. @" u5 ?% c! E G Loop
! s$ A& H1 r4 @5 k8 f9 _6 l0 M& t1 p1 u5 e9 S* _" |
rs_maxcut.Update
0 t* S0 ]+ K! \1 E rs_maxcut.Close, \% i0 ~: e! F9 D5 T. @
1 J: ]( \! f% [
End If. I% J. |7 u6 }. V" f
/ }5 y3 i r' x# X9 @2 q+ _End Sub
0 E$ z0 e% I x$ F+ B6 S
( }# X& \3 p9 l [" N9 q0 i" M% s3 \* w E3 \
7 K. D# b2 T E& J: ?- O
' O( Y* Y: c+ d: ^ |
|