Tag: adodb

在Excel的第二个会话中用ADODB连接打开工作簿

只有当我在新的Excel会话中打开工作簿,并且还有其他会话打开之前,问题才存在 当我在第一个Excel会话相同的Excel会话中打开工作簿时没有问题 问题是有些东西被打破了: Set cn = New ADODB.Connection Set rs = New ADODB.Recordset strFile = ThisWorkbook.FullName strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strFile _ & ";Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1"";" cn.Open strCon 当最后一行(即上面的cn.open strCon)被执行时,在第一个Excel会话中打开工作簿的只读版本,一切都会中断。 这是非常奇怪的,因为这是另一个popup只读版本的会话。 我看到一些人抱怨这个问题没有解决办法,例如: http://www.ozgrid.com/forum/showthread.php?t=76156

如何使用adodb编写sql查询来select长度超过255个字符的数据

我正在使用ADODB连接写入SQL语句来提取数据在Excel VBA中。 我的问题是,我有一个单元格,其中包含超过255个字符的string。 我想知道是否有一种方法可以继续使用ADODB连接来select长度超过255个字符的数据 这是我使用的function。 Public Function QueryRead(sqlArg As String) As Dictionary Dim pConnection As ADODB.Connection Set pConnection = New ADODB.Connection With pConnection .Provider = "Microsoft.Jet.OLEDB.4.0" .ConnectionString = "Data Source=" & ActiveWorkbook.FullName & _ ";Extended Properties=Excel 8.0;" '.Provider = "MSDASQL" '.ConnectionString = "Driver={Microsoft Excel Driver (*.xls)};" & _ "DBQ=" & App.Path & "\ExcelSrc.xls; " .CursorLocation […]

使用ADODB Excel 2010 VBA读取和处理长度超过255的string

这里有一件事给你们: 我想使用VBA EXCEL中的ADODB从封闭的工作簿中读取信息。 碰巧excel中单元格中的string有时长度大于255。 然后这里是这个限制: http : //support.microsoft.com/kb/189897 “如果字段的前8条logging被截断包含255个或更less的字符,您的数据可能会被截断为255个字符Microsoft Excel ODBC驱动程序将默认情况下扫描您的数据的前8行以确定types每列数据“。 有一个“解决scheme”:在registry中将TypeGuessRows值设置为零(0),但是: “出于性能方面的原因,如果Excel表格非常大,则不build议将TypeGuessRows值设置为零(0)。将此值设置为零时,Microsoft Excel将扫描表中的所有logging以确定每个表中的数据types列“。 所以这是我的问题: 有一种方法,我可以告诉(谎言)驱动程序读取超过255个字符(除了在每列的第一行放置一个虚拟string或设置TypeGuessRows值为零(0))。 如果我不能; 有没有办法写封闭的Excel工作簿,并保存所做的更改,以便我可以在每列的顶部插入虚拟的第一行,然后再从closures的工作簿中读取信息。

在vba中使用ADODB在SQL中命名variables

我有很多SQL脚本,其中许多使用各种不同的variables,我希望能够直接把结果放到Excel中。 希望尽可能“顺利”这样做,这样当有人给我一个新的SQL脚本(可能会比较复杂)时,设置收集结果的电子表格是相对干净的。 目前试图使用ADODB Command对象参数来工作,但我甚至无法得到一个非常基本的例子工作。 我有以下的VBA: Dim oConnection As ADODB.Connection Set oConnection = New ADODB.Connection oConnection.ConnectionString = "MyConnectionString" oConnection.Open Dim cmd As ADODB.Command Set cmd = New ADODB.Command cmd.ActiveConnection = oConnection 到这里只是设置连接,这似乎工作正常。 cmd.CommandText = "DECLARE @DateID integer;" & _ "SELECT TOP 10 * FROM dbo.SomeRecords " & _ "WHERE DateID = @DateID" cmd.CommandType = adCmdText Dim […]

ADODB Excel SQL语句写入下一个可用行

我目前能够在我的VBScript中使用ADODB连接来读取和更新Excel电子表格中的数据。 这工作顺利,我知道如何操纵不同的列和不同的行与我想要的。 我的问题是,我现在需要input一行新的数据。 它如何知道在哪里放置它? 我一直在使用的代码总是给出一些参考点:例如: rs.Open "Update [links$] Set [F" & arrLocals(i) & "]= '" & arrChangeData(i) & "' Where [F2] = '" & arrFormID(j) & "'", cn, adOpenStatic, adLockOptimistic 所以根据这一点,只要你正在使用arrFormID(j)与F2列匹配工作 ,就意味着要在这一行做些什么。 但是,如果你想要一个新的行,我不知道要匹配什么?

