Test.txt文件 定长记录
0001abcdefg sdsdsafsdfsfsfdsdfsf u
0002hijk rrttfggf
------------------------------------------------
Schema.ini 配置文件
[test.txt]
ColNameHeader=False
Format=FixedLength
FixedFormat= RaggedEdge
MaxScanRows=0
CharacterSet=OEM
Col1="id" char Width 4
Col2="name" char Width 10
Col3="addr" char Width 30
-----------------------------------------------
accdb.mdb中表tab1
id 文本 长度4
name 文本 长度10
addr 文本 长度30
phone 文本 长度20
-------------------------------------------------
请教 如何写 用test.txt中的记录批量更新tb1中的字段addr 的sql语句?(条件:tb1.id=[test.txt].id)
谢谢!
注:for next逐个记录update的方法就不要了
0001abcdefg sdsdsafsdfsfsfdsdfsf u
0002hijk rrttfggf
------------------------------------------------
Schema.ini 配置文件
[test.txt]
ColNameHeader=False
Format=FixedLength
FixedFormat= RaggedEdge
MaxScanRows=0
CharacterSet=OEM
Col1="id" char Width 4
Col2="name" char Width 10
Col3="addr" char Width 30
-----------------------------------------------
accdb.mdb中表tab1
id 文本 长度4
name 文本 长度10
addr 文本 长度30
phone 文本 长度20
-------------------------------------------------
请教 如何写 用test.txt中的记录批量更新tb1中的字段addr 的sql语句?(条件:tb1.id=[test.txt].id)
谢谢!
注:for next逐个记录update的方法就不要了
解决方案 »
- 网页代码截取问题?
- 一个非常烦人的问题。例如想用.Value=true让程序选中选项钮,却在暗中自动激发了它的click事件。类似的问题,在一个有5万行以上的代码中如何去发现它呢?难道要经常一句一句的去调试跟踪?有专门软
- 我想用VB2005做个报时程序 请高手们帮忙
- 如何注册热键?
- 请教 当按下抓屏键时抓取活动画面,同时调出打印机画面,然后打印,该如何实现?多谢了
- 怎么在定位一条记录后,再做移动记录呀?
- 我的这段用异或加密解密字符串的方法怎么不行呢?
- 在VB中如何输出双引号
- 关于Winsock接受数据的问题
- 本着为大家服务的宗旨,我决定做一些为大家服务的实事,大家觉的怎么样???????!!!!!!!!!!!!!!!!!!!!!!
- 如何转换日期的格式
- VB如何从iFIX数据库中读取数据
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Set cn = New ADODB.Connection
cn.Open "Driver={Microsoft Access Driver (*.mdb)};Dbq=C:\temp\db1.mdb;Uid=Admin;Pwd=;"
cn.Execute "INSERT INTO tab1(id,name,addr) " & _
"SELECT id,name,addr " & _
"FROM [Text;FMT=Fixed;HDR=No;DATABASE=C:\temp\;].[test#txt]"
Set rs = cn.Execute("SELECT * FROM tab1")
Debug.Print rs.GetString()
End Sub
Dim db As Object Set db = CreateObject("ADODB.Connection")
'引擎*********************
'用txt这个方式差太远
' db.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\;Extended Properties=""" & "text;HDR=no;""" '用access这个方式还靠边
db.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\accdb.mdb;Persist Security Info=False"
'借用老虎这个也一样
' db.Open "Driver={Microsoft Access Driver (*.mdb)};Dbq=" & App.Path & "\accdb.mdb;Uid=Admin;Pwd=;"
'**************************
'操作$$$$$$$$$$$$$$$$$$$$$$
'插入没有问题
' db.Execute "Insert Into tab1(id,name,addr,phone) select * from [text;database=" & App.Path & "\].[test.txt]"
'这种方式修改,提示错误 "该isam不支持在链接表中更新数据"
db.Execute "update tab1 inner join [text;database=" & App.Path & "\].[test.txt] as tab2 on tab1.id=tab2.id set tab1.addr=tab2.addr "
'这种方式修改,提示错误 "操作必须使用一个可更新的查询",试验access不支持这种方式,oracle可以
' db.Execute "update tab1 set addr=(select addr from [text;database=" & App.Path & "\].[test.txt] as tab2 where tab2.id=tab1.id)" 'access两个数据库操作没有问题
' db.Execute "update tab1 inner join [;database=" & App.Path & "\accdb2.mdb].[tab3] as tab2 on tab1.id=tab2.id set tab1.addr=tab2.addr "
'$$$$$$$$$$$$$$$$$$$$$$$$$$$
db.Close
Set db = NothingEnd Sub
貌似不是引擎的问题,我在access里试验也一样的问题在access里查询txt可以,插入可以,联表修改就不可以
http://support.microsoft.com/kb/824159/zh-cn
我之所以想直接update,是不想在vb代码中涉及表字段更新这部分
(这部分我准备都保存在sql脚本里 以便于数据升级后更新过程修改维护)
如果把txt内容into到mdb,那么还不如直接rs.open "selelct * from [text;database=c:\].[test#txt]"
然后逐条更新mdb字段了
各位老大还是集思广意 想想怎么直接update吧
谢谢!
'这种方式修改,提示错误 "操作必须使用一个可更新的查询"
========================================================================
难道这就是access/txt update的宿命?
'这种方式修改,提示错误 "该isam不支持在链接表中更新数据"
db.Execute "update tab1 inner join [text;database=" & App.Path & "\].[test.txt] as tab2 on tab1.id=tab2.id set tab1.addr=tab2.addr "
——————————————————
我看到这个错误就泄气了
*************************************************
看老虎这个链接
曲线救国
****************************************
access两个数据库联表修改是允许的
'access两个数据库操作没有问题
' db.Execute "update tab1 inner join [;database=" & App.Path & "\accdb2.mdb].[tab3] as tab2 on tab1.id=tab2.id set tab1.addr=tab2.addr "***************************************看7楼
1。另外建access文件,根据ini在这里创建表2。txt文件数据导入新建的access的表里3。用新建的access的表和原access中的表联表修改
在vb里写一段模仿sqlplus的代码 逐语句执行了
如果哪位以后有个更好的办法 请务必发帖公告一下
谢谢各位老师了 结贴了
你没有理解我的意思,
不是让你逐语句执行1。另外建access文件,根据ini在这里创建表
新建access比如为accdb2.mdb
根据Schema.ini的这些信息
Col1="id" char Width 4
Col2="name" char Width 10
Col3="addr" char Width 30
建表tab22。txt文件数据导入新建的access的表里
db.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\accdb2.mdb;Persist Security Info=False"
db.Execute "Insert Into tab2(id,name,addr) select * from [text;database=" & App.Path & "\].[test.txt]"
3。用新建的access的表和原access中的表联表修改
db.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\accdb.mdb;Persist Security Info=False"
db.Execute "update tab1 inner join [;database=" & App.Path & "\accdb2.mdb].[tab2] as tab2 on tab1.id=tab2.id set tab1.addr=tab2.addr "
谢谢 我的做法也是这样
我所说的"逐语句" 也就是指:导入access;联表update