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 将访问查询导出到制表符分隔文件不起作用的主要内容,如果未能解决你的问题,请参考以下文章
将包含超过255个字段的制表符分隔文本文件导入两个访问表的工作代码