即使Excel中存在多个logging,CopyFromRecordset也只复制并粘贴第一行

我有一个Excel工作表,包含像数据表 strSQL = "SELECT S.FIELD_NAME1,S.FIELD_NAME2,S.FIELD_NAME3 from [SourceData$A1:IV6] S" Dim cn as ADODB.Connection Dim rs as ADODB.Recordset cn.Open strCon Set rs = CmdSqlData.Execute() Worksheets("SourceData").Cells.ClearContent Worksheets("AnswerData").Cells(2, 1).CopyFromRecordset rs 结果: 只有第一行和其他logging被忽略。 我已经试过下面的查询。 strSQL = "SELECT COUNT(*) from [SourceData$A1:IV6] S" 结果是5 。 请让我知道为什么其他logging不复制到logging集?

VBA:从Excel导入表格到SQL

我正在尝试使用VBA将excel中的数据表导入到SQL Server 2012中。 最好借助于UDF。 Excel表格看起来像这样。 TableID 2012 2011 2010 2009 row 1 11 12 13 14 row 2 21 22 23 24 row 3 31 32 33 34 etc.. (我把数字放在单元格中指定它们的位置,例如11 =第1行,第1列) 数据库表看起来像这样。 Header: id | year | row1 | row2 | row3 | etc.. ExampData: TableId 2012 11 21 31 .. ExampData: TableId 2011 12 […]

VBA – 从电子表格的内容创buildADODB.Recordset

我正在查询SQL数据库的Excel应用程序。 查询可能需要很长时间才能运行(20-40分钟)。 如果我错误地编码了一些东西,可能需要很长时间才能出错或达到一个中断点。 我可以把结果保存到一张纸上,这是我使用logging集的时候可能会炸毁的。 有没有办法将数据加载到ADODB.Recordset当我正在debugging跳过查询数据库(第一次后)? 我会用这样的东西吗? 在MS-Access VBA中查询Excel工作表(使用ADODBlogging集)

VBA新数据库连接

如何更改下面的代码以防止在屏幕截图中看到的内容。 我用下面的代码运行一个macros Dim conn As ADODB.Connection Dim rec1 As ADODB.Recordset Dim thisSql As String Set conn = New ADODB.Connection Dim sConn As String sConn = "Provider=SQLOLEDB;Trusted_Connection=Yes;Server=xyz;Database=xyz;UID=xyz;PWD=xyz" conn.Open sConn ' this is creating multiple connections. Set rec1 = New ADODB.Recordset rec1.Open thisSql, conn 它运行SQL Server查询(大约20行,包含4个连接)。 一切都很好,除了事实上,运行几次后,我的数据库pipe理员说,我的查询加载了太多的数据库。 现在,我的查询可能会导致问题,也可能是Excel正在开始一次运行多个连接。 这方面的一些证据是下面的截图以及数据库上的负载似乎随时间增加的事实。 如何build立数据库连接而不需要不断build立新的连接? 有没有人有与Excel数据库macros相似的问题? UPDATE 虽然下面的答案是非常有用的(尤其是对于从VBA开始的人),似乎我的查询负载的主要原因是多个连接的组合,并忽略了我的代码中的一行: With Sheets("FVols").QueryTables.Add(Connection:=rec1, Destination:=Sheets("FVols").Range("A1")) .name […]

如果工作表的第一行没有列名称,如何使用ADODB连接从Excel中检索数据?

我使用以下types的代码从一些Excel工作簿检索数据(path是一个参数) Dim strSQL As String, conStr as String Dim cnn As New ADODB.Connection Dim rs As New ADODB.Recordset conStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source='" & path & "';" & _ "Extended Properties=""Excel 12.0;HDR=YES;IMEX=1;"";" strSQL = "SELECT [Field1], [Field2] FROM [Worksheet$] WHERE [Thing1] > 1" cnn.open conStr rs.Open query, cnn, adOpenStatic, adLockOptimistic, adCmdText 如果这些字段的名称位于工作表的第一行,则该代码可以正常工作。 问题是我需要从工作表中检索数据表中的数据从另一行开始(第10行)。 有没有办法指定我的数据表的第一行?