Tag: adodb

如何使用UTF-8在VBA(Excel)中保存带有BOM编码的文本文件(CSV)?

所以这是我最初的问题。 下面我的问题的答案 ,似乎是获得UTF-8(和没有BOM的UTF-8)编码的唯一解决scheme是使用ADODB.Stream对象。 在主题行中我的新问题的答案作为代码发布。 我正坐在这里,试图用一个VBAmacrosSave Excel工作表Save为.CSV文件。 但是,我想知道是否我使用ADODB / ADODB.Stream或只是.SaveAs Fileformat:=xlCSV 。 我试图谷歌它,似乎我无法find哪个方法是“最好”的答案。 我需要用逗号分隔,UTF-8和双引号(“”)作为文本标识符。 是否正确,当您使用Fileformat:= ,不能保存为UTF-8,因为xlCSV没有使用该编码? 对,那是正确的。 此代码将转换您的Excel工作表,并将其保存为CSV文件,不带BOM编码的UTF-8。 我在一个网站上find了这个代码,所以我不会赞扬它。 没有BOM链接的CSV Sub CSVFileAsUTF8WithoutBOM() Dim SrcRange As Range Dim CurrRow As Range Dim CurrCell As Range Dim CurrTextStr As String Dim ListSep As String Dim FName As Variant Dim UTFStream As Object Dim BinaryStream As Object ' ask […]

使用ADODB的VBA查询在不同的计算机上返回不同的结果

