高分求解 关于vb从access中读取数据并处理的问题

我想用vb从access中读取数据然后对数据进行处理,在写回到另一个表中我想最好这样:从access的a表中,读取一行数据然后存储到一个数组之中,我在用我的函数进行处理处... 我想用vb从access中读取数据
然后对数据进行处理,在写回到另一个表中

我想最好这样:从access的a表中,读取一行数据
然后存储到一个数组之中,我在用我的函数进行处理
处理完了之后,直接写入另一个表中
我希望是对a表中所有数据进行处理,
所以想一条一条读,处理,然后直接写在另一个表中
因为我的数据量很大,大该500M吧,如果开个数组把所有数据放进去,
也不怎么可能,
所以还请达人指点啊,说出思路,稍微给点代码就行

在加分
展开
 我来答
zhhong2146
2008-10-26 · TA获得超过2595个赞
知道大有可为答主
回答量:1230
采纳率:94%
帮助的人:644万
展开全部
vb本来就内置微软的JET引擎,因此访问Access非常方便,不再需要ODBC
vb的JET引擎内建有两个可以访问Access的对象,一个叫ADO,一个叫DAO,不过现在ADO用得更多,所以你只需要去查查ADO的用法就可以了
用ADO时,先要建立一个连接,然后通过这个连接打开数据库中的表,ADO里面有一个RecordSet对象,它指向的是数据表的记录,可以用Open方法打开。在Open方法时可以使用SQL语句,也可以使用移动记录指标至第一条记录、前一条记录、后一条记录、最末条记录、特定记录号的记录等,还可以应用筛选条件。RecordSet有Fields(i)属性,可以分别访问一条记录中的各字段。这样你就可以通过逐条移动记录指针,逐个读取记录中的字段,把它们的值赋予数组元素,以达到你应用的目的。

ADO的对象模型为:
Connection 对象 代表与数据源的唯一会话。在使用客户端/服务器数据库系统的情况下,该对象可以等价于与服务器的实际网络连接。Connection 对象的某些集合、方法或属性可能不可用,这取决于提供者支持的功能。
Command 对象 用来定义针对数据源运行的具体命令,例如 SQL 查询。
Recordset 对象 表示从基本表或命令执行的结果所得到的整个记录集合。所有 Recordset 对象均由记录(行)和字段(列)组成。
Record 对象 表示来自 Recordset 或提供者的一行数据。该记录可以表示数据库记录或某些其他类型的对象(例如文件或目录),这取决于提供者。
Stream 对象 表示二进制或文本数据的数据流。例如,XML 文档可以加载到数据流中以便进行命令输入,也可以作为查询结果从某些提供者那里返回。Stream 对象可用于对包含这些数据流的字段或记录进行操作。
Parameter 对象 表示与基于参数化查询或存储过程的 Command 对象相关联的参数。
Field 对象 表示一列普通数据类型数据。每个 Field 对象对应于 Recordset 中的一列。
Property 对象 表示由提供者定义的 ADO 对象的特征。ADO 对象有两种类型的属性:内置属性和动态属性。内置属性是指那些已在 ADO 中实现并且任何新对象可以立即使用的属性。Property 对象是基本提供者所定义的动态属性的容器。
Error 对象 包含有关数据访问错误的详细信息,这些错误与涉及提供者的单个操作有关。
Fields 集合 包含 Recordset 或 Record 对象的所有 Field 对象。
Properties 集合 包含对象特定实例的所有 Property 对象。
Parameters 集合 包含 Command 对象的所有 Parameter 对象。
Errors 集合 包含为响应单个提供者相关失败而创建的所有 Error 对象。

使用ADO访问数据的过程一般是:

首先建立连接,通过下面的语句:
Dim connection as New ADODB.Connection
connection.Open ConnectionString, UserID, Password, OpenOptions

然后是打开记录集,你可以把记录集理解为数据库中的一个表,或者是对表查询的一个数据结果,通过下面的语句:
Dim recordset as ADODB.Recordset
Set recordset = New ADODB.Recordset
recordset.Open Source, ActiveConnection, CursorType, LockType, Options

下面是一个典型的打开数据表、导航及访问数据的过程:
Public Sub Main()
On Error GoTo ErrorHandler

' connection and recordset variables
Dim rstAuthors As ADODB.Recordset
Dim Cnxn As ADODB.Connection
Dim strCnxn As String
Dim strSQLAuthors As String
' record variables
Dim varBookmark As Variant
Dim strCommand As String
Dim lngMove As Long

' Open connection
Set Cnxn = New ADODB.Connection
strCnxn = "Provider='sqloledb';Data Source='MySqlServer';" & _
"Initial Catalog='Pubs';Integrated Security='SSPI';"
Cnxn.Open strCnxn

' Open recordset from Authors table
Set rstAuthors = New ADODB.Recordset
rstAuthors.CursorLocation = adUseClient
' Use client cursor to allow use of AbsolutePosition property
strSQLAuthors = "SELECT au_id, au_fname, au_lname, city, state FROM Authors ORDER BY au_lname"
rstAuthors.Open strSQLAuthors, strCnxn, adOpenStatic, adLockOptimistic, adCmdText

