从访问数据库导出制表符分隔文件

时间:2008-12-04 12:57:22

标签: ms-access vbscript

此代码:

db = "C:\Dokumente und Einstellungen\hom\Anwendungsdaten\BayWotch4\Neuer Ordner\baywotch.db5"
TextExportFile = "C:\Dokumente und Einstellungen\hom\Anwendungsdaten\BayWotch4\Neuer Ordner\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 tblAuction1"

rs.Open strSQL, cn, 3, 3

Set fs = CreateObject("Scripting.FileSystemObject")

Set f = fs.CreateTextFile(TextExportFile, True, True)

a = rs.GetString

f.WriteLine a

f.Close

生成制表符分隔文件,但不适合导入mysql。我希望它生成一个类似于访问宏生成的文件的文件,可以在这里看到:

http://www.yousendit.com/download/TTZtWmdsT01kMnVGa1E9PQ

vbscript生成的文件在这里:

http://www.yousendit.com/download/TTZtWmdsT00wVWtLSkE9PQ

我还想知道为什么文件大小相差50k左右。

编辑:vbscript文件的结果使用了记事本无法识别的换行符,因此上面看起来非常杂乱。宏似乎没有导出html代码,这解释了为什么它是一个较小的文件,但是vbscript似乎没有制表符分隔,因为它不会导入到mysql中。

编辑:在linux系统下文件看起来不错,所以它可能与windows处理有关。但它仍然不正确。

3 个答案:

答案 0 :(得分:0)

这两个文件都包含看起来像制表符分隔的数据以及HTML代码(由某些MS Office应用程序生成,看起来很像)。 tblAuction1是否存储任何OLE对象?也许当您导出这些对象时,它正在导出文件内容?

答案 1 :(得分:0)

对我来说,这似乎是一个编码问题。我看到你在创建文本文件时传递了Unicode参数,但两个文件之间明显存在编码差异。

答案 2 :(得分:0)

这个项目的目标是什么?创建文件的目的是什么?如果您只是想将数据从Access移动到MySQL,为什么不直接用这样的东西


Const Access = "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Data Source=C:\Dokumente und Einstellungen\hom\Anwendungsdaten\BayWotch4\Neuer Ordner\baywotch.db5"
Const SQLServer = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Data Source=.\SQLEXPRESS"
Dim arrFields

Set SQLConn = CreateObject("ADODB.Connection")
WITH SQLConn
    .ConnectionString = SQLServer
    .Open
End WITH
Set AccessConn = CreateObject("ADODB.Connection")
WITH AccessConn
    .ConnectionString = Access
    .Open
End WITH
Set SQLRS = CreateObject("ADODB.Recordset")
WITH SQLRS
    .CursorType = 3
    .LockType = 3
End WITH
Set AccessRS = CreateObject("ADODB.Recordset")
WITH AccessRS
    .ActiveConnection = AccessConn
    .CursorType = 3
    .LockType = 3   
End WITH

strSQL = "SELECT * FROM tblAuction1" 
AccessRS.Open strSQL

If AccessRS.RecordCount <> 0 Then
    AccessRS.MoveFirst
    ReDim arrFields(AccessRS.Fields.Count)
    Do Until AccessRS.BOF OR AccessRS.EOF
        For i = 0 To AccessRS.Fields.Count - 1
            If AccessRS.Fields(i).Type = 202 Then 
                arrFields(i) = Chr(39) & AccessRS.Fields(i).Value & Chr(39)
            Else
                arrFields(i) = AccessRS.Fields(i).Value
            End If
        Next
        strSQL1 = "INSERT INTO {Table in mySQL} VALUES("
        For j = 1 To UBound(arrFields) - 2 
            strSQL1 = strSQL1 & arrFields(j) & ","
        Next
        strSQL1 = strSQL1 & arrFields(UBound(arrFields) - 1) & ")"
        SQLRS = SQLConn.Execute(strSQL1)
        AccessRS.MoveNext
    Loop
Else
    MsgBox "No records found"
End If 

这会将记录集返回的所有记录添加到SQLExpress数据库中的表中,根据您的需要进行调整(如果您的需求是将数据从一个数据库传输到另一个数据库)应该不难。