在Excel中的VBAmacros中,我有一个问题,即具有完全相同的数据库凭据的完全相同的查询正在返回不同的结果,具体取决于脚本正在执行的计算机。 一些拉取所有正确的结果,其他人有结果丢失。 如果我们使用Toad或任何其他可以执行oracle的工具执行查询,那么它在所有testing过的机器上都能正常工作。 到目前为止,我们已经发现以下事情不会引起问题: Oracle驱动程序版本(即时客户端与完全兼容testing没有发现相关性) Excel版本(我公司的每个人都有相同的Excel版本) VBA项目引用是相同的。 确认所有机器都指向正确的数据库。 ODBC设置是相同的 所有testing的机器都在Windows 7上运行Excel 2010,数据库是Oracle 11, 这是脚本 Dim cn Set cn = CreateObject("ADODB.Connection") Dim rs Set rs = CreateObject("ADODB.Recordset") cn.ConnectionString = "DSN=#####;UID=####;PWD=#####;DBQ=######;DBA=W;APA=T;EXC=F;FEN=T;QTO=T;FRC=10;FDL=10;LOB=T;RST=T;BTD=F;BNF=F;BAM=IfAllSuccessful;NUM=NLS;DPM=F;MTS=T;MDI=F;CSR=F;FWC=F;FBS=64000;TLO=O;MLD=0;ODA=F"` `cn.Open` `Set rs = cn.Execute(SQLfinal)` Dim iCol As Integer Dim iRow As Integer fldCount = rs.Fields.Count For iCol = 1 To fldCount Sheets("8. Data").Cells(12, iCol).Value = […]

VBA Excel ADODB预先载入现金数据集以更快速地查询一个大的Access数据集500000行

下午好,我有一个问题:Excel的速度从Access外部数据库中检索数据(47秒 – >我想达到3秒)Excel 2010 Access 2000 在打开的事件代码我打开我运行这个macros: 'I define connection and dataset as public Public conn As ADODB.Connection Public mrs As ADODB.Recordset Public cmd As ADODB.Command Public DBPath As String Public strConn As String Public strSQL As String Public Sub preloadDataset() Set conn = New ADODB.Connection Set mrs = New ADODB.Recordset DBPath = ThisWorkbook.Path & […]

上传数据到SQLServer

我正在做一个macros来上传数据到SQLServer,我想要这个表,每次你运行macros 想要使用Recordset添加最后一个添加的行 Sub GetData() Call RecordsetFromSheet(prueba) End Sub Public Function RecordsetFromSheet(ByVal tableName As String) Dim cn As Object Dim rs As Object Dim strCon As String Dim strSQL, strInput As String Dim cmd As Object 打开连接到SQL Server Set cn = CreateObject("ADODB.Connection") cn.ConnectionString = OleDbConnectionString("xxxxx", "xxxx", "xx", "xxxxxxx") cn.Open closures连接 If CBool(cn.State And adStateOpen) = True […]

Excel VBA ADODB访问2003年和2013年

我有一个使用ADODB连接从数据库中提取数据的excel文件。 该文件已经运行好几个月,并由几名员工使用。 在这个周末,它停止了Access 2003的计算机上的工作,但在Access 2010的计算机上仍然正常工作,所有的计算机都有Excel 2010.我检查了每台计算机的参考库,它们都select了相同的引用(ActiveX 2.7) 。 它在“cn.Open MyConn”上崩溃(未指定的错误)。 IT向我保证,在周末没有对Excel或Access进行更新。 Dim rs As ADODB.Recordset Dim cn As ADODB.Connection stDB = "K:\SHARED\Gross Planner\Gross Planner 2003.mdb" MyConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & stDB & ";" Set cn = New ADODB.Connection cn.Open MyConn

VBA Excel SQL查询更新超过255个字符的字段

请寻求一些帮助/build议。 问题:我想在VBA Excel中运行SQL查询来更新Excel Spreadsheet(.xlsx)列/字段值大于255个字符但我收到以下错误: The field is too small to accept the amount of data you attempted to add. Try inserting or pasting less data. 代码:我的连接string如下: Sub Open_Conn(strDb As String) On Error GoTo conError Debug.Print (Time() & " – Connecting to: " & strDb) Set CON = New ADODB.Connection CON.Provider = "Microsoft.ACE.OLEDB.12.0" CON.Open "Data Source=" […]

“尝试重新连接时运行时错误”-2147467259(80004005)未指定错误“

我正在构build一个Excel电子表格,以使用自定义的Excel加载项从服务器获取一些数据(表格格式)。 之后,我需要修改该表,我认为最好的办法是使用ADODB连接到相同的Excel电子表格和SQL查询。 当我尝试使用与该Excel加载项连接之前使用的Microsoft ACE OLEDB 12.0驱动程序build立ADODB连接时,我总是得到相同的错误: 运行时错误“-2147467259(80004005) 未指定的错误 这是我用来build立ADODB连接的代码: Dim Conn As New ADODB.Connection Dim mrs As New ADODB.Recordset Dim sconnect As String Set Conn = New ADODB.Connection DBPath = ThisWorkbook.FullName sconnect = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" _ & DBPath & ";" & "Extended Properties=""Excel 12.0 Xml; HDR=YES"";" Conn.Open sconnect Conn.Close 如果我交换连接顺序,首先连接到我的Excel使用ADODB,然后连接到使用外接的外部服务器,我不会得到这个错误。 问题是,有时我已经使用不同的电子表格build立了Add-in连接,当我用ADODB连接打开这个电子表格时,错误被触发,因为如果我不重新启动Excel会话,Excel将保留该插件连接。 我已经尝试循环通过Excel连接,但它没有拿起插件连接: For i = […]

使用SQL插入到空的Excel表中,而不会丢失数据types属性

我正在运行SOM VBA代码与SQL插入到另一个工作表。 我的问题是,当我使用INSERT INTO语句,我失去了空表中的数据types属性。 这是我正在运行的代码: Sub InsertTest() Dim rs As ADODB.Recordset Set rs = New ADODB.Recordset Dim fromFile As String fromFile = "C:\some\file.xlsx" Dim cnStr As String cnStr = "Provider=Microsoft.ACE.OLEDB.12.0;" & _ "Data Source=" & fromFile & ";" & _ "Extended Properties=Excel 12.0" Dim query As String query = "INSERT INTO [TableTwo$](lastname, age) SELECT lastname, […]

查询pipe道分隔文件不返回所有logging

我用ADODB查询使用VBA的pipe道分隔文本文件。 我曾尝试使用ACE和JET引擎,但结果是相同的,并不正确。 我在目录中保存了一个“schema.ini”文件,告诉引擎该文件是pipe道分隔的。 当查询完成时,我有数据,移动列和其他字段是空白,当我可以看到文本文件中的数据。 我使用CopyFromRecordset方法将结果传输到我的工作簿。 任何人都可以看到我的代码中的东西? 还是有人遇到这个? 我的连接string: With Conn .Provider = "Microsoft.ACE.OLEDB.12.0" .ConnectionString = "Data Source=" & strPath & ";" & _ "Extended Properties=""text;HDR=YES;FMT=Delimited""" .Open End With “strPath”的值: strPath = "H:\Folder\" SQLstring: strSQL = "SELECT * FROM " & strFile & ";" 数据传输: With ThisWorkbook With .Sheets("CashFlows") .Range("a2").CopyFromRecordset Rst With .Range("a1") For i = […]

无法在VBA中获取Worsheet_Change上的Target的ListRow

所以,我试图从Target获得ListRow ,但是我似乎不停地发生错误。 目标是将文档中完成的更改上传到服务器。 最初我ListRows来上传closures文档时的更改,但是现在ListObjects已经变得非常大,以至于将数组上传到服务器所用的时间太长。 更快的方式似乎只是简单地上传更改。 我在下面写了一个代码,我得到错误:无效或不合格的参考。 有些函数因为在工作而被忽略,而且与这个问题无关。 Private Sub Worksheet_Change(ByVal Target As Range) Application.Calculation = xlCalculationManual Dim CustomersConn As ADODB.Connection Dim CustomersCmd As ADODB.Command Dim lo As Excel.ListObject Dim ws As Excel.Worksheet Dim lr As Excel.ListRow Dim Customers As Variant Set ws = ThisWorkbook.Worksheets(8) Set lo = ws.ListObjects("TCustomers") Set CustomersConn = New ADODB.Connection Set CustomersCmd […]