VB读取超长二进制文件并写入access数据库

Ray3039 2009-04-08 09:48:15
现在要用VB读取500k的文件写入access数据库,文件中前二百字节存放设备版本号、设备编号等基本信息,从第二百位开始存放2500条记录,每条记录包含18位操作员编号、6位时间信息,1位转速信息,该怎么把此文件拆成相关字段并存入数据库?
二进制文件片段代码如下:
56 45 53 33 2E 30 00 00 00 00 00 00 00 00 00 00
37 38 36 33 32 31 31 30 30 39 33 34 38 32 31 30
...... ......
...... ......
二百位以后:
33 37 30 38 30 32 32 30 30 39 30 32 31 38 36 35
39 30 09 02 22 12 30 00 83 33 37 30 38 30 32 32
30 30 39 30 32 31 38 36 35 39 30 09 02 22 12 31
00 89 ...... ......
...... ......
...全文
498 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
yu3350360 2009-04-15
  • 打赏
  • 举报
回复
学习
xrongzhen 2009-04-15
  • 打赏
  • 举报
回复
还是看看SQL语句是否错误,设置没问题的话,肯定就是有些地方失误了

可以把代码都贴出来,让大家帮你找找
Ray3039 2009-04-14
  • 打赏
  • 举报
回复
我的已经是这样了!
可就是不行!
真讨厌vb!!!
Tiger_Zhao 2009-04-13
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 Ray3039 的回复:]
>引用 18 楼 Tiger_Zhao 的回复:
>在 Access 的选项的“高级”中。

该修改那一项啊?
[/Quote]
先不要有任何地方使用 mdb(包括 VB-IDE),用 Access 打开 mdb:
菜单“工具\选项”,页面“高级”,选项“默认打开模式”选“共享”。

以上为 Office Access 2003,其它版本可能位置不同,不过选项“默认打开模式”总该有的。
of123 2009-04-10
  • 打赏
  • 举报
回复

用不着那么多 Adodc:

Adodc1.Recordset.ActiveConnection.Execute "Insert Into 设备信息(版本, 设备编号) Values('" & version & "','" & machine_no & "')"

Adodc1.Recordset.ActiveConnection.Execute "Insert Into 设备记录(设备编号, 操作员编号, 转速) Values('" & machine_no & "','" & czy_no & "'," & speed ")"
Ray3039 2009-04-10
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 Tiger_Zhao 的回复:]
那就是 Adodc2 没有正确设置。可能表名错误或 SQL 错误。
[/Quote]
我Adodc1和Adodc2的设置都一样,屏蔽掉Adodc1后Adodc2也是那种错误,实在找不出为什么!
大家快帮我想想办法吧!
of123 2009-04-10
  • 打赏
  • 举报
回复

我Adodc1和Adodc2的设置都一样

==========================

连接到不同的表,怎么会设置都一样?
Ray3039 2009-04-10
  • 打赏
  • 举报
回复
我把程序关了又重新开了写了另一个程序也不行,只对第一次写的起作用!
of123 2009-04-10
  • 打赏
  • 举报
回复
楼主不要急着改,先证实一下。

你把 Adodc1 有关的语句注掉,看是否就可以用 Adodc2 了。如果是,则有排他的可能。否则,查其他原因。
Ray3039 2009-04-10
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 Tiger_Zhao 的回复:]
在 Access 的选项的“高级”中。
[/Quote]

该修改那一项啊?
Tiger_Zhao 2009-04-10
  • 打赏
  • 举报
回复
在 Access 的选项的“高级”中。
Ray3039 2009-04-10
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 Tiger_Zhao 的回复:]
也许你用了排他的方式连接数据库,所以只有一个控件能操作数据库。
[/Quote]
我感觉一定是这个原因,那么在哪里能修改一下呢?
Tiger_Zhao 2009-04-10
  • 打赏
  • 举报
回复
也许你用了排他的方式连接数据库,所以只有一个控件能操作数据库。
dlschan 2009-04-08
  • 打赏
  • 举报
回复
不懂,帮顶
lili830209 2009-04-08
  • 打赏
  • 举报
回复
不懂,帮顶
Ray3039 2009-04-08
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 Tiger_Zhao 的回复:]
两个表:
设备信息(设备编号,设备版本号,...)
设备记录(设备编号,操作员编号,时间,转速信息)

前二百字节取得的数据写入[设备信息]表(1条)
从第二百字节开始循环,取得的数据+设备编号写入[设备记录]表(2500条)
[/Quote]
我用Adodc往表里添加数据,操作如下:
Adodc1.Recordset.AddNew 'Adodc1对应数据库中基本信息表
Adodc1.Recordset("版本").Value = version
Adodc1.Recordset("设备编号").Value = machine_no
Adodc1.Recordset.Update

Adodc2.Recordset.AddNew 'Adodc2对应数据库中运转情况表
Adodc2.Recordset("操作员编号").Value = czy_no
Adodc2.Recordset("转速").value = speed
Adodc2.Recordset.Update

但程序一运行就出现“对象变量或with块变量未设置”,不知道为什么。

另外我定义的全局变量在此处赋值后,在别的窗体中取不出值,如把version值赋给form2窗体的text1,运行后text内容为空!
Tiger_Zhao 2009-04-08
  • 打赏
  • 举报
回复
两个表:
设备信息(设备编号,设备版本号,...)
设备记录(设备编号,操作员编号,时间,转速信息)

前二百字节取得的数据写入[设备信息]表(1条)
从第二百字节开始循环,取得的数据+设备编号写入[设备记录]表(2500条)
lyserver 2009-04-08
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 Ray3039 的回复:]
引用 4 楼 of123 的回复:
'以二进制方式打开文件
Open strPathName For Binary As #1

'如果操作员号是 18 字节
Redim bytOpID(17)
Get #1, 200, bytOpID

余类推。

怎么往数据库中存啊?
这一台设备一次就存储了2500条关于运转情况的记录,我把这些数据存到数据库中同一字段下?还是另建一张表?
[/Quote]

最好写入同一个表的不同字段,便于理解和维护。
Ray3039 2009-04-08
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 of123 的回复:]
'以二进制方式打开文件
Open strPathName For Binary As #1

'如果操作员号是 18 字节
Redim bytOpID(17)
Get #1, 200, bytOpID

余类推。
[/Quote]
怎么往数据库中存啊?
这一台设备一次就存储了2500条关于运转情况的记录,我把这些数据存到数据库中同一字段下?还是另建一张表?
of123 2009-04-08
  • 打赏
  • 举报
回复
'以二进制方式打开文件
Open strPathName For Binary As #1

'如果操作员号是 18 字节
Redim bytOpID(17)
Get #1, 200, bytOpID

余类推。
加载更多回复(6)

7,765

社区成员

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

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