Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ms access 从access数据库导出以制表符分隔的文件_Ms Access_Vbscript - Fatal编程技术网

Ms access 从access数据库导出以制表符分隔的文件

Ms access 从access数据库导出以制表符分隔的文件,ms-access,vbscript,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

此代码:

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。我希望它生成一个类似于access宏生成的文件的文件,如下所示:

vbscript生成的文件如下所示:

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

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


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

这两个文件都包含类似于制表符分隔的数据以及HTML代码(由某些MS Office应用程序生成,从外观上看)。TBLAUCTION 1是否存储任何OLE对象?也许当您导出这些对象时,就是在导出文件内容?

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

此项目的目标是什么?创建文件的目的是什么?如果您只是想将数据从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 

Const Access=“Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;数据源=C:\Dokumente und Einstellungen\hom\Anwendungsdaten\BayWotch4\Neuer Ordner\baywotch.db5”
Const SQLServer=“Provider=SQLOLEDB.1;集成安全性=SSPI;数据源=。\SQLEXPRESS”
暗棱场
设置SQLConn=CreateObject(“ADODB.Connection”)
使用SQLConn
.ConnectionString=SQLServer
打开
以
Set AccessConn=CreateObject(“ADODB.Connection”)
使用AccessConn
.ConnectionString=访问权限
打开
以
Set SQLRS=CreateObject(“ADODB.Recordset”)
使用SQLRS
.CursorType=3
.LockType=3
以
Set AccessRS=CreateObject(“ADODB.Recordset”)
带存取器
.ActiveConnection=AccessConn
.CursorType=3
.LockType=3
以
strSQL=“从TBLAUCTION 1中选择*
打开strSQL
如果AccessRS.RecordCount为0,则
访问者优先
重拨arrFields(AccessRS.Fields.Count)
直到AccessRS.BOF或AccessRS.EOF
对于i=0访问rs.Fields.Count-1
如果AccessRS.Fields(i).Type=202,则
arrFields(i)=Chr(39)和AccessRS.Fields(i).Value和Chr(39)
其他的
arrFields(i)=访问器.字段(i).值
如果结束
下一个
strSQL1=“插入{Table in mySQL}值(”
对于j=1到UBound(ARRFIENDS)-2
strSQL1=strSQL1&arrFields(j)和“,”
下一个
strSQL1=strSQL1&arrFields(UBound(arrFields)-1)和“
SQLRS=SQLConn.Execute(strSQL1)
下一步访问器
环
其他的
MsgBox“未找到任何记录”
如果结束

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

html代码由另一个程序从易趣拍卖网站检索。据我所知,没有老对象。至少在我的windows xp系统上,根据vbscript,vbscript生成的文件与access文件的制表符分隔方式不同。你知道还有什么可能吗?你可能会遇到HTML文本中嵌入制表符的问题;导入程序会将此解释为新字段的开始。这肯定是问题所在吗?access宏也以unicode格式导出..所以这应该不是问题..我不能说这肯定是问题所在,但当我查看文件时,它们的编码肯定不一样。您是将access用作编程环境还是仅用作数据存储?如果是前者,当DAO是Jet的本机数据接口时,为什么要使用ADO对Jet数据进行编码?如果您在其中编程的不是Access,那么您使用的不是Access,而是Jet。区别对于可用的答案很重要。我使用Access就像使用数据存储一样。我之所以使用ADO,是因为在前面的问题中,有人建议我使用ADO。这是一种比导出到文本文件后导入更好的方法吗?如果可行,为什么不呢?既然你可以移动一次数据,为什么还要移动两次呢?中间商总是会增加成本并延迟交付。运动部件少(大部分)总是好的。