English 中文(简体)
从Access数据库导出一个Tab分隔的文件
原标题:
  • 时间:2008-12-04 12:57:22
  •  标签:

这个代码:

db = "C:Dokumente und EinstellungenhomAnwendungsdatenBayWotch4Neuer Ordneraywotch.db5"
TextExportFile = "C:Dokumente und EinstellungenhomAnwendungsdatenBayWotch4Neuer OrdnerExp.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。我希望它生成与Access宏生成的文件类似的文件,可以在此处查看:

这是中文吗?这是一个网址,不能进行中文翻译。

vbscript 生成的文件在这里:

将此翻译为中文:http://www.yousendit.com/download/TTZtWmdsT00wVWtLSkE9PQ http://www.yousendit.com/download/TTZtWmdsT00wVWtLSkE9PQ

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

编辑: 来自vbscript文件的结果使用换行符,notepad无法识别,因此在查看时以上内容会显得混乱。宏似乎没有导出html代码,这就解释了为什么它是一个较小的文件,然而vbscript似乎不是以制表符分隔的,因为它将无法导入mysql。

编辑:文件在Linux系统下看起来没有问题,所以可能与Windows处理有关。但仍不正确。

问题回答

这两个文件都包含了看起来像是用tab分隔的数据,以及一些HTML代码(根据外观来看是某些微软Office应用程序生成的)。tblAuction1表格中是否存储了任何OLE对象?也许当你导出这些对象时它也会导出文件内容?

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

这个项目的目标是什么?创建这个文件的目的是什么?如果你只是想从Access移动数据到MySQL,为什么不直接使用像这样的工具?


Const Access = "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Data Source=C:Dokumente und EinstellungenhomAnwendungsdatenBayWotch4Neuer Ordneraywotch.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数据库中的一个表中,如果您需要从一个数据库传输数据,调整它应该不难。





相关问题
热门标签