SQL查询不会只返回一个字段的完整结果

我在使用VBA执行SQL查询时遇到问题,并将结果复制到Excel工作表中。

当子执行时,它只复制256的倍数的行(所以行256,512,768等是唯一填充到Excel中的行)。 我没有问题从数据库中复制任何其他领域。 另外,当我在MySQL中运行相同的查询,它工作正常。 对于SQL和VBA都是相当新的,我不明白为什么这个特定的领域会造成麻烦。 我唯一能想到的是它的内容是一个总是以下划线开始的string(我只提到,因为它是它和其他字段之间的唯一区别)。

有人有任何想法,为什么这可能会发生?

干杯,

利亚姆

编辑:这是有问题的代码片段。 说实话,我不确定是否看到代码会有所作为,看到它适用于其他情况,但是再次,这就是为什么我是新手:)

Dim con As ADODB.Connection Dim rst As ADODB.Recordset Set con = New ADODB.Connection Set rst = New ADODB.Recordset con.ConnectionString = "DRIVER={MySQL ODBC 5.1 Driver};SERVER=ipaddress;UID=userID;PWD=password;DATABASE=jiradb;OPTION=16427;" con.Open sql = "SELECT TEMPO_DATA FROM gssd_worklog WHERE WORK_DATE BETWEEN '2012-01-01' AND '2012-03-31'" 'Open Recordset' rst.Open sql, con 'Copy Data to Excel' Set ws = ActiveSheet ws.Range("A2").CopyFromRecordset rst 

我昨天遇到了一个非常类似的问题,发现这个线程,而研究如此想要添加我的“解决scheme”,以帮助其他人。

为了改进问题描述,我发现它适用于我的数据集中的一个特定字段,有趣的是,如果我重新sorting查询,每个后续字段。 添加尾随或删除早期的字段没有什么区别于我的问题列。

检查types显示它是一些其他types的工作,所以没有任何线索。

但是,因为它是一个特定的字段(在这种情况下是一个文本字段),所以我决定尝试将我的SQL查询更改为CAST问题字段,更改:

 SELECT Col1, Col2, Col3 FROM TableName 

…至…

 SELECT Col1, Col2, CAST(Col3 AS VARCHAR(8)) AS Col3 FROM TableName 

…突然出现所有的数据(包括任何尾随列)。

我认为你的问题是最后一行,当你试图复制工作表上的logging。 尝试像这样(代码修改http://msdn.microsoft.com/en-us/library/aa223845(v=office.11​​).aspx ):

 For iCols = 0 to rs.Fields.Count - 1 ws.Cells(1, iCols + 1).Value = rst.Fields(iCols).Name Next ws.Range("A2").CopyFromRecordset rst 

我想我已经find了解决办法,感谢拉马克的帮助:

 rst.Open sql, con Dim iRows As Integer For iCols = 0 To rst.Fields.Count - 1 ws.Cells(1, iCols + 1).Select With Selection .Value = rst.Fields(iCols).Name .Font.Bold = True .EntireColumn.AutoFit End With Next iCols iRows = 2 While Not rst.EOF For iCols = 0 To rst.Fields.Count - 1 ws.Cells(iRows, iCols + 1).Value = rst.Fields(iCols).Value Next iCols rst.MoveNext iRows = iRows + 1 Wend 

该问题似乎一直试图复制所有的领域的logging集一次,复制logging字段的字段,并逐行似乎解决了这个问题。

我有一个类似的问题,使用logging集。 它会在SQL查询中返回一组客户结果,但不会将结果粘贴到某些客户的工作表上。

按照提示投射我的数据,我深入挖掘了我的查询,并注意到结果集中隐藏了空值。 从logging集中null的外观,没有超出该空值(由该特定列sorting)以外的任何结果将粘贴在我的工作表上。

或者在伪代码中:

 SELECT DISTINCT a,b,e FROM DATASET 

列c将包含一个空值。

所以我的解决scheme:在Excel中使用它之前,在SQL中删除结果集中的重复项和空值。