vbscript 将访问查询导出到制表符分隔文件不起作用

Posted

技术标签:

【中文标题】vbscript 将访问查询导出到制表符分隔文件不起作用【英文标题】:vbscript to export an access query to a tab delimited file not working 【发布时间】:2008-11-24 14:19:17 【问题描述】:

我有这个代码:

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)

a = rs.GetString

f.WriteLine a

f.Close

这意味着连接到一个访问数据库并生成一个制表符分隔的文本文件。 tblAuction1 是数据库中的一个查询,并且肯定存在并且没有以任何方式拼写错误,但是我收到一个错误,它无法找到或不存在。当我将其更改为表名称 tblAuction 时,我收到一条错误消息,指出 f.WriteLine a 已被错误调用。

edit:我现在只遇到 f.writeline a 的问题,说提供了不正确的参数。我不再有 tblAuction1 的问题

编辑:用于我的查询的 sql 代码:

SELECT tblAuction.article_no, tblAuction.article_name, tblAuction.subtitle, tblAuction.current_bid, tblAuction.start_price, tblAuction.bid_count, tblAuction.quant_total, tblAuction.quant_sold, tblAuction.start, tblAuction.ends, tblAuction.origin_end, tblUser.user_name, tblAuction.best_bidder_id, tblAuction.finished, tblAuction.watch, tblAuction.buyitnow_price, tblAuction.pic_url, tblAuction.private_auction, tblAuction.auction_type, tblAuction.insert_date, tblAuction.update_date, tblAuction.cat_1_id, tblAuction.cat_2_id, tblAuction.article_desc, tblAuction.countrycode, tblAuction.location, tblAuction.condition, tblAuction.revised, tblAuction.paypal_accept, tblAuction.pre_terminated, tblAuction.shipping_to, tblAuction.fee_insertion, tblAuction.fee_final, tblAuction.fee_listing, tblAuction.pic_xxl, tblAuction.pic_diashow, tblAuction.pic_count, tblAuction.item_site_id
FROM tblUser INNER JOIN tblAuction ON tblUser.id = tblAuction.seller_id;

【问题讨论】:

嗯,它可以在我的机器上运行,安装了 Visual Studio 2005 和 MS Access 2000 的 Windows XP,没问题。你能提供更多关于你的配置的细节吗?您的查询在 access self 中有效吗?你能让它为你定义的新表工作吗? (有几个简单的列) 这与***.com/questions/280894/… 有关,正如该线程中提到的,如果您无法从 Access 导出,则存在一些重大问题。您使用的是纯 MS Access 还是有不同的后端? 我正在使用 Pure access 2003。我在 access 中运行 TransferText 宏时遇到的错误是错误 3001,在尝试运行 vbscript 时出现错误 80040e37。 【参考方案1】:

我已尝试在多个数据库和机器上重现此问题,我无法让您的代码失败。

叶子:

数据库损坏,能否运行修复并重试? 您的数据库中抛出查询的字段,我尝试了几种可能性,但找不到任何阻碍您的代码的东西。要排除其他内容,您可以尝试创建一个新表并查看您的代码是否适用于该表。 你的 dll 有问题,你能不能在另一台机器上试试。

答案(要了解我们如何得出答案,请参阅 cmets)

您的数据库中存在 writeline 不接受的 unicode 字符,因为您将文本文件创建为 ASCI。这种情况下的字符特别是 ♥♥♥

为了让它发挥作用:

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

附言

之前使用 transfertext 宏 here 回答了这个问题 正如Remou 指出的那样,这看起来像是一个更清洁的解决方案。让它与非默认分隔符一起工作有点痛苦。首先通过右键单击并选择导出来开始导出您要导出的查询。在以下对话框中指定规格并保存。创建宏时选择您刚刚保存的规范。

【讨论】:

它现在正在寻找 tblAuction1,但现在它指出 f.writeline a 存在问题,该过程的参数错误 如果现在正在查找表,请尝试正常传输文本。当我提供上面的代码时,它旨在测试您的数据库以查看可能出现的问题。您使用的是什么操作系统? 你做了什么让它找到它?修理 ?它适用于 tblAuction 吗?你能发布 tblAuction1 的 sql 查询吗? 我恢复了一个旧版本的数据库,这很有趣,因为查询根本没有改变,所以它一定是有点损坏了。我现在遇到的问题是宏无法找到我指定写入的文件名,并且 vbs 的 f.writeline 有问题 你能把文件写入没有空格的路径吗? C:\temp\Exp.txt 什么的?【参考方案2】:

我认为你的连接字符串中的空格有问题

试试这个:

cn.Provider = "Microsoft.Jet.OLEDB.4.0"
cn.ConnectionString = db
cn.Open

HTH

更新: 可能是数据库的访问权限有问题? 或者 mdb 已被其他用户独占打开(您在设计模式下具有访问权限)?

【讨论】:

您好,感谢您的帮助,但这并不能解决问题。我得到错误 80040e37 这没有帮助。应该是 dbo.tblAuction1 nstead 还是什么? 访问数据库对任何人开放,如果访问完全关闭,我会收到错误消息。根据我阅读的内容,我需要提供完整的标识符,但我不确定这意味着什么。 要尝试的 2 件事:在表中添加大括号:[tblAuction1] 并将 User Id=admin 添加到连接字符串中 这仍然没有任何区别。从访问中运行宏时出现相同的错误 另一个问题:在访问中尝试“压缩/修复数据库”。损坏的访问数据库通常是所有神秘错误的根源【参考方案3】:

试试这个


cn.Open _
  "Provider=Microsoft.Jet.OLEDB.4.0;" & _
  "Persist Security Info=False;" & _
  "Data Source=" & db

【讨论】:

您是否尝试过使用表名而不是查询? 如果我这样做,我会在 f.writeline a 上收到错误,但我还是需要查询? 你能写一个简单的字符串到文件吗?将 [f.WriteLine a] 行替换为 [f.WriteLine "Testing"] 并查看是否可以将任何内容写入文件。

以上是关于vbscript 将访问查询导出到制表符分隔文件不起作用的主要内容,如果未能解决你的问题,请参考以下文章

使用制表作为分隔符导出CSV按钮

将包含超过255个字段的制表符分隔文本文件导入两个访问表的工作代码

选项卡分隔文件到 SQL 查询(批量更新)

Oracle OBIEE (BI):将不带隐藏列的分析结果导出到 CSV

将MySQL查询另存为制表符或逗号分隔的文件

CSV文件转换帮助类