ACCESS导出成文本格式!小弟是新手,请各位大虾指教!谢谢了!急!

milerzhang 2006-10-11 10:11:33
例如:
———————————
|aaa |100.2 |
|bb |1.23 |
|cccc |1234 |
_____________________
导出成:
"aaa ",00001002
"bb ",00000123
"cccc ",00001234
字符右补空格;数字要把小数点去掉,左补0。字符和数字都要定长!
急!谢谢!
...全文
427 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
OracleRoob 2006-10-12
  • 打赏
  • 举报
回复
这条sql语句不能用:rs1.Open temp, CurrentProject.Connection, adOpenKeyset, adLockOptimistic
只能用:DoCmd.Runsql temp
那要怎么改才可以用rs1.Open呀

--------------------------------------------

不能用记录集打开。

rs1.Open用于有返回结果集的SQL语句。
OracleRoob 2006-10-12
  • 打赏
  • 举报
回复
1.在导出到文本时,如何把字段名去掉。
------------------------------------------
HDR=NO
表示HeaderRow不显示。

2.如果在同一名录中有相同的文本文件,程序会出错!这个问题怎么解决?可以覆盖原来的吗?
------------------------------------------
用fso判断文件是否已存在,如果存在,先删除。

如:

'检查一个指定路径、指定文件名是否存在。
'若路径不存在则创建之;若该路径存在,则进一步判断该路径下指定文件是否存在,若存在则删除之
Public Sub Initializepath(Path As String, Filename As String)
Dim fs As Variant
If Dir(Path, vbDirectory) = "" Then
Set fs = CreateObject("scripting.filesystemobject")
fs.createfolder (Path)
ElseIf Dir(Path & "\" & Filename) <> "" Then
Kill Path & "\" & Filename
End If
End Sub
wwwwb 2006-10-12
  • 打赏
  • 举报
回复
1.在导出到文本时,如何把字段名去掉。
在我的SQL语句中,HDR=NO即可;
2、如果在同一名录中有相同的文本文件,程序会出错!这个问题怎么解决?可以覆盖原来的吗?
在导出前判断是否存在文件,如已存在,则删除;
3、那要怎么改才可以用rs1.Open呀?
不行,OPEN用于有返回结果集的SQL语句。
changechange 2006-10-12
  • 打赏
  • 举报
回复
如何将ACCESS MDB 中的表导出成文本格式


作者:cg1 摘自:access911.net 编辑:cg1 更新日期:2006-10-12 浏览人次:3

专题地址:
http://access911.net/?kbid;72FABE1E10DCE9F3



简述:
如何将ACCESS MDB 中的表导出成文本格式《VBA》



阅读前需掌握:


难度等级:
40















问题:



如何将ACCESS MDB 中的表导出成文本格式《VBA》

例如:
---------------------
|aaa |100.2 |
|bb |1.23 |
|cccc |1234 |
---------------------

导出成:

"aaa ",00001002
"bb ",00000123
"cccc ",00001234

字符右补空格;数字要把小数点去掉,左补0。字符和数字都要定长!






回答:




SELECT [newfld1], [newfld2] INTO [text;hdr=no;database=c:\temp].临时.txt
FROM
(SELECT left([field1] & " " , 10) as newfld1,format([field2]*100,"0000000") as newfld2 FROM [tablename])


因转换后都为字符型,所以字段2数字部分也有双引号,如果一定要去掉也可以用OPEN#、PRINT#语句或者用 FSO 将内容写入TXT文件。

OPEN# PRINT# 语句示例如下:
Open "TESTFILE" For Output As #1 ' 打开输出文件。
Print #1, "This is a test" ' 将文本数据写入文件。
Print #1, ' 将空白行写入文件。
Print #1, "Zone 1"; Tab ; "Zone 2" ' 数据写入两个区(print zones)。
Print #1, "Hello" ; " " ; "World" ' 以空格隔开两个字符串。
Print #1, Spc(5) ; "5 leading spaces " ' 在字符串之前写入五个空格。
Print #1, Tab(10) ; "Hello" ' 将数据写在第十列。

' 赋值 Boolean、Date、Null 及 Error 等。
Dim MyBool, MyDate, MyNull, MyError
MyBool = False : MyDate = #February 12, 1969# : MyNull = Null
MyError = CVErr(32767)
' True、False、Null 及 Error 会根据系统的地区设置自动转换格式。
' 日期将以标准的短式日期的格式显示。
Print #1, MyBool ; " is a Boolean value"
Print #1, MyDate ; " is a date"
Print #1, MyNull ; " is a null value"
Print #1, MyError ; " is an error value"
Close #1 ' 关闭文件。




示例文件下载:http://access911.net/down/eg/ExportToText_withNoFieldCaptionAndFixWidth.rar (14KB)







补充:



1、在导出到文本时,如何把字段名去掉。
SQL语句中,HDR=NO就能实现去掉字段名

2、如果在同一名录中有相同的文本文件,程序会出错!这个问题怎么解决?可以覆盖原来的吗?
在导出前用以下函数解决
Function CheckText(ByVal strFile)
On Error Resume Next
'Dim strFile As String
'strFile = "c:\temp\临时.txt"

If Dir(strFile) <> "" Then
Debug.Print "已经存在该文件现在删除"
Kill strFile
End If
End Function

3、那要怎么改才可以用rs1.Open呀?
rs可以用于执行操作查询,但是执行完毕立即关闭,不返回结果集合的。
注意,rs 执行以后是马上关闭的,你无法将上述查询的结果集放在rs中循环读取,如果要读取就再次从文本内加载

全部代码如下:

Function CheckText(ByVal strFile)
On Error Resume Next
'Dim strFile As String
'strFile = "c:\temp\临时.txt"

If Dir(strFile) <> "" Then
Debug.Print "已经存在该文件现在删除"
Kill strFile
End If
End Function


Function DoExportToText()
Dim strSQL As String
Dim strFile As String
strFile = "c:\temp\临时.txt"

CheckText strFile
strSQL = "SELECT [newfld1], [newfld2] INTO [text;hdr=no;database=c:\temp].临时.txt " & _
"FROM (SELECT left([field1] & "" "" , 10) as newfld1,format([field2]*100,""0000000"") as newfld2 FROM [tablename]) as aaa"

Dim rs As New ADODB.Recordset
'注意,rs 执行以后是马上关闭的,你无法将上述查询的结果集放在rs中循环读取,如果要读取就再次从文本内加载
rs.Open strSQL, CurrentProject.Connection, 1, 1

'比较好的方法是用:
'CurrentProject.Connection.Execute strSQL
End Function












access911.net 原创文章,作者本人对文章保留一切权利。
如需转载必须征得作者同意并注明本站链接




wwwwb 2006-10-11
  • 打赏
  • 举报
回复
SELECT dd1, dd2 INTO [text;hdr=no;database=d:\temp].123.txt
FROM (SELECT EE(A1,TRIM(STR(A2))) AS GD, MID(GD,1,8) as dd1, MID(GD,10,8) as dd2, *
FROM 表4)
模块:
Function EE(RR As String, RR1 As String)
RRA = Left(RR + " ", 8)
RR1A = Right("00000000" + Replace(RR1, ".", ""), 8)
EE = RRA & "," & RR1A
End Function

因转换后都为字符型,故都有双引号,也可以用OPEN、PRINT等将内容写入TXT文件。
wwwwb 2006-10-11
  • 打赏
  • 举报
回复
SQ:
SELECT * ,EE(A1,TRIM(STR(A2))) AS GD,MID(GD,1,8),MID(GD,10,8) FROM 表4;
模块:
Function EE(RR As String, RR1 As String)
RRA = Left(RR + " ", 8)
RR1A = Right("00000000" + Replace(RR1, ".", ""), 8)
EE = RRA & "," & RR1A
End Function
milerzhang 2006-10-11
  • 打赏
  • 举报
回复
to wwwwb()
这条sql语句不能用:rs1.Open temp, CurrentProject.Connection, adOpenKeyset, adLockOptimistic
只能用:DoCmd.Runsql temp
那要怎么改才可以用rs1.Open呀?
milerzhang 2006-10-11
  • 打赏
  • 举报
回复
谢谢各位大侠!
可还有问题:
1.在导出到文本时,如何把字段名去掉。
2.如果在同一名录中有相同的文本文件,程序会出错!这个问题怎么解决?可以覆盖原来的吗?
OracleRoob 2006-10-11
  • 打赏
  • 举报
回复
--不用写模块函数,也可以直接用SQL语句:


select
left(字段1 + " ", 8) as f1,
right("00000000" + replace(字段2, ".", ""), 8) as f2
into [text;database=d:\].test.txt
from 表名

7,712

社区成员

发帖
与我相关
我的任务
社区描述
Microsoft Office Access是由微软发布的关系数据库管理系统。它结合了 MicrosoftJet Database Engine 和 图形用户界面两项特点。
社区管理员
  • Access
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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