如何以CSV格式导出Access数据库?

时间:2009-02-24 12:29:50

标签: ms-access vbscript

我有一个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

4 个答案:

答案 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 Migration Toolkit

我针对您的数据库对此进行了测试,它似乎导入正确,只需几分钟,并将生成各种可重用的脚本等等。

如果您在设置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;

UTF-8 VBA

答案 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