从SQL Server服务器下载大量数据时出现的问题

pku_zlb 2002-06-08 10:26:44
我最近用vb+Sql server做一个医疗报销系统,该系统有中心服务器和远端报销系统两级。远端报销系统安装在各医院,但需要从中心服务器下载大量药品信息。我用ADO的Command对象向中心服务器的sql server服务器传送查询命令,欲获取所有药品记录,存放在本地Access数据库中。药品记录存放在药品基本表中,有两万多条药品记录。每次执行该操作时,下载到将近400条记录时就发生数据库操作错误,下载400条以下记录时能够成功,不知道这是为什么,是不是ADO查询时在时间上有什么限制?是不是要设置什么属性?希望高手们指点!我愿给100分!
...全文
68 46 打赏 收藏 转发到动态 举报
写回复
用AI写文章
46 条回复
切换为时间正序
请发表友善的回复…
发表回复
minileo 2002-06-19
  • 打赏
  • 举报
回复
可怜微软的sqlserver开发者,一片苦心弄出个dts~~~~~
zuyin 2002-06-19
  • 打赏
  • 举报
回复
补充一下
函数中的sql参数定义你的表查询
在你的系统里他的值应该是
select * from 药品记录 order by 药品编号
zuyin 2002-06-19
  • 打赏
  • 举报
回复
消息收到.你的系统架构应该是这样的
1.server端,vb + sql server
2.client端,vb + sql server + ado2.6 + access sp
你的问题是"药品记录"的传输问题
每年一次就够了,没必要在client直接数据库连接(sqlserver的ip实际中一般不固定,拨号的方法并不好)
应该是用文件传输,server端程序加一个导出药品记录的功能,将sql里的数据(药品记录表)转到access文件里
生成的access文件可以通过软盘或mail发到各报销点,客户端写一段程序用于 access文件药品记录表的导入
1: 在你的系统里,server端有两种情况
1)
如果医院的系统维护人员懂一点sql,你可以在server端定义一个dts包
(是微软的dts简单的说就是将一个数据源的数据搬到另一个数据源
他有图形化的界面)让他每年执行一下这个包,
2) 不幸的是医院的系统维护人员一般是一窍不通,你要在server端写一段程序用于导出

2. (由于客户端没有sqlserver所以不能用dts)
只能写程序用于access文件药品记录表的导入

下面的这个函数用于从搬移一个表(我的一个系统中的一段)

Public Function SaveOneTable(ByVal sql As String, ByRef ProgressBar1 As ProgressBar) As Integer
On Error GoTo AAAA
Dim TEMPS As String
Dim rs1 As ADODB.Recordset
Dim rs2 As ADODB.Recordset
Set rs1 = New ADODB.Recordset
Set rs2 = New ADODB.Recordset

rs1.Open sql, dbsqlserver, adOpenStatic, adLockOptimistic
rs2.Open sql, dbaccess, adOpenStatic, adLockOptimistic

ProgressBar1.Min = 0
ProgressBar1.Max = rs1.RecordCount + 1
ProgressBar1.value = 0

While (Not rs1.EOF)
TEMPS = rs1(0).value 'TEMPS纪录当前的建值
rs2.AddNew
For i = 0 To rs1.Fields.Count - 1
rs2.Fields(i).value = rs1.Fields(i).value
Next i
ProgressBar1.value = ProgressBar1.value + 1 '控制导入导出是显示进度
DoEvents '刷新进度条
rs2.Update
rs1.MoveNext
Wend
SaveOneTable = rs2.RecordCount
Set rs1 = Nothing
Set rs2 = Nothing
Exit Function
AAAA: '出错一般是由于sqlserver和access表结构不匹配
TEMPS = Mid(TEMPS, 1, 9)
MsgBox "企业代码:" & TEMPS, vbOKOnly, Err.Description

' Debug.Print Err.Number, Err.Description
Set rs1 = Nothing
Set rs2 = Nothing
End Function
zuyin 2002-06-18
  • 打赏
  • 举报
回复
在server 端用dts或自己写段程序导出数据(5万条数据压缩后最多1m)
client端写段程序导入数据
不会超过50行代码
zuyin 2002-06-18
  • 打赏
  • 举报
回复
正确的方法是dts
wgzhou747217 2002-06-18
  • 打赏
  • 举报
回复
不要用select into
先select再into 分两步走
yuhaii 2002-06-17
  • 打赏
  • 举报
回复
老大,什么做法呀, 用"同步"的方法不好吗?
这样比较的快,对错误验证也好处理!
shaosx 2002-06-17
  • 打赏
  • 举报
回复
EDI 的思路,

使用FTP, Client 自己下栽UpdatePack, 自己管理升级。
数据包使用 zip 压过的 text.
jspxnet 2002-06-17
  • 打赏
  • 举报
回复
保存为xml文件,下载。在放到access
lingxiao627 2002-06-17
  • 打赏
  • 举报
回复
是不是可以这样,使用lotus notes/domino,中心服务器用domino,利用domino的复制将数据库复制到客户机上(通过notes)并保持一致,用vb来读出notes数据库的信息并将它放到你的access数据库中,这样的传输是非常安全的,而且你也可以避免使用到远程的下载,因为这太不稳定了
daehappy 2002-06-16
  • 打赏
  • 举报
回复
up!关注!
jmsofts 2002-06-16
  • 打赏
  • 举报
回复
gz
52694 2002-06-13
  • 打赏
  • 举报
回复
我在UPDATE时也有这样的问题
hys128 2002-06-13
  • 打赏
  • 举报
回复
介绍一下我的经验
1、如果可以不计连接时间,就用sql 的复制,不要access
2、否则就用ado打开两个结果集,一行行的复制。
微软推荐用dts,没用过。
52694 2002-06-12
  • 打赏
  • 举报
回复
gz
anneyang 2002-06-11
  • 打赏
  • 举报
回复
to Shark_S() :
sql server和access之间可以用复制服务吗?
iwad 2002-06-11
  • 打赏
  • 举报
回复
100分相送!请关注:
http://www.freevbcode.com/ShowCode.Asp?ID=4349
calligrapher 2002-06-11
  • 打赏
  • 举报
回复
我下载10000条都没发生过错误,把两件事分开
先写到记录集里,再写到access就行了
stwx 2002-06-10
  • 打赏
  • 举报
回复
为何一定要用 select * into ,可以开个两个RS进行转换
pku_zlb 2002-06-09
  • 打赏
  • 举报
回复
从你给出的例子看得出,你是在同一台机器测试的,否则Data Source=localhost怎么解释?
加载更多回复(26)

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