我有一个Access数据库,我想导出到一个文本文件。我在Access中定义了一个模式,并且当前使用宏来导出它。我想使用VBScript始终将查询结果附加到同一文件。如果无法使用我定义的架构,我只需要用"
逗号分隔和括起字段,文本文件必须是UTF-8
格式。
我找到了以下代码段,但我不确定如何根据我的需要采用它。
db = "C:\Docs\LTD.mdb"
TextExportFile = "C:\Docs\Exp.txt"
Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")
cn.Open _
"Provider = Microsoft.Jet.OLEDB.4.0; " & _
"Data Source =" & db
strSQL = "SELECT * FROM tblMembers"
rs.Open strSQL, cn, 3, 3
Set fs = CreateObject("Scripting.FileSystemObject")
Set f = fs.CreateTextFile(TextExportFile, True)
a = rs.GetString
f.WriteLine a
f.Close
答案 0 :(得分:1)
也许最简单的方法是使用[text ...]。filename方法: -
Dim db: db = "C:\Docs\LTD.mdb"
Dim exportDir: exportDir = "C:\Docs\" '" SO prettify does not do VB well
Dim exportFile: exportFile = "Exp.txt"
Dim cn: Set cn = CreateObject("ADODB.Connection")
cn.Open _
"Provider = Microsoft.Jet.OLEDB.4.0; " & _
"Data Source =" & db
cn.Execute "SELECT * INTO [text;HDR=Yes;Database=" & exportDir & _
";CharacterSet=65001]." & exportFile & " FROM tblMembers"
FileSystemObject不会帮助你,因为它没有UTF-8。通过指定CharacterSet = 65001(65001是UTF-8代码页)来实现UTF-8。请注意,生成的文件不包含UTF-8 BOM,但创建的schema.ini文件将注意到CharacterSet为UTF-8。
请注意,这不符合您的追加要求,您确定无论如何都有意义吗,您最终会不会有很多重复项?
修改强>:
以上调整为包括UTF-8要求。您可以简单地附加类似日期的内容来为表创建多个快照文件。
答案 1 :(得分:1)
方向(2) 这是从Access数据库运行的一些VBA:
Sub InsertRecs()
Set db = CurrentDb
'DSN=Suitable system DSN for MySQL
'Then, depending on your set up, you can incude:
'Database=DBName;
'Trusted_Connection=Yes;
'NameOfMySQLTable
strSQL = "INSERT INTO [ODBC;DSN=baywotch;].tblAuction Select * FROM tblAuction;"
db.Execute strSQL, dbFailOnError
End Sub
这是一回事,但在VBScript中,使用DAO:
Dim objEngine
Dim objWS
Dim objDB
Dim db: db = "C:\Docs\baywotch.db5"
Set objEngine = wscript.CreateObject("DAO.DBEngine.36")
Set objDB = objEngine.OpenDatabase(db)
objDB.Execute "INSERT INTO [ODBC;DSN=baywotch].[tblAuction] SELECT * FROM tblAuction;"
方向(1)
我建议采用完全不同的方向,那就是让MySQL完成工作:
我针对您的数据库对此进行了测试,它似乎导入正确,只需几分钟,并将生成各种可重用的脚本等等。
如果您在设置MySQL时遇到问题,您可能希望阅读: 9.1.4. Connection Character Sets and Collations
DiRECTION(0)
REWRITE(2)
'========================================================================'
'
' FROM: AnthonyWJones, see post '
'
'========================================================================'
Dim db: db = "C:\Docs\baywotch.db5"
Dim exportDir: exportDir = "C:\Docs\" '" SO prettify does not do VB well
Dim exportFile: exportFile=NewFileName(exportDir)
Dim cn: Set cn = CreateObject("ADODB.Connection")
cn.Open _
"Provider = Microsoft.Jet.OLEDB.4.0; " & _
"Data Source =" & db
cn.Execute "SELECT * INTO [text;HDR=Yes;Database=" & exportDir & _
";CharacterSet=65001]." & exportFile & " FROM tblAuction"
'Export file
'========================================================================'
'Support functions
Function NewFileName(ExportPath)
Dim fs
Dim NewFileTemp
Set fs = CreateObject("Scripting.FileSystemObject")
NewFileTemp = "CSV" & Year(Date) _
& Right("00" & Month(Date),2) & Right("00" & Day(Date) ,2) & ".csv"
a = fs.FileExists(ExportPath & NewFileTemp)
i = 1
Do While a
NewFileTemp = "CSV" & Year(Date) _
& Right("00" & Month(Date),2) & Right("00" & Day(Date) ,2) & "_" & i & ".csv"
a = fs.FileExists(ExportPath & NewFileTemp)
i = i + 1
If i > 9 Then
'Nine seems enough times per day to be
'exporting a table
a = True
MsgBox "Too many attempts"
WScript.Quit
End If
Loop
NewFileName = NewFileTemp
End Function
答案 2 :(得分:0)
我已将这些行编号以供参考。
1. db = "C:\Docs\LTD.mdb"
2. TextExportFile = "C:\Docs\Exp.txt"
3. strSQL = "SELECT * FROM tblMembers"
4. Set f = fs.CreateTextFile(TextExportFile, True)
第1行 - 是您正在使用的当前访问数据库文件。这个案子是LTD.mdb
第2行 - 是您要写入/追加的文件的名称。这是Exp.txt
第3行 - 是用于收集数据的sql语句
第4行 - 是打开要写入的文件的命令。
将第2行更改为您想要的文件名 将第3行更改为您要使用的表。如果您只希望一对夫妇按姓名识别,则选择*将使用所有列。从mytable中选择col1,col2 ....您还需要研究使用where子句。
将第4行从CreateTextFile更改为OpenTextFile并使用ForAppending追加。 MSDN VBA
我在格式化线条时画了一个空白。我使用的方法之一是修改select语句以包含逗号。例子选择col1& “,”&来自mytable的col2。
对于UTF-8(我没有工作示例)尝试:
utf = new String(a, 0, a.length, UTF-8);
f.WriteLine utf;
答案 3 :(得分:0)
Const adOpenStatic = 3
Const adLockOptimistic = 3
Const adClipString = 2
Const ForWriting = 2
Const ForAppending = 8
Const strDB = "C:\Docs\LTD.mdb"
Const strCSV = "C:\Docs\Exp.csv"
Set objAccessConnection = CreateObject("ADODB.Connection")
objAccessConnection.Open "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Data Source=" & strDB
Set objAccessRecordset = CreateObject("ADODB.Recordset")
strAccessQuery = "SELECT * FROM tblMembers"
objAccessRecordset.Open strAccessQuery, objAccessConnection, adOpenStatic, adLockOptimistic
Set objCSV = CreateObject("Scripting.FileSystemObject").OpenTextFile(strCSV, ForAppending, True)
objCSV.Write objAccessRecordset.GetString(adClipString,,",",CRLF)
objCSV.Close
Set objCSV = Nothing
objAccessRecordset.Close
Set objAccessRecordset = Nothing
objAccessConnection.Close
Set objAccessConnection = Nothing