rstAuthors.MoveFirst

Do
' Display information about current record and
' ask how many records to move

strCommand = InputBox( _
"Record " & rstAuthors.AbsolutePosition & _
" of " & rstAuthors.RecordCount & vbCr & _
"Author: " & rstAuthors!au_fname & _
" " & rstAuthors!au_lname & vbCr & _
"Location: " & rstAuthors!city & _
", " & rstAuthors!State & vbCr & vbCr & _
"Enter number of records to Move " & _
"(positive or negative).")

' this is for exiting the loop
'lngMove = CLng(strCommand)

lngMove = CLng(Val(strCommand))
If lngMove = 0 Then
MsgBox "You either entered a non-number or canceled the input box. Exit the application."
Exit Do
End If

' Store bookmark in case the Move goes too far
' forward or backward
varBookmark = rstAuthors.Bookmark

' Move method requires parameter of data type Long
rstAuthors.Move lngMove

' Trap for BOF or EOF
If rstAuthors.BOF Then
MsgBox "Too far backward! Returning to current record."
rstAuthors.Bookmark = varBookmark
End If
If rstAuthors.EOF Then
MsgBox "Too far forward! Returning to current record."
rstAuthors.Bookmark = varBookmark
End If
Loop

' clean up
rstAuthors.Close
Cnxn.Close
Set rstAuthors = Nothing
Set Cnxn = Nothing
Exit Sub

这些知识在百度上也只能讲个皮毛,你最好还是要找本书,一边看一边编程。
百度网友80cd321
2008-10-25 · TA获得超过4362个赞
知道小有建树答主
回答量:1069
采纳率:0%
帮助的人:1226万
展开全部
我觉得你的想法不对.
因为如果你从a表中读取的是满足某条件的一系列记录,那用数组是不太方便的.

最好是分别用两个数据集,一个打开a表数据,一个打开b表,然后把a表数据处理后放入b表.例如:
Dim rs_addbook As New ADODB.Recordset
Dim rs_addbook1 As New ADODB.Recordset
Dim conn As New ADODB.Connection
Dim sql As String
Dim sql1 As String
conn.Open "provider=Microsoft.Jet.OLEDB.4.0; data source=" & App.Path & "\定额.mdb"
sql = "select * from 材料定额 where 零件号='" & Combo1.Text & "'"
rs_addbook.Open sql, conn, adOpenKeyset, adLockPessimistic
If rs_addbook.EOF Then
MsgBox "无此零件!", vbOKOnly + vbExclamation, ""
Combo1.SetFocus
Text7.Text = ""
rs_addbook.Close
Exit Sub
Else
sql1 = "select * from 本月定额 where 零件号='" & Combo1.Text & "'"
rs_addbook1.Open sql1, conn, adOpenKeyset, adLockPessimistic
If rs_addbook1.EOF Then
rs_addbook1.AddNew
rs_addbook1.Fields(0) = rs_addbook.Fields(0)
rs_addbook1.Fields(1) = rs_addbook.Fields(1)
..........
MsgBox "添加本月定额信息成功!", vbOKOnly, ""
addbook1.Update

rs_addbook1.Close
Else
MsgBox "零件号重复!", vbOKOnly + vbExclamation, ""
Combo1.SetFocus
Text7.Text = ""
Exit Sub
End If
End If
End Sub

这是一个不完整的.用把一个表中满足条件的放入到另外一个表中.如果你要处理,你在 rs_addbook1.Fields(0) = rs_addbook.Fields(0)对rs_addbook.Fields(0)进行运算嘛.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wys_sans
2008-10-25 · TA获得超过4008个赞
知道大有可为答主
回答量:2474
采纳率:0%
帮助的人:1074万
展开全部
dim cn as adodb.connection
dim rs as adodb.recordset
sub getdata()
dim i as integer
dim tsql as string
dim d(a表字段数)---------------这个要根据表中的字段来定义,这里暂全部为字符形
set cn=new adodb.connection
cn.open "Driver={Microsoft Access Driver (*.mdb);DBQ=数据库名;Uid=Admin;Pwd=密码}"
tsql="你要的查询语句"
set rs=new adodb.recordset
rs.open tsql,cn,1,3
if rs.recordcount>0 then
rs.movefirst
for i=1 to rs.recordcount
d(i)=rs.fields(i)-----------将记录数据写到数组
rs.movenext
'数据处理过程
next i
else
msgbox "没有找到相关记录",vbOkOnly,"提示"
end if
'回写数据
cn.execute "回写数据语句"
set rs=nothing
set cn=nothing
end sub
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wynness
2008-10-26 · TA获得超过1676个赞
知道小有建树答主
回答量:2245
采纳率:50%
帮助的人:1219万
展开全部
整张表都会读,读一行还不会啊?
读索引号就行了,同时判断是否为表的最大count值
sql="select * from 表 where id='" & index & "'"

加分
